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



                                                        
                                    
 



                                                                                        
                                                                   
                                                                  
                                                                                       







                                                                                           
 






                                                                                                             
                                                                                 











                                                                                                          
















                                                                                                    
                                                                                 







                                                              


                                                                            

                                     


                                                           
                        


























                                                                                                       

                                               
                         





                                                                        
                 




                                                              
                                     


                                                                            
                 
                             












                                                                                                         
                                 







                                                                                        
                         








                                                               
                                                              
                                     


                                                                            
                 
                                    


















                                                                                            

                                       








                                                               
                                     


                                                                            
                 
                                    













                                                                                                              
                                                         



                                                                                      
                                                 
                                         
                                        



















                                                                                                                                                   

                                                               
                                         



                                                                                              
                                 
 
                                


                                                                              
















                                                                          





















                                                                                                    

                                               





                                                               



 











 
<?php

class User_RoleController extends Zend_Controller_Action
{
	protected $userIDsNamespace;

	public function init()
	{
		if (Zend_Auth::getInstance()->hasIdentity()) {
			$this->userIDsNamespace = Zend_Session::namespaceGet('userIDs');
			if($this->userIDsNamespace['roleID'] ==''){
				$pbsNotifier = new Pbs_Notifier();
				echo $pbsNotifier->notify('No roleID set','forbidden');
			}
			$this->roleMapper = new Application_Model_RoleMapper();
			$this->rightMapper = new Application_Model_RightMapper();
			$this->rightRolesMapper = new Application_Model_RightRolesMapper();
		} else {
			$this->_helper->redirector('login', 'auth');
		}
	}

	public function indexAction()
	{
		if(isset($this->userIDsNamespace['groupID'])) {
			$roleList = $this->roleMapper->findBy('groupID', $this->userIDsNamespace['groupID']);
			$this->view->groupID = $this->userIDsNamespace['groupID'];
			$this->view->roleList = $roleList;
		} else {
			$this->_helper->redirector('selectmembership', 'person');
			return;
		}
	}

	public function addAction()
	{
		if(isset($this->userIDsNamespace['groupID'])) {
			if (!isset($_POST["add"])){
				$addForm = new user_Form_RoleAdd(array('rightlist' => $rightList));
			} else {
				$addForm = new user_Form_RoleAdd(array('rightlist' => $rightList),$_POST);
				if ($addForm->isValid($_POST)) {
					$_POST['groupID'] = $this->userIDsNamespace['groupID'];
					$role = new Application_Model_Role($_POST);
					try {
						$this->roleMapper->save($role);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
					$this->_helper->redirector('', 'role');
					return;
				}
			}

			$this->view->addForm = $addForm;
		} else {
			$this->_helper->redirector('selectmembership', 'person');
			return;
		}
	}

	public function editAction()
	{
		$roleID = $this->_request->getParam('roleID');
		if(!isset($roleID)) {
			if(count($this->userIDsNamespace) > 0) {
				$roleID = $this->userIDsNamespace['roleID'];
			}
		}
		if(!isset($roleID)) {
			$addForm = new user_Form_RoleAdd();
			$this->view->addForm = $addForm;
			return;
		} else {
			$roleMapper = new Application_Model_RoleMapper();
			$role = $roleMapper->find($roleID);
			$roleGroupID = $role->getGroupID();
		}
		if($this->userIDsNamespace['groupID'] == $roleGroupID) {
			if (!isset($_POST["save"])){
				$role = $this->roleMapper->find($roleID);
				$_POST['title'] = $role->getTitle();
				$_POST['description'] = $role->getDescription();
				$_POST['groupID'] = $role->getGroupID();
				$_POST['inheritance'] = $role->getInheritance();
				$editForm = new user_Form_RoleEdit(array('roleID' => $roleID));
			} else {
				$editForm = new user_Form_RoleEdit(array('roleID' => $roleID), $_POST);
				if ($editForm->isValid($_POST)) {

					$role = new Application_Model_Role($_POST);
					$role->setID($this->_request->getParam('roleID'));
					try {
						$this->roleMapper->save($role);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;
					}
					$this->_redirect($_SERVER['HTTP_REFERER']);
					return;
				}
			}
			$this->view->editForm = $editForm;
		} else {
			$pbsNotifier = new Pbs_Notifier();
			echo $pbsNotifier->notify('modify','forbidden');
			$this->_helper-> viewRenderer-> setNoRender();
			return;
		}
	}

	public function showAction()
	{
		$roleID = $this->_request->getParam('roleID');
		if(!isset($roleID)) {
			if(count($this->userIDsNamespace) > 0) {
				$roleID = $this->userIDsNamespace['roleID'];
			}
		}
		if($roleID) {
			$roleMapper = new Application_Model_RoleMapper();
			$role = $roleMapper->find($roleID);
			$roleGroupID = $role->getGroupID();
			if($this->userIDsNamespace['groupID'] == $roleGroupID) {
				$rightroles = $this->rightRolesMapper->findBy('roleID', $roleID);
				if(count($rightroles) > 0) {
					foreach($rightroles as $rightrole) {
						$right = $this->rightMapper->find($rightrole['rightID']);
						$rightsList[] = $right;
					}
					if(is_array($rightsList)) {
						$this->view->rightsList = $rightsList;
					}
				}
				$this->view->role = $this->roleMapper->find($roleID);
				$this->view->roleID = $roleID;
				$this->view->userIDsNamespace = $this->userIDsNamespace;
			} else {
				$pbsNotifier = new Pbs_Notifier();
				echo $pbsNotifier->notify('view','forbidden');
				$this->_helper-> viewRenderer-> setNoRender();
				return;
			}
		} else {
			$this->_helper->redirector('', 'role');
			return;
		}
	}

	public function deleteAction()
	{
		$this->_helper->viewRenderer->setNoRender();
		$roleID = $this->_request->getParam('roleID');
		if(!isset($roleID)) {
			if(count($this->userIDsNamespace) > 0) {
				$roleID = $this->userIDsNamespace['roleID'];
			}
		}
		if (isset($roleID)){
			$roleMapper = new Application_Model_RoleMapper();
			$role = $roleMapper->find($roleID);
			$roleGroupID = $role->getGroupID();
			if($this->userIDsNamespace['groupID'] == $roleGroupID) {
				$role = $this->roleMapper->find($roleID);
				try {
					$this->roleMapper->delete($role);
				} catch(Zend_Exception $e)
				{
					echo "Caught exception: " . get_class($e) . "<br/>";
					echo "Message: " . $e->getMessage() . "<br/>";
					return;
				}
				$this->_helper->redirector('', 'role');
				return;
			} else {
				$pbsNotifier = new Pbs_Notifier();
				echo $pbsNotifier->notify('delete','forbidden');
				$this->_helper-> viewRenderer-> setNoRender();
				return;
			}
		} else {
			$this->_helper->redirector('', 'role');
			return;
		}
	}

	public function linkrightAction()
	{
		$roleID = $this->_request->getParam('roleID');
		if(!isset($roleID)) {
			if(count($this->userIDsNamespace) > 0) {
				$roleID = $this->userIDsNamespace['roleID'];
			}
		}
		if(isset($roleID)) {
			$roleMapper = new Application_Model_RoleMapper();
			$role = $roleMapper->find($roleID);
			$roleGroupID = $role->getGroupID();
			if($this->userIDsNamespace['groupID'] == $roleGroupID) {
				$rightroles = $this->rightRolesMapper->findBy('roleID', $roleID);
				$rights = $this->rightMapper->fetchAll();
				if(count($rightroles) > 0) {
					if(count($rights) > 0) {
						foreach($rights as $right) {
							foreach($rightroles as $rightrole) {
								if($right->getID() == $rightrole['rightID']) {
									$found = true;
									break;
								}
							}
							if(!$found) {
								$rightlist[] = $right;
							}
							$found = false;
						}
					}
				} else {
					$rightlist = $rights;
				}
				if(count($rightlist) > 0) {
					if (!isset($_POST["link"])){
						$linkForm = new user_Form_LinkRight(array('rightlist' => $rightlist, 'roleID' => $roleID));
					} else {
						$linkForm = new user_Form_LinkRight(array('rightlist' => $rightlist, 'roleID' => $roleID), $_POST);
						if ($linkForm->isValid($_POST)) {
							$rightroles = new Application_Model_RightRoles();
							$rightroles->setRightID($_POST['rightID']);
							$rightroles->setRoleID($roleID);
							try {
								$this->rightRolesMapper->save($rightroles);
							} catch(Zend_Exception $e)
							{
								echo "Caught exception: " . get_class($e) . "<br/>";
								echo "Message: " . $e->getMessage() . "<br/>";
								return;
							}
							$this->_redirect('/user/role/show/roleID/' . $roleID);
							return;
						}
					}
					$this->view->linkForm = $linkForm;
				} else {
					$this->_redirect('/user/role/show/roleID/' . $roleID);
					return;
				}

			} else {
				$pbsNotifier = new Pbs_Notifier();
				echo $pbsNotifier->notify('link','forbidden');
				$this->_helper-> viewRenderer-> setNoRender();
				return;
			}
		} else {
			$this->_helper->redirector('', 'role');
			return;
		}
	}

	public function unlinkrightAction()
	{
		$this->_helper-> viewRenderer-> setNoRender();
		$rightRolesID = $this->_request->getParam('rightrolesID');
		if(isset($rightRolesID)) {
			$rightRolesID = explode('-',$rightRolesID);
			$roleID = $rightRolesID[0];
			$rightID = $rightRolesID[1];
			if (isset($roleID) && isset($rightID)){
				$roleMapper = new Application_Model_RoleMapper();
				$role = $roleMapper->find($roleID);
				$roleGroupID = $role->getGroupID();
				if($this->userIDsNamespace['groupID'] == $roleGroupID) {
					$rightroles = new Application_Model_RightRoles();
					$rightroles->setRoleID($roleID);
					$rightroles->setRightID($rightID);
					try {
						$this->rightRolesMapper->delete($rightroles);
					} catch(Zend_Exception $e)
					{
						echo "Caught exception: " . get_class($e) . "<br/>";
						echo "Message: " . $e->getMessage() . "<br/>";
						return;

					}
					$this->_redirect('/user/role/show/roleID/' . $roleID);
					return;
				} else {
					$pbsNotifier = new Pbs_Notifier();
					echo $pbsNotifier->notify('unlink','forbidden');
					$this->_helper-> viewRenderer-> setNoRender();
					return;
				}
			}
		} else {
			$this->_helper->redirector('', 'role');
			return;
		}
	}


}