<?php
class User_RoleController extends Zend_Controller_Action
{
protected $userIDsNamespace = null;
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(!Pbs_Acl::checkRight('ro')) {
$this->_redirect('/user');
}
if(isset($this->userIDsNamespace['groupID'])) {
$this->view->roleList = $this->roleMapper->findBy(array('groupID' => $this->userIDsNamespace['groupID']),true);
// Search
$search = $this->_request->getParam('search');
$mySearch = new Pbs_Search();
$mySearch->setSearchTerm($search);
$mySearch->setModule('role');
if($search != ''){
$this->view->search = $mySearch->getSearchTerm();
$this->view->roleList = $mySearch->search($this->view->roleList);
}
$this->view->searchform = $mySearch->searchForm();
// Pagination
$pagination = new Pbs_Pagination();
$pagination->setPerPage(5);
$pagination->setElement($this->view->roleList);
$pagination->setRequestPage($this->_request->getParam('page'));
$pagination->setPageUrl('/user/role/index'.((isset($this->view->search))?'/search/'.$this->view->search:''));
$this->view->roleList = $pagination->getElements();
$this->view->pagination = $pagination->pagination($pageurl);
$this->view->page = $pagination->getRequestPage();
$this->view->addRight = Pbs_Acl::checkRight('ra');
$this->view->editRight = Pbs_Acl::checkRight('re');
$this->view->deleteRight = Pbs_Acl::checkRight('rd');
$this->view->detailsRight = Pbs_Acl::checkRight('rdd');
$this->view->userIDsNamespace = $this->userIDsNamespace;
} else {
$this->_helper->redirector('selectmembership', 'person');
return;
}
}
public function searchAction(){
if(!Pbs_Acl::checkRight('ro')) {
$this->_redirect('/user');
}
$this->_redirect('/user/role/index/search/'.($_GET['search']));
}
public function addAction()
{
if(!Pbs_Acl::checkRight('ra')) {
$this->_redirect('/user');
}
if(isset($this->userIDsNamespace['groupID'])) {
$roleID = $this->userIDsNamespace['roleID'];
$rights = $this->rightMapper->fetchAll();
if(count($rights) > 0) {
$rightCategoryMapper = new Application_Model_RightCategoryMapper();
foreach($rights as $right) {
$rightCategory = $rightCategoryMapper->find($right->getRightcategoryID());
$rightlist[$rightCategory->getTitle()][$right->getID()] = $right->getTitle();
}
}
if (!isset($_POST["add"])){
$addForm = new user_Form_RoleAdd(array('rightlist' => $rightlist, 'inheritanceright' => Pbs_Acl::checkRight('rir'), 'addrighttoroleright' => Pbs_Acl::checkRight('rar')));
} else {
$addForm = new user_Form_RoleAdd(array('rightlist' => $rightlist, 'inheritanceright' => Pbs_Acl::checkRight('rir'), 'addrighttoroleright' => Pbs_Acl::checkRight('rar')),$_POST);
if ($addForm->isValid($_POST)) {
$_POST['groupID'] = $this->userIDsNamespace['groupID'];
$role = new Application_Model_Role($_POST);
try {
$this->roleMapper->save($role);
$db = Zend_Db_Table::getDefaultAdapter();
$insertedRoleID = $db->lastInsertId();
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "<br/>";
echo "Message: " . $e->getMessage() . "<br/>";
return;
}
foreach($_POST['rights'] as $rightID => $bool) {
if($bool == 1) {
$rightrole = new Application_Model_RightRoles();
$rightrole->setRightID($rightID);
$rightrole->setRoleID($insertedRoleID);
try {
$this->rightRolesMapper->save($rightrole);
} 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()
{
if(!Pbs_Acl::checkRight('re')) {
$this->_redirect('/user');
}
$roleID = $this->_request->getParam('roleID');
if(!isset($roleID)) {
if(count($this->userIDsNamespace) > 0) {
$roleID = $this->userIDsNamespace['roleID'];
}
}
if(!isset($roleID)) {
$this->_helper->redirector('add', 'role');
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, 'inheritanceright' => Pbs_Acl::checkRight('rir')));
} else {
$editForm = new user_Form_RoleEdit(array('roleID' => $roleID, 'inheritanceright' => Pbs_Acl::checkRight('rir')), $_POST);
if ($editForm->isValid($_POST)) {
$role = new Application_Model_Role($_POST);
$role->setID($roleID);
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->editForm = $editForm;
} else {
$pbsNotifier = new Pbs_Notifier();
echo $pbsNotifier->notify('modify','forbidden');
$this->_helper-> viewRenderer-> setNoRender();
return;
}
}
public function showAction()
{
if(!Pbs_Acl::checkRight('rdd')) {
$this->_redirect('/user');
}
$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(array('roleID' => $roleID),true);
if(count($rightroles) > 0) {
foreach($rightroles as $rightrole) {
$right = $this->rightMapper->find($rightrole['rightID']);
$rightsList[$right->getRightcategoryID()][] = $right;
}
if(is_array($rightsList)) {
$this->view->rightsList = $rightsList;
}
}
$rightCategoryMapper = new Application_Model_RightCategoryMapper();
$rightCategories = $rightCategoryMapper->fetchAll();
if(count($rightCategories) > 0) {
foreach($rightCategories as $rightCategory) {
$rightcategorieslist[$rightCategory->getID()] = $rightCategory->getTitle();
}
$this->view->rightcategorieslist = $rightcategorieslist;
}
$rights = $this->rightMapper->fetchAll();
if(count($rights) == count($rightroles)) {
$this->view->rightsAvailable = false;
} else {
$this->view->rightsAvailable = true;
}
$this->view->editRight = Pbs_Acl::checkRight('re');
$this->view->deleteRight = Pbs_Acl::checkRight('rd');
$this->view->addRightToRoleRight = Pbs_Acl::checkRight('rar');
$this->view->removeRightOfRoleRight = Pbs_Acl::checkRight('rrr');
$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()
{
if(!Pbs_Acl::checkRight('rd')) {
$this->_redirect('/user');
}
$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;
}
if($_SERVER['HTTP_REFERER']) {
if(strpos($_SERVER['HTTP_REFERER'], '/user/role/show') !== false && strpos($_SERVER['HTTP_REFERER'], '/roleID/') === false) {
$this->_helper->redirector('changemembership', 'person');
} else {
$this->_helper->redirector('', 'role');
}
} else {
$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()
{
if(!Pbs_Acl::checkRight('rar')) {
$this->_redirect('/user');
}
$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(array('roleID' => $roleID),true);
$rights = $this->rightMapper->fetchAll();
if(count($rightroles) > 0) {
if(count($rights) > 0) {
$rightCategoryMapper = new Application_Model_RightCategoryMapper();
foreach($rights as $right) {
foreach($rightroles as $rightrole) {
if($right->getID() == $rightrole['rightID']) {
$found = true;
break;
}
}
if(!$found) {
$rightCategory = $rightCategoryMapper->find($right->getRightcategoryID());
$rightlist[$rightCategory->getTitle()][$right->getID()] = $right->getTitle();
}
$found = false;
}
}
} else {
$rightCategoryMapper = new Application_Model_RightCategoryMapper();
foreach($rights as $right) {
$rightCategory = $rightCategoryMapper->find($right->getRightcategoryID());
$rightlist[$rightCategory->getTitle()][$right->getID()] = $right->getTitle();
}
}
if(count($rightlist) > 0) {
if (!isset($_POST["link"])){
$linkForm = new user_Form_LinkRight(array('rightlist' => $rightlist));
} else {
$linkForm = new user_Form_LinkRight(array('rightlist' => $rightlist, $_POST));
if ($linkForm->isValid($_POST)) {
foreach($_POST['rights'] as $rightID => $bool) {
if($bool == 1) {
$rightroles = new Application_Model_RightRoles();
$rightroles->setRightID($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()
{
if(!Pbs_Acl::checkRight('rrr')) {
$this->_redirect('/user');
}
$this->_helper-> viewRenderer-> setNoRender();
$rightRolesID = $this->_request->getParam('rightrolesID');
if(isset($rightRolesID)) {
$rightRolesID = explode('-',$rightRolesID);
$roleID = $rightRolesID[0];
if($rightRolesID[1] == 'all') {
$rightRolesMapper = new Application_Model_RightRolesMapper();
$rightroleslist = $rightRolesMapper->findBy(array('roleID' => $roleID));
foreach($rightroleslist as $rightroles) {
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 {
$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;
}
}
}