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(array('groupID' => $this->membership->getGroupID()), true); foreach($pools as $pool) { $ff = new Application_Model_Pool(); $ff->setOptions($pool); $ff->setID($pool['poolID']); $yourpools[] = $ff; } // Search $search = $this->_request->getParam('search'); $mySearch = new Pbs_Search(); $mySearch->setSearchTerm($search) ->setModule('pool'); if($search != '') { $this->view->search = $mySearch->getSearchTerm(); $yourpools = $mySearch->search($yourpools); } $this->view->searchform = $mySearch->searchForm(); // Pagination $pagination = new Pbs_Pagination(); $pagination->setPerPage(10) ->setElement($yourpools) ->setRequestPage($this->_request->getParam('page')) ->setPageUrl('/user/pool/index'.((isset($this->view->search)) ? '/search/'.$this->view->search : '')); $yourpools = $pagination->getElements(); $this->view->pagination = $pagination->pagination(); $this->view->page = $pagination->getRequestPage(); $this->view->pools = $yourpools; // Get all Clients from this group $clientmapper = new Application_Model_ClientMapper(); $clientsArray = $clientmapper->findBy(array('groupID' => $this->membership->getGroupID()), true); // Get all assigned Clients $assignedclientmapper = new Application_Model_PoolEntriesMapper(); $assignedclients = $assignedclientmapper->fetchAll(); foreach($assignedclients as $c) { $assignedclientsArray[] = $c->toArray(); } $db = Zend_Db_Table::getDefaultAdapter(); // extract the un-assigned clients from the clientlist of the group $stmt = $db->query("SELECT c.clientID, c.groupID, macadress,hardwarehash,created FROM pbs_poolentries pe RIGHT OUTER JOIN pbs_client c ON c.clientID = pe.clientID WHERE poolentriesID IS NULL AND c.groupID = '".$this->membership->getGroupID()."'"); $freeclients = $stmt->fetchAll(); // Format Time-String foreach($freeclients as $k => $cig) { - $freeclients[$k]['created'] = date(Zend_Registry::get('dateformat'), $cig['created']); } if(Pbs_Acl::checkRight('posuc')) { $this->view->freeclients = $freeclients; } } public function searchAction() { $this->_redirect('/user/pool/index/search/'.($_GET['search'])); } 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('/user/pool/index/addresult/ok'); } catch (Zend_Exception $e) { echo "Error message 2: " . $e->getMessage() . "\n"; $this->_redirect('/user/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) ->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(array('groupID', $this->membership->getGroupID()), true); $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; } }