summaryrefslogblamecommitdiffstats
path: root/application/modules/user/controllers/FilterController.php
blob: c8cd2e55f9ed812ecab807728831a4698d8888e6 (plain) (tree)
1
2
3
4
5
6



                                                          

                                    
















                                                                                                     
                 



                                     


                                                         

                                                                 



                                                                                           




                                                                                           




                                                                                           
                        
                                                                                                                    





                                                             
        
                                                  
         
 

                                         



                                                     




















                                                                                                                                                        
                 
                
                                                    



                                                                                                                              

                                                                                                                                     
                                                              

                                                                                          
                                                                       
                                                                                                
                                                                          
                                                                                           
                                                                            
 





                                                                                                           
 
                                                                                            



                                                                                               


                                                                    
         
 



                                                                     



                                                                
 


                                                                 
                                                                                     
                                                                               
                                                                
                                                                     
                                                                                       

                             
                                                                                              


                         
                                                                                  
                 
         
 


                                                                   






                                                                                       



                                                                               
                                                                
                                                                          
                                                                 

                                                                             
                                                               

                                                                                     
                                                                                                                                     



                                                                              
                                                                                              
                         
                       
                                                                                
                                                                                  

                                                                                     

                                                                                             
                                                                                                                                                    
                                                                               

                                                                                                     


                                                                                                              
                                                                                       
                                                

                                                                                                    



                                                                                                                                  

                                                                                                                            
                                                                                                                       



                                                                                                                              
                                                 

                                                                                                                                


                                                                                                               
                                         


                                                                                      
                                                                                                      
                                 



                                                                                          
                 











                                                                                                    
                
                                                                    

                                                                            

                                              
                                                                     


                                                                                            
                                                                        
                                                                           

                                                                             




                                              



                                                                  








                                                                             
                                    



                                                                                                                                                    
                                           

                                                                        
                                                            
                                                                                           
                                                                                               

                                 
                                                                                                             

                                                                                                                                                                                                
                                   
                                                                
                                                         




                                                                                                





                                                                                                                             
                                         
                                             
                                                                                                      


                                                                                                                
                                         
 
                                                                                                  
                                                                          
                                                                                            




                                                                
                                                                                   
                 
         
 

                                               



                                                           

                                                       



                                                                                                   

                                                                                          


                                                                                         
 




                                                                                                                                       


                                                                                                                                                                        

                                           



                                                                                           
                                                                                                      
                                 

                                                                                   
                                                                                          


                            
                                                                                                


                                                                                                                                                    

                                                                       

                                                                                                           

                                                                                                  


                                                                                                 
 
                                                                                                     
                                                                            




                                                                                                             


                                                                                                                                     
                                                                                    

                                                                                                                                     
                                                 
                                                     
                                                                                                              
                                                                                                                





                                                                                                          


                                                                                                              
                                         

                                                                              

                                                                                   


                                                                                          



                                                 



                                                                 







                                                                                           

                                                                 
 
                                                                                     
                                    
                                                                                                   
                                                                                    




                                                                                                           
                                                            
                                                                                           
                                                                                                  


                                 
                                                                                              


                         




                                                                                  




                                                                                 
         

 











 
<?php

class User_FilterController extends Zend_Controller_Action
{
	protected $filterMapper;
	protected $membershipMapper;
	public function init()
	{
		if (Zend_Auth::getInstance()->hasIdentity()) {
			$userIDsNamespace = Zend_Session::namespaceGet('userIDs');
			if($userIDsNamespace['membershipID'] ==''){
				$pbsNotifier = new Pbs_Notifier();
				echo $pbsNotifier->notify('No membershipID set','forbidden');
			}
			$this->filterMapper = new Application_Model_FilterMapper();

			$membershipMapper = new Application_Model_MembershipMapper();
			$this->membership = new Application_Model_Membership();
			$membershipMapper->find($userIDsNamespace['membershipID'],$this->membership);

			$this->db = Zend_Db_Table::getDefaultAdapter();
		} else {
			$this->_helper->redirector('login', 'auth');
		}
	}

	public function indexAction()
	{
		// ACL: Is he allowed to see the overview
		if(!Pbs_Acl::checkRight('fo'))
			$this->_redirect('/user');
			
		$result = $this->_request->getParam('addresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('create',$result);
		}
		$result = $this->_request->getParam('deleteresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('delete',$result);
		}
		$result = $this->_request->getParam('modifyresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('modify',$result);
		}
			
		$filters = $this->filterMapper->findBy('groupID',$this->membership->getGroupID(),'priority','DESC');
		foreach($filters as $filter){
			$ff = new Application_Model_Filter();
			$ff->setOptions($filter);
			$ff->setID($filter['filterID']);
			$allFilter[] = $ff;
		}
	
		$this->view->filters = $allFilter;
	}

	public function addfilterAction()
	{
		// ACL: Is he allowed to add a Filter
		if(!Pbs_Acl::checkRight('fa'))
			$this->_redirect('/user');
			
		$rr = new Application_Model_GroupGroupsMapper();
		$groupMapper = new Application_Model_GroupMapper();
		$parentGroups = $rr->getParentGroups($this->membership->getGroupID());	
		$bootmenus = array();	
		foreach($parentGroups as $parentGroup){
			foreach($parentGroup as $p){
				$bmmapper = new Application_Model_BootMenuMapper();
				$result = $bmmapper->findBy('groupID',$p);
				foreach($result as $rr){
					$bm = new Application_Model_BootMenu();
					$bm->setOptions($rr);
					$bm->setID($rr['bootmenuID']);
					if($bm->getMembershipID() == null){										
						$group = new Application_Model_Group();
						$groupMapper->find($bm->getGroupID(),$group);
					
						$name = $group->getTitle();
						$bootmenus[$name][$bm->getID()] = $bm->getTitle();
					}
				}
			}
		}
		
		$this->view->bootmenus = $bootmenus;

		if (!isset($_POST["add"])){
			$addfilterform = new user_Form_Filter(array('buttontext' => 'Create Filter','bootmenus'=>$bootmenus));
			$this->view->addfilterform = $addfilterform;
		}else {
			$addfilterform = new user_Form_Filter(array('buttontext' => 'Create Filter','bootmenus'=>$bootmenus),$_POST);
			if ($addfilterform->isValid($_POST)) {
				try{
					$newfilter = new Application_Model_Filter($_POST);
					$newfilter->setCreated(time());
					$newfilter->setGroupID($this->membership->getGroupID());
					$newfilter->setMembershipID(null);
					$newfilter2 = new Application_Model_FilterMapper();
					$id = $newfilter2->save($newfilter);

					$filterentriesMapper = new Application_Model_FilterEntriesMapper();
					$filterentry = new Application_Model_FilterEntries();
					$filterentry->setFilterID($id);
					$filterentry->setFiltertypeID(6);
					$filterentry->setFiltervalue($this->membership->getGroupID());
					$filterentriesMapper->save($filterentry);

					$this->_redirect('/user/filter/index/addresult/ok');
				}catch (Zend_Exception $e) {
					echo "Error message 2: " . $e->getMessage() . "\n";
					$this->_redirect('/user/filter/index/addresult/error');
				}
			}
			$this->view->addfilterform = $addfilterform;
		}
	}

	public function removefilterAction()
	{
		$filterID = $this->_request->getParam('filterID');
		$filtermapper = new Application_Model_FilterMapper();
		
		// ACL: Is he allowed to remove the filter
		if(!Pbs_Acl::checkRight('fd'))
			$this->_redirect('/user');		

		if(is_numeric($filterID)){
			$filter = new Application_Model_Filter();
			$filtermapper->find($filterID,$filter);
			if($filter->getGroupID() == $this->membership->getGroupID()){
				$deletefilter = new Application_Model_Filter();
				$deletefilter->setID($filterID);
				$filtermapper->delete($deletefilter);
				$this->_redirect('/user/filter/index/deleteresult/ok');
			}
			else{
				$this->_redirect('/user/filter/index/deleteresult/forbidden');
			}
		}
		else{
			$this->_redirect('/user/filter/index/deleteresult/error');
		}
	}

	public function editfilterAction()
	{
		$bmmapper = new Application_Model_BootMenuMapper();
		$result = $bmmapper->findBy('groupID',$this->membership->getGroupID());
		foreach($result as $rr){
			$bm = new Application_Model_BootMenu();
			$bm->setOptions($rr);
			$bm->setID($rr['bootmenuID']);
			$bootmenus[] = $bm;
		}
		// ACL: Is he allowed to edit the filter or the filterpriority?
		if(!Pbs_Acl::checkRight('fe') && !Pbs_Acl::checkRight('fefp'))
			$this->_redirect('/user');	
				
		if (!isset($_POST["add"])){			
			$filterID = $this->_request->getParam('filterID');
			$filter = new Application_Model_Filter();

			$filtermapper = new Application_Model_FilterMapper();
			$filtermapper->find($filterID,$filter);
			if($filter->getGroupID() == $this->membership->getGroupID()){
				$filter2 = $filter->toArray();
				$editfilterform = new user_Form_Filter(array('buttontext' => 'Edit Filter','bootmenus'=>$bootmenus));
				$editfilterform->populate($filter2);
				$this->view->editfilterform = $editfilterform;
			}
			else{
				$this->_redirect('/user/filter/index/modifyresult/forbidden');
			}
		} else{
			try{							
				$filterID = $this->_request->getParam('filterID');
				$filter = new Application_Model_Filter();
				$filtermapper = new Application_Model_FilterMapper();
				$filtermapper->find($filterID,$filter);
				if($filter->getGroupID() == $this->membership->getGroupID()){
					$editfilterform = new user_Form_Filter(array('buttontext' => 'Edit Filter','bootmenus'=>$bootmenus),$_POST);
					if ($editfilterform->isValid($_POST)) {
						$filtermapper = new Application_Model_FilterMapper();
						
						$newfilterentry = new Application_Model_Filter($_POST);
						$newfilterentry->setID($this->_request->getParam('filterID'));
						$newfilterentry->setGroupID($this->membership->getGroupID());
						$newfilterentry->setMembershipID(null);
						
						// ACL: if he is only allowed to edit filterpriority
						if(Pbs_Acl::checkRight('fefp')){
							$DBfilterentry = new Application_Model_Filter();
							$filtermapper->find($this->_request->getParam('filterID'),$DBfilterentry);
						
							$compareresult = $filtermapper->compare($newfilterentry,$DBfilterentry);
							if(isset($compareresult['priority']) && count($compareresult) == 1){
								$filtermapper->save($newfilterentry);
								$this->_redirect('/user/filter/index/modifyresult/ok');
							}
							else{
								$this->_redirect('/user/filter/index/modifyresult/forbidden');
							}
						}
						// ACL: he is allowed to edit the filter
						elseif(Pbs_Acl::checkRight('fe')){						
							$filtermapper->save($newfilterentry);
							$this->_redirect('/user/filter/index/modifyresult/ok');
						}
					}
					$this->view->editfilterform = $editfilterform;
				}
				else{
					$this->_redirect('/user/filter/index/modifyresult/forbidden');
				}
			}catch (Zend_Exception $e) {
				echo "Error message 2: " . $e->getMessage() . "\n";
				$this->_redirect('/user/filter/index/modifyresult/error');
			}
		}
	}

	private function prepareFormData(){
		$poolMapper = new Application_Model_PoolMapper();
		$pools = $poolMapper->findBY('groupID',$this->membership->getGroupID());
			
		$bootisoMapper = new Application_Model_BootIsoMapper();
		$bootisos = $bootisoMapper->findBY('groupID',$this->membership->getGroupID());
			
		$membershipMapper = new Application_Model_MembershipMapper();
		$memberships = $membershipMapper->findBY('groupID',$this->membership->getGroupID());
			
		
		$grouppMapper = new Application_Model_GroupMapper();
		$group = new Application_Model_Group();
		$grouppMapper->find($this->membership->getGroupID(),$group);
		$groups[] = $group->toArray();

		$clientMapper = new Application_Model_ClientMapper();
		$clients = $clientMapper->findBY('groupID',$this->membership->getGroupID());
			
		return array (	'clients' 		=> $clients,
    					'memberships' 	=> $memberships,
    					'groups' 		=> $groups,
    					'bootisos'		=> $bootisos,
    					'pools'			=> $pools);
			
	}

	public function addfilterentryAction()
	{
		// ACL: is he allowed to create a new filterentry?
		if(!Pbs_Acl::checkRight('ffa'))
			$this->_redirect('/user');	
		
		$filterID = $this->_request->getParam('filterID');
		$filterMapper = new Application_Model_FilterMapper();
		$filter = new Application_Model_Filter();
		$filterMapper->find($filterID,$filter);
			
		$selectData = $this->prepareFormData();
			
		if($filter->getGroupID() == $this->membership->getGroupID()){
			if (!isset($_POST["add"])){
				try{
					$addform = new user_Form_FilterEntry(array(	'buttontext' => 'Add Filterentry',
															'filterID' => $filterID,
															'selectData' => $selectData,
															'data' => $_POST
					));
					$addform->populate($_POST);
					$this->view->addform = $addform;
				}catch (Zend_Exception $e) {
					echo "Error message 2: " . $e->getMessage() . "\n";
					$this->_redirect('/user/filter/index/addresult/error');
				}
			} else{
				$addform = new user_Form_FilterEntry(array('buttontext' => 'Add Filterentry',
															'selectData' => $selectData,						
															'data'=>$_POST
				));
				if ($addform->isValid($_POST)) {
					print_a('valid');
					$newfilterenty = new Application_Model_FilterEntries();
					$newfilterenty->setFilterID($filterID);
					$newfilterenty->setFiltertypeID($_POST['filtertypeID']);

					if($_POST['filtertypeID'] == 1){
						$newfilterenty->setFiltervalue($this->fillup($_POST['filtervalue'],3,'.'));
						$newfilterenty->setFiltervalue2($this->fillup($_POST['filtervalue2'],3,'.'));
					}
					elseif($_POST['filtertypeID'] == 2){
						$newfilterenty->setFiltervalue($this->fillup($_POST['filtervalue'],2,':'));
						$newfilterenty->setFiltervalue2($this->fillup($_POST['filtervalue2'],2,':'));
					}
					else{
						$newfilterenty->setFiltervalue($_POST['filtervalue']);
						if(isset($_POST['filtervalue2'])){
							$newfilterenty->setFiltervalue2($_POST['filtervalue2']);
						}
					}

					$newfilter2 = new Application_Model_FilterEntriesMapper();
					$newfilter2->save($newfilterenty);
					$this->_redirect('/user/filter/index/addresult/ok');
				}
				$this->view->addform = $addform;
			}
		}
		else{
			$this->_redirect('/user/filter/index/addresult/forbidden');
		}
	}

	public function editfilterentryAction()
	{
		//ACL: is he allowed to edit filterentrys ?
		if(!Pbs_Acl::checkRight('ffe'))
			$this->_redirect('/user');	
			
		$selectData = $this->prepareFormData();
		if (!isset($_POST["add"])){
			try{
				$filterentriesID = $this->_request->getParam('filterentriesID');
				$filterentry = new Application_Model_FilterEntries();
				$filterentriesmapper = new Application_Model_FilterEntriesMapper();
				$filterentriesmapper->find($filterentriesID,$filterentry);

				$filterMapper = new Application_Model_FilterMapper();
				$filter = new Application_Model_Filter();
				$filterMapper->find($filterentry->getFilterID(),$filter);

				if($filter->getGroupID() == $this->membership->getGroupID()){
					if(isset($_POST['filtertypeID']) && $_POST['filtertypeID'] != $filterentry->getFiltertypeID()){
						$filterentry->setFiltertypeID($_POST['filtertypeID']) ;
					}
					$data = $filterentry->toArray();
					$editfilterform = new user_Form_FilterEntry(array('buttontext' => 'Edit Filterentry',
																'selectData' => $selectData,		
																'data' => $data
					));

					$editfilterform->populate($filterentry->toArray());
					$this->view->editfilterform = $editfilterform;
				}
				else{
					$this->_redirect('/user/filter/index/modifyresult/forbidden');
				}
			}catch (Zend_Exception $e) {
				echo "Error message 2: " . $e->getMessage() . "\n";
				$this->_redirect('/user/filter/index/modifyresult/error');
			}
		} else{
			try{
				$filterentriesID = $this->_request->getParam('filterentriesID');
				$editfilterform = new user_Form_FilterEntry(array('buttontext' => 'Edit Filterentry',
															'selectData' => $selectData,
															'data' => $_POST
				));
				if ($editfilterform->isValid($_POST)) {
					$filterentry = new Application_Model_FilterEntries();
					$filterentriesmapper = new Application_Model_FilterEntriesMapper();
					$filterentriesmapper->find($filterentriesID,$filterentry);

					$filterMapper = new Application_Model_FilterMapper();
					$filter = new Application_Model_Filter();
					$filterMapper->find($filterentry->getFilterID(),$filter);

					if($filter->getGroupID() == $this->membership->getGroupID()){
						if($_POST['filterID'] == '')
						unset($_POST['filterID']);

						$newfilterenty = new Application_Model_FilterEntries($_POST);
						$newfilterenty->setID($filterentriesID);
						if($_POST['filtertypeID'] == 1){
							$newfilterenty->setFiltervalue($this->fillup($_POST['filtervalue'],3,'.'));
							$newfilterenty->setFiltervalue2($this->fillup($_POST['filtervalue2'],3,'.'));
						}
						elseif($_POST['filtertypeID'] == 2){
							$newfilterenty->setFiltervalue($this->fillup($_POST['filtervalue'],2,';'));
							$newfilterenty->setFiltervalue2($this->fillup($_POST['filtervalue2'],2,':'));
						}
						else{
							$newfilterenty->setFiltervalue($_POST['filtervalue']);
							$newfilterenty->setFiltervalue2($_POST['filtervalue2']);
						}							
						
						$newfilter2 = new Application_Model_FilterEntriesMapper();
						$newfilter2->save($newfilterenty);
						$this->_redirect('/user/filter/index/modifyresult/ok');
						
					}
					else{
						$this->_redirect('/user/filter/index/modifyresult/forbidden');
					}
				}
				$this->view->editfilterform = $editfilterform;
			}catch (Zend_Exception $e) {
				echo "Error message 2: " . $e->getMessage() . "\n";
				$this->_redirect('/user/filter/index/modifyresult/error');
			}
		}
	}

	public function removefilterentryAction()
	{
		//ACL: is he autohorized to delete a filterentry?
		if(!Pbs_Acl::checkRight('ffd'))
			$this->_redirect('/user');	
			
		$filterentriesID = $this->_request->getParam('filterentriesID');
		if(is_numeric($filterentriesID)){
			$filterentriesmapper = new Application_Model_FilterEntriesMapper();
			$filterentry = new Application_Model_FilterEntries();
			$filterentriesmapper->find($filterentriesID, $filterentry);
			$filterID = $filterentry->getFilterID();

			$filterMapper = new Application_Model_FilterMapper();
			$filter = new Application_Model_Filter();
			$filterMapper->find($filterID,$filter);

			if($filter->getGroupID() == $this->membership->getGroupID()){
				try{
					$deletefilterentry = new Application_Model_FilterEntries();
					$deletefilterentry->setID($filterentriesID);
				
					$filterentriesmapper = new Application_Model_FilterEntriesMapper();
					$filterentriesmapper->delete($deletefilterentry);
					$this->_redirect('/user/filter/index/deleteresult/ok');
					
				}catch (Zend_Exception $e) {
					echo "Error message 2: " . $e->getMessage() . "\n";
					$this->_redirect('/user/filter/index/deleteresult/error');
				}
			}
			else{
				$this->_redirect('/user/filter/index/deleteresult/forbidden');
			}
		}
		else{
			$this->_redirect('/user/filter/index/deleteresult/error');
		}
	}
	private function fillup($string, $length, $seperator=':',$sign='0'){
		$ar = explode($seperator,$string);
		$representation = array();
		foreach($ar as $part){
			$representation[] = sprintf("%".$sign.$length."s",$part);
		}
		return implode($seperator,$representation);
	}
}