hasIdentity()) {
$this->userIDsNamespace = Zend_Session::namespaceGet('userIDs');
$this->groupMapper = new Application_Model_GroupMapper();
$this->groupGroupsMapper = new Application_Model_GroupGroupsMapper();
$this->membershipMapper = new Application_Model_MembershipMapper();
$this->groupRequestMapper = new Application_Model_GroupRequestMapper();
$this->personmapper = new Application_Model_PersonMapper();
$this->rolemapper = new Application_Model_RoleMapper();
$this->groupList = $this->groupMapper->fetchAll();
$userIDsNamespace = Zend_Session::namespaceGet('userIDs');
$this->membership = new Application_Model_Membership();
$this->membershipMapper->find($userIDsNamespace['membershipID'],$this->membership);
$this->page = $this->_request->getParam('page');
} else {
$this->_helper->redirector('login', 'auth');
return;
}
}
public function indexAction()
{
// ACL show overview
if(!Pbs_Acl::checkRight('gso'))
$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);
}
$this->view->groupList = $this->groupList;
// Search
$search = $this->_request->getParam('search');
$mySearch = new Pbs_Search();
$mySearch->setSearchTerm($search);
$mySearch->setModule('group');
if($search != ''){
$this->view->search = $mySearch->getSearchTerm();
$this->view->groupList = $mySearch->search($this->view->groupList);
}
$this->view->searchform = $mySearch->searchForm();
// Pagination
$pagination = new Pbs_Pagination();
$pagination->setPerPage(10);
$pagination->setElement($this->view->groupList);
$pagination->setRequestPage($this->_request->getParam('page'));
$pagination->setPageUrl('/user/group/index'.((isset($this->view->search))?'/search/'.$this->view->search:''));
$this->view->groupList = $pagination->getElements();
$this->view->pagination = $pagination->pagination();
$this->view->page = $pagination->getRequestPage();
$this->view->userIDsNamespace = $this->userIDsNamespace;
}
public function searchAction(){
$this->_redirect('/user/group/index/search/'.($_GET['search']));
}
public function addAction()
{
// ACL create new group
if(!Pbs_Acl::checkRight('gc'))
$this->_redirect('/user');
if (!isset($_POST["add"])){
$addForm = new user_Form_GroupAdd(array('grouplist' => $this->groupList));
} else {
$addForm = new user_Form_GroupAdd(array('grouplist' => $this->groupList),$_POST);
if ($addForm->isValid($_POST)) {
$group = new Application_Model_Group($_POST);
$db = $this->groupMapper->findBy(array('title'=>$group->getTitle()));
if(count($db)>=1){
$this->_redirect('/user/group/index/page/'.$this->page.'/addresult/error');
}
try {
$this->groupMapper->save($group);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
$groupID = $this->groupMapper->getDbTable()->getDefaultAdapter()->lastInsertId();
$membership = $this->membershipMapper->find($this->userIDsNamespace['membershipID']);
// setting the actually used role in the new group
$roleID = $this->membership->getRoleID();
$membership->setID();
$membership->setGroupID($groupID);
$membership->setRoleID($roleID);
try {
$this->membershipMapper->save($membership);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
foreach($rightroleslist as $rightroles) {
$rightroles->setRoleID($roleID);
try {
$rightrolesMapper->save($rightroles);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
}
if($_POST['superordinatedGroupID'] != -1) {
$groupgroups = new Application_Model_GroupGroups();
#print_a($this->membership->getGroupID(),$this->membership);
$groupgroups->setParentID($this->membership->getGroupID());
$groupgroups->setGroupID($groupID);
try {
$this->groupGroupsMapper->save($groupgroups);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
}
$this->_redirect('/user/group/index/page/'.$this->page.'/addresult/ok');
return;
}
}
$this->view->addForm = $addForm;
}
public function editAction()
{
// ACL edit a group
if(!Pbs_Acl::checkRight('geo') && !Pbs_Acl::checkRight('ge'))
$this->_redirect('/user');
$groupID = $this->_request->getParam('groupID');
if(!isset($groupID)) {
if(count($this->userIDsNamespace) > 0) {
$groupID = $this->userIDsNamespace['groupID'];
}
}
if(!isset($groupID)) {
$this->_helper->redirector('add', 'group');
return;
}
if((!Pbs_Acl::checkRight('geo') && $groupID == $this->membership->getGroupID()) || ( !Pbs_Acl::checkRight('ge') && $groupID != $this->membership->getGroupID() ))
$this->_redirect('/user/group/index/page/'.$this->page.'/modifyresult/forbidden');
if (!isset($_POST["save"])){
$group = $this->groupMapper->find($groupID);
$_POST['title'] = $group->getTitle();
$_POST['description'] = $group->getDescription();
$editForm = new user_Form_GroupEdit(array('groupID' => $groupID));
} else {
$editForm = new user_Form_GroupEdit(array('groupID' => $groupID), $_POST);
if ($editForm->isValid($_POST)) {
$group = new Application_Model_Group($_POST);
$group->setID($groupID);
try {
$this->groupMapper->save($group);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
$this->_redirect('/user/group/index/page/'.$this->page.'/modifyresult/ok');
return;
}
}
$this->view->editForm = $editForm;
}
public function showAction()
{
// ACL create new group
if(!Pbs_Acl::checkRight('gsdo') && !Pbs_Acl::checkRight('gsdog'))
$this->_redirect('/user');
$groupID = $this->_request->getParam('groupID');
if($groupID == '' || !Pbs_Acl::checkRight('gsdog')) {
if(count($this->userIDsNamespace) > 0) {
$groupID = $this->userIDsNamespace['groupID'];
}
}
if($groupID == $this->membership->getGroupID() && !Pbs_Acl::checkRight('gsdo'))
$this->_redirect('/user');
$this->view->usergroup = $this->membership->getGroupID();
$this->view->requestgroup = $groupID;
$groupRequests = $this->groupRequestMapper->findBy(array('groupID' => $groupID),true);
if(isset($groupRequests)) {
$groupRequestList = array();
foreach($groupRequests as $groupRequest) {
$person = $this->personmapper->find($groupRequest['personID']);
$groupRequestList[] = array(
'grouprequestID' => $groupRequest['grouprequestID'],
'person' => $person
);
}
if(count($groupRequestList) > 0) {
$this->view->groupRequestList = $groupRequestList;
}
// Search all inherit Roles
$roles = array();
$groupGroupsMapper = new Application_Model_GroupGroupsMapper();
$parents = $groupGroupsMapper->getParentGroups($groupID);
$groupMapper = new Application_Model_GroupMapper();
$crawled = array();
foreach($parents as $p){
foreach($p as $a){
if(!in_array($a,$crawled)){
$crawled[] = $a;
$group = $groupMapper->find($a);
if($groupID != $a)
$r = $this->rolemapper->findBy(array('groupID' => $a,'inheritance'=>"1"));
else
$r = $this->rolemapper->findBy(array('groupID' => $a));
foreach($r as $d){
$roles[$group->getTitle()][] = $d;
}
}
}
}
$this->view->roleList = $roles;
}
if(Pbs_Acl::checkRight('gsmg') || Pbs_Acl::checkRight('gsmgo')){
$members = $this->membershipMapper->findBy(array('groupID' => $groupID),true);
if(isset($members)) {
foreach($members as $member) {
$person = $this->personmapper->find($member['personID']);
$membership_tmp = $this->membershipMapper->find($member['membershipID']);
$role = $this->rolemapper->find($membership_tmp->getRoleID());
$membersList[] = array(
'membershipID' => $member['membershipID'],
'suspend' => $member['suspend'],
'person' => $person,
'role' => $role
);
}
if(is_array($membersList)) {
// Member Pagination
$memberPagination = new Pbs_Pagination();
$memberPagination->setPerPage(10);
$memberPagination->setElement($membersList);
$memberPagination->setRequestPage($this->_request->getParam('page'));
if($this->_request->getParam('groupID')) {
$memberPagination->setPageUrl('/user/group/show/groupID/' . $groupID . ((isset($this->view->search))?'/search/'.$this->view->search:''));
} else {
$memberPagination->setPageUrl('/user/group/show'.((isset($this->view->search))?'/search/'.$this->view->search:''));
}
$this->view->membersList = $memberPagination->getElements();
$this->view->memberPagination = $memberPagination->pagination();
$this->view->page = $memberPagination->getRequestPage();
}
}
}
$groupgroups = $this->groupGroupsMapper->findBy(array('groupID' => $groupID),true);
if(is_object($groupgroups)) {
$parentGroup = $this->groupMapper->find($groupgroups->getParentID());
$this->view->$parentGroup = $parentGroup;
}
$group = $this->groupMapper->find($groupID);
$this->view->userIDsNamespace = $this->userIDsNamespace;
$this->view->group = $group;
$this->view->groupID = $groupID;
}
public function linkAction()
{
if(!Pbs_Acl::checkRight('glk'))
$this->_redirect('/user');
$linkableGroups = $this->groupList;
$groupGroupsMapper = new Application_Model_GroupGroupsMapper();
$childs = array();
$parents = array();
$childs = $groupGroupsMapper->getChildGroups($this->membership->getGroupID());
$parents = $groupGroupsMapper->getParentGroups($this->membership->getGroupID());
#print_a($childs,$parents);
foreach($linkableGroups as $i => $group){
#print_a($group->getID());
if(isset($childs[1]) && in_array($group->getID(),$childs[1])){
unset($linkableGroups[$i]);
}
if(count($parents) > 0){
foreach($parents as $d){
if(in_array($group->getID(),$d)){
unset($linkableGroups[$i]);
}
}
}
}
#print_a($linkableGroups);
if (!isset($_POST["link"])){
$linkForm = new user_Form_GroupLink(array('grouplist' => $linkableGroups));
} else {
$linkForm = new user_Form_GroupLink(array('grouplist' => $linkableGroups),$_POST);
if ($linkForm->isValid($_POST)) {
$groupgroups = new Application_Model_GroupGroups();
if($_POST['superordinatedGroupID'] == $_POST['groupID'] || $_POST['groupID'] == 1) {
$this->_redirect('/user/group/index/page/'.$this->page.'/addresult/forbidden');
}
$groupgroups->setParentID($this->membership->getGroupID());
$groupgroups->setGroupID($_POST['groupID']);
try {
$this->groupGroupsMapper->save($groupgroups);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
$this->_helper->redirector('', 'group');
return;
}
}
$this->view->linkForm = $linkForm;
}
public function deleteAction()
{
// ACL delete a group
if(!Pbs_Acl::checkRight('gd'))
$this->_redirect('/user');
$this->_helper->viewRenderer->setNoRender();
$groupID = $this->_request->getParam('groupID');
if(!isset($groupID)) {
if(count($this->userIDsNamespace) > 0) {
$groupID = $this->userIDsNamespace['groupID'];
}
}
if (isset($groupID)){
$group = $this->groupMapper->find($groupID);
try {
$this->groupMapper->delete($group);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
if($_SERVER['HTTP_REFERER']) {
if(strpos($_SERVER['HTTP_REFERER'], '/user/group/show') !== false && strpos($_SERVER['HTTP_REFERER'], '/groupID/') === false) {
$this->_helper->redirector('changemembership', 'person');
} else {
$this->_redirect('/user/group/index/page/'.$this->page.'/deleteresult/ok');
}
} else {
$this->_helper->redirector('', 'group');
}
return;
} else {
$this->_redirect('/user/');
return;
}
}
public function grantpersonAction()
{
// ACL grant a membership to request
if(!Pbs_Acl::checkRight('gam'))
$this->_redirect('/user');
$this->_helper->viewRenderer->setNoRender();
if(isset($_POST['grouprequestID']) && isset($_POST['roleID'])) {
$groupRequest = $this->groupRequestMapper->find($_POST['grouprequestID']);
try {
$this->groupRequestMapper->delete($groupRequest);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
$membership = new Application_Model_Membership();
$membership->setGroupID($groupRequest->getGroupID());
$membership->setPersonID($groupRequest->getPersonID());
$membership->setRoleID($_POST['roleID']);
$membership->setSuspend(0);
$apikey = randomString(32);
$membership->setApikey($apikey);
try {
$id = $this->membershipMapper->save($membership);
$membership->setID($id);
$newMember = new Pbs_NewMember();
$newMember->createDefaults($membership);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
$this->_redirect("/user/group/show/groupID/" . $groupRequest->getGroupID());
}
}
public function revokepersonAction()
{
$this->_helper->viewRenderer->setNoRender();
$membershipID = $this->_request->getParam('membershipID');
$rr = $this->membershipMapper->find($membershipID);
if(($rr->getGroupID() == $this->membership->getGroupID() && Pbs_Acl::checkRight('gdmo') ) || ( $rr->getGroupID() != $this->membership->getGroupID() && Pbs_Acl::checkRight('gdmog'))){
if(isset($membershipID)) {
$membership = $this->membershipMapper->find($membershipID);
if(isset($membership)) {
try {
$this->membershipMapper->delete($membership);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
$this->_redirect("/user/group/show/groupID/" . $membership->getGroupID());
}
}
}
}
public function declineAction()
{
if(!Pbs_Acl::checkRight('gdm')) {
$this->_redirect('/user');
}
$this->_helper->viewRenderer->setNoRender();
$grouprequestID = $this->_request->getParam('grouprequestID');
if(isset($grouprequestID)) {
$groupRequest = $this->groupRequestMapper->find($grouprequestID);
if($groupRequest->getGroupID() != $this->userIDsNamespace['groupID']) {
$pbsNotifier = new Pbs_Notifier();
$this->view->notification = $pbsNotifier->notify('Not allowed to decline this grouprequest', 'forbidden');
return;
}
try {
$this->groupRequestMapper->delete($groupRequest);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
$this->_redirect("/user/group/show/groupID");
}
}
public function suspendmembershipAction()
{
if(!Pbs_Acl::checkRight('gsm')) {
$this->_redirect('/user');
}
$this->_helper->viewRenderer->setNoRender();
$membershipID = $this->_request->getParam('membershipID');
if(isset($membershipID)) {
$membership = $this->membershipMapper->find($membershipID);
$membership->setSuspend(1);
if(isset($membership)) {
if($membership->getGroupID() != $this->userIDsNamespace['groupID']) {
$pbsNotifier = new Pbs_Notifier();
$this->view->notification = $pbsNotifier->notify('Not allowed to suspend this membership', 'forbidden');
return;
}
try {
$this->membershipMapper->save($membership);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
$this->_redirect("/user/group/show/");
}
}
}
public function resumemembershipAction()
{
if(!Pbs_Acl::checkRight('gsm')) {
$this->_redirect('/user');
}
$this->_helper->viewRenderer->setNoRender();
$membershipID = $this->_request->getParam('membershipID');
if(isset($membershipID)) {
$membership = $this->membershipMapper->find($membershipID);
$membership->setSuspend(0);
if(isset($membership)) {
if($membership->getGroupID() != $this->userIDsNamespace['groupID']) {
$pbsNotifier = new Pbs_Notifier();
$this->view->notification = $pbsNotifier->notify('Not allowed to resume this membership', 'forbidden');
return;
}
try {
$this->membershipMapper->save($membership);
} catch(Zend_Exception $e)
{
echo "Caught exception: " . get_class($e) . "
";
echo "Message: " . $e->getMessage() . "
";
return;
}
$this->_redirect("/user/group/show/");
}
}
}
}