summaryrefslogblamecommitdiffstats
path: root/application/modules/user/controllers/PoolController.php
blob: d5cab09ba15b0b4e1a62f7ed109f8425e28fbc46 (plain) (tree)
1
2
3
4
5
6
7
8
9



                                                        
                            

                        

                              





                                                                                             
 


                                                                                                     


                                                                    
                                                                        
         
 

                                     


                                                                 
                        
                                                                    













                                                                                           









                                                                                           
 
                                                


                                                                                        




                                                           
                                    










                                                                                                          
                                              
                                                                                 
 
                                                  
                                                                     
                                                                                                 
 
                                           



                                                                                  
                 
 
                                                                                   
                                                                                      
 

                                                                        



                                          


                                                       
                
                                           


                                                                                                                
                                                              
                       
                                                                
                                                                                                              
                                                                                                                        
                                                            





                                                                                           



                                                                                            
                         
                                                            
                 
         
 


                                                              




                                                       







                                                                                   
                                                                                                          

                             
                                                                                                                 

                         
                                                                                             
         
 

                                        



                                                     
                                           
                                                                                        

                                                                         


                                                                                   
                                                                     
                                                                                                            
                                                                                                        



                                                                  
                                                                                                                 
                         
                       
                                                                 
                                                                                                            
                                                                                                               
                                                             
                                    
                                                                                         



                                                                                                        
                                                                                                     
                                                                                           

                                                                                                   
                                                                         
                                                                                                                          
                                         
                                             
                                                                                                                                 


                                                                                           
                                                                                                                     
                                 


                                                              
         
 


                                                                  
                                                              
 



                                                               

                                                                             
                                                                                                    



                                                                                          
                         
                                                                                         
 



                                                                                                                              
                                                              
                       


                                                                                                                               






                                                                                     

                                                                         
                                                                                                                                                               
                                                                                                       



                                                                                               
                                         
                                                                             
                                                                                                                

                                     
                                                                                                                       


                                                                                   
                                                                                                           

                                                              
                 
         
 


                                                                            
                        



                                                                   





                                                                                       
 

                                                                         
 

                                                                               

 
                                                                                                                                               



                                                                                                     
                                                                                                          

                             
                                                                                                                 


                         
                                                                                                     
                 





                                                                               









                                                                       


 









 
<?php

class User_PoolController extends Zend_Controller_Action
{
	private $membership;
	protected $page;
	
	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');
			}

			$membershipMapper = new Application_Model_MembershipMapper();
			$this->membership = new Application_Model_Membership();
			$membershipMapper->find($userIDsNamespace['membershipID'],$this->membership);
		} else {
			$this->_helper->redirector('login', 'auth');
		}
		$this->page = $this->_request->getParam('page');	
	}

	public function indexAction()
	{
		// ACL: is he allowed to see the pools of a group
		if(!Pbs_Acl::checkRight('poo'))
			$this->_redirect('/user');
			
		$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);
		}
		$result = $this->_request->getParam('addresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('create',$result);
		}
		$result = $this->_request->getParam('linkresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('link',$result);
		}
		$result = $this->_request->getParam('unlinkresult');
		if($result != ""){
			$pbsNotifier = new Pbs_Notifier();
			$this->view->notification = $pbsNotifier->notify('unlink',$result);
		}

		// get all pools from this group
		$poolMapper = new Application_Model_PoolMapper();
		$pools = $poolMapper->findBy('groupID',$this->membership->getGroupID());
		foreach($pools as $pool){
			$ff = new Application_Model_Pool();
			$ff->setOptions($pool);
			$ff->setID($pool['poolID']);
			$yourpools[] = $ff;
		}
		$perpage 	= 4;
		$req_page 	= $this->_request->getParam('page');
		$all 		= count($yourpools);
		$numpages 	= ceil($all/$perpage);		
		if($req_page < 0 || !is_numeric($req_page) )
			$req_page = 0;
		if($req_page >= $numpages)
			$req_page = $numpages-1;
		$startitem 	= $req_page * $perpage;		
		
		$pagination = new Pbs_Pagination();	
		$this->view->pagination = $pagination->pagination('/user/pool/index',$req_page,$numpages);
		$this->view->page = $req_page;
		$this->view->pools = array_slice($yourpools,$startitem,$perpage);

		// Get all Clients from this group
		$clientmapper = new Application_Model_ClientMapper();
		$clientsArray = $clientmapper->findBy('groupID',$this->membership->getGroupID());

		// Get all assigned Clients
		$assignedclientmapper = new Application_Model_PoolEntriesMapper();
		$assignedclients = $assignedclientmapper->fetchAll();
		foreach($assignedclients as $c){
			$assignedclientsArray[] = $c->toArray();
		}

		// extract the un-assigned clients from the clientlist of the group
		$freeclients  = $this->arrayDiff($clientsArray,$assignedclientsArray);

		if(Pbs_Acl::checkRight('posuc'))			
			$this->view->freeclients = $freeclients;
	}

	public function createpoolAction()
	{
		// ACL: is he allowed to create a pool?
		if(!Pbs_Acl::checkRight('poc'))
			$this->_redirect('/user');
		
		if (!isset($_POST["add"])){
			$addfilterform = new user_Form_Pool(array(
										'buttontext' => 'Create Pool',
										'page' => $this->page));	
			$this->view->addpool = $addfilterform;
		}else {
			$addpoolform = new user_Form_Pool(array(
										'buttontext' => 'Create Pool',
										'page' => $this->page),$_POST);		
			if ($addpoolform->isValid($_POST)) {
				try{
					$pool = new Application_Model_Pool($_POST);
					$pool->setGroupID($this->membership->getGroupID());
					$poolmapper = new Application_Model_PoolMapper();
					$poolmapper->save($pool);
					$this->_redirect('/dev/pool/index/addresult/ok');
				}catch (Zend_Exception $e) {
					echo "Error message 2: " . $e->getMessage() . "\n";
					$this->_redirect('/dev/pool/index/addresult/error');
				}
			}
			$this->view->addpool = $addpoolform;
		}
	}

	public function deletepoolAction()
	{
		$poolID = $this->_request->getParam('poolID');
		
		// ACL: is he allowed to delete a pool?
		if(!Pbs_Acl::checkRight('pod'))
			$this->_redirect('/user');
			
		if(is_numeric($poolID)){
			$poolmapper = new Application_Model_PoolMapper();
			$pool = new Application_Model_Pool();
			$poolmapper->find($poolID,$pool);
			if($this->membership->getGroupID() == $pool->getGroupID()){
				$deletepool = new Application_Model_Pool();
				$deletepool->setID($poolID);
				$poolmapper->delete($deletepool);
				$this->_redirect('/user/pool/index/page/'.$this->page.'/deleteresult/ok');
			}
			else{
				$this->_redirect('/user/pool/index/page/'.$this->page.'/deleteresult/forbidden');
			}
		}
		$this->_redirect('/user/pool/index/page/'.$this->page.'/deleteresult/error');
	}

	public function editpoolAction()
	{
		// ACL: is he allowed to edit a pool?
		if(!Pbs_Acl::checkRight('poe'))
			$this->_redirect('/user');
		
		if (!isset($_POST["add"])){
			$poolID = $this->_request->getParam('poolID');			
			$pool = new Application_Model_Pool();
			$poolmapper = new Application_Model_PoolMapper();
			$poolmapper->find($poolID,$pool);
			if($pool->getGroupID() == $this->membership->getGroupID()){
				$poolArray = $pool->toArray();
				$editpool = new user_Form_Pool(array(
										'buttontext' => 'Edit Pool',
										'page' => $this->page));
				$editpool->populate($poolArray);
				$this->view->editpool = $editpool;
			}
			else{
				$this->_redirect('/user/pool/index/page/'.$this->page.'/modifyresult/forbidden');
			}
		}else {
			$editpoolform = new user_Form_Pool(array(
										'buttontext' => 'Edit Pool',
										'page' => $this->page),$_POST);
			if ($editpoolform->isValid($_POST)) {
				try{
					$poolmapper = new Application_Model_PoolMapper();
					$poolID = $this->_request->getParam('poolID');
					$pooldb = new Application_Model_Pool();
					$poolmapper->find($poolID,$pooldb);
					print_a($pooldb->getGroupID(), $this->membership->getGroupID());
					if($pooldb->getGroupID() == $this->membership->getGroupID()){
						$pool = new Application_Model_Pool($_POST);
						$pool->setID($poolID);
						$pool->setGroupID($this->membership->getGroupID());
						$poolmapper->save($pool);
						$this->_redirect('/user/pool/index/page/'.$this->page.'/modifyresult/ok');
					}
					else{
						$this->_redirect('/user/pool/index/page/'.$this->page.'/modifyresult/forbidden');
					}
				}catch (Zend_Exception $e) {
					echo "Error message 2: " . $e->getMessage() . "\n";
					$this->_redirect('/user/pool/index/page/'.$this->page.'/modifyresult/error');
				}
			}
			$this->view->editpool = $editpoolform;
		}
	}

	public function linkclientAction()
	{
		$clientID = $this->_request->getParam('clientID');
		$poolID = $this->_request->getParam('poolID');

		// ACL: Is he allowed to link clients to pools?
		if(!Pbs_Acl::checkRight('polc'))
			$this->_redirect('/user');
		
		if(!isset($_POST['clientID']) && ($clientID == '')){
			$clientmapper = new Application_Model_ClientMapper();
			$clients = $clientmapper->findBy('groupID',$this->membership->getGroupID());
			$assignedclientmapper = new Application_Model_PoolEntriesMapper();
			$assignedclients = $assignedclientmapper->fetchAll();
			foreach($assignedclients as $c){
				$assignedclientsArray[] = $c->toArray();
			}
			$freeclients  = $this->arrayDiff($clients,$assignedclientsArray);

			$poolclient = new user_Form_PoolClient(array(
												'buttontext' => 'Link Client',
												'clients'=> $freeclients,
												'page' => $this->page));
			$this->view->poolclient = $poolclient;
		}else {
			$poolclient = new user_Form_PoolClient(array(
												'buttontext' => 'Link Client',
												'page' => $this->page),$_POST);
			try{
				$poolID = $this->_request->getParam('poolID');
				$poolmapper = new Application_Model_PoolMapper();
				$pooldb = new Application_Model_Pool();
				$poolmapper->find($poolID,$pooldb);
				$clientmapper = new Application_Model_ClientMapper();
				$clientdb = new Application_Model_Client();
				$clientmapper->find($clientID,$clientdb);
					
				if($pooldb->getGroupID() == $this->membership->getGroupID()	&& $clientdb->getGroupID() == $this->membership->getGroupID()){
					$poolentriesmapper = new Application_Model_PoolEntriesMapper();
					$poolentry = new Application_Model_PoolEntries($_POST);
					$poolentry->setPoolID($poolID);
					if($poolentry->getClientID() == ''){
						$poolentry->setClientID($clientID);
					}
					$poolentriesmapper->save($poolentry);
					$this->_redirect('/user/pool/index/page/'.$this->page.'/linkresult/ok');
				}
				else{
					$this->_redirect('/user/pool/index/page/'.$this->page.'/linkresult/forbidden');
				}
			}catch (Zend_Exception $e) {
				echo "Error message 2: " . $e->getMessage() . "\n";
				$this->_redirect('/user/pool/index/page/'.$this->page.'/linkresult/error');
			}
			$this->view->poolclient = $poolclient;
		}
	}

	public function unlinkclientAction()
	{
		$poolentriesID = $this->_request->getParam('poolentriesID');
			
		// ACL: Is he allowed to unlink clients from pools?
		if(!Pbs_Acl::checkRight('pouc'))
			$this->_redirect('/user');
			
		if(is_numeric($poolentriesID)){
			$poolentriesMapper = new Application_Model_PoolEntriesMapper();
			$poolentry = new Application_Model_PoolEntries();
			$poolentriesMapper->find($poolentriesID,$poolentry);
			$clientMapper = new Application_Model_ClientMapper();
			$client = new Application_Model_Client();

			$poolMapper = new Application_Model_PoolMapper();
			$pool = new Application_Model_Pool();

			$clientMapper->find($poolentry->getClientID(),$client);
			$poolMapper->find($poolentry->getPoolID(),$pool);


			if($pool->getGroupID() == $this->membership->getGroupID() && $client->getGroupID() == $this->membership->getGroupID()){
				$deletepoolentries = new Application_Model_PoolEntries();
				$deletepoolentries->setID($poolentriesID);
				$deletepoolentriesmapper = new Application_Model_PoolEntriesMapper();
				$deletepoolentriesmapper->delete($deletepoolentries);
				$this->_redirect('/user/pool/index/page/'.$this->page.'/unlinkresult/ok');
			}
			else{
				$this->_redirect('/user/pool/index/page/'.$this->page.'/unlinkresult/forbidden');
			}
		}
		else{
			$this->_redirect('/user/pool/index/page/'.$this->page.'/unlinkresult/error');
		}
	}

	// creates an array of two arrays
	// first parameter is the list of all clients
	// second parameter is the list of clients which are already in a group
	// return value is a list of all clients, which are in no group
	private function arrayDiff($a, $b){
		foreach($a as $k1 => $i1){
			foreach($b as $k2 => $i2){
				if($i1['clientID'] == $i2['clientID']){
					unset($a[$k1]);
				}
			}
		}
		return $a;
	}

}