예제 #1
0
 function json_getSubGroups()
 {
     $sFilter = KTUtil::arrayGet($_REQUEST, 'filter', false);
     $aAllowedGroups = array('off' => _kt('-- Please filter --'));
     if ($sFilter && trim($sFilter)) {
         $iGroupID = KTUtil::arrayGet($_REQUEST, 'group_id', false);
         if (!$iGroupID) {
             return array('error' => true, 'type' => 'kt.invalid_entity', 'message' => _kt('An invalid group was selected'));
         }
         $oGroup = Group::get($iGroupID);
         $aMemberGroupsUnkeyed = $oGroup->getMemberGroups();
         $aMemberGroups = array();
         $aMemberIDs = array();
         foreach ($aMemberGroupsUnkeyed as $oMemberGroup) {
             $aMemberIDs[] = $oMemberGroup->getID();
             $aMemberGroups[$oMemberGroup->getID()] = $oMemberGroup;
         }
         $aGroupArray = GroupUtil::buildGroupArray();
         $aAllowedGroupIDs = GroupUtil::filterCyclicalGroups($oGroup->getID(), $aGroupArray);
         $aAllowedGroupIDs = array_diff($aAllowedGroupIDs, $aMemberIDs);
         $aAllowedGroups = array();
         foreach ($aAllowedGroupIDs as $iAllowedGroupID) {
             $g = Group::get($iAllowedGroupID);
             if (!PEAR::isError($g) && $g != false) {
                 $aAllowedGroups[$iAllowedGroupID] = $g->getName();
             }
         }
     }
     return $aAllowedGroups;
 }
예제 #2
0
 function informUsersForState($oState, $aInformed, $oDocument, $oUser, $sComments)
 {
     // say no to duplicates.
     KTWorkflowNotification::clearNotificationsForDocument($oDocument);
     $aUsers = array();
     $aGroups = array();
     $aRoles = array();
     foreach (KTUtil::arrayGet($aInformed, 'user', array()) as $iUserId) {
         $oU = User::get($iUserId);
         if (PEAR::isError($oU) || $oU == false) {
             continue;
         } else {
             $aUsers[$oU->getId()] = $oU;
         }
     }
     foreach (KTUtil::arrayGet($aInformed, 'group', array()) as $iGroupId) {
         $oG = Group::get($iGroupId);
         if (PEAR::isError($oG) || $oG == false) {
             continue;
         } else {
             $aGroups[$oG->getId()] = $oG;
         }
     }
     foreach (KTUtil::arrayGet($aInformed, 'role', array()) as $iRoleId) {
         $oR = Role::get($iRoleId);
         if (PEAR::isError($oR) || $oR == false) {
             continue;
         } else {
             $aRoles[] = $oR;
         }
     }
     // FIXME extract this into a util - I see us using this again and again.
     // start with roles ... roles _only_ ever contain groups.
     foreach ($aRoles as $oRole) {
         // do NOT alert anonymous or Everyone roles - that would be very scary.
         $iRoleId = KTUtil::getId($oRole);
         if ($iRoleId == -3 || $iRoleId == -4) {
             continue;
         }
         // first try on the document, then the folder above it.
         $oRoleAllocation = DocumentRoleAllocation::getAllocationsForDocumentAndRole($oDocument->getId(), $iRoleId);
         if (is_null($oRoleAllocation)) {
             // if we don't get a document role, try folder role.
             $oRoleAllocation = RoleAllocation::getAllocationsForFolderAndRole($oDocument->getFolderID(), $oRole->getId());
         }
         if (is_null($oRoleAllocation) || PEAR::isError($oRoleAllocation)) {
             continue;
         }
         $aRoleUsers = $oRoleAllocation->getUsers();
         $aRoleGroups = $oRoleAllocation->getGroups();
         foreach ($aRoleUsers as $id => $oU) {
             $aUsers[$id] = $oU;
         }
         foreach ($aRoleGroups as $id => $oGroup) {
             $aGroups[$id] = $oGroup;
         }
     }
     // we now have a (potentially overlapping) set of groups, which may
     // have subgroups.
     //
     // what we need to do _now_ is build a canonical set of groups, and then
     // generate the singular user-base.
     $aGroupMembershipSet = GroupUtil::buildGroupArray();
     $aAllIds = array_keys($aGroups);
     foreach ($aGroups as $id => $oGroup) {
         $aAllIds = kt_array_merge($aGroupMembershipSet[$id], $aAllIds);
     }
     foreach ($aAllIds as $id) {
         if (!array_key_exists($id, $aGroups)) {
             $aGroups[$id] = Group::get($id);
         }
     }
     // now, merge this (again) into the user-set.
     foreach ($aGroups as $oGroup) {
         $aNewUsers = $oGroup->getMembers();
         foreach ($aNewUsers as $oU) {
             $id = $oU->getId();
             if (!array_key_exists($id, $aUsers)) {
                 $aUsers[$id] = $oU;
             }
         }
     }
     // and done.
     foreach ($aUsers as $oU) {
         if (!PEAR::isError($oU)) {
             KTWorkflowNotification::newNotificationForDocument($oDocument, $oU, $oState, $oUser, $sComments);
         }
     }
 }
예제 #3
0
 function do_assistance()
 {
     $sSubject = $this->oValidator->validateString($_REQUEST['subject']);
     $sDetails = $this->oValidator->validateString($_REQUEST['details']);
     $aUsers = array();
     $aGroups = array();
     $aRoles = array();
     foreach (Group::getAdministratorGroups() as $oGroup) {
         $aGroups[$oGroup->getId()] =& $oGroup;
     }
     foreach (Unit::getUnitsForFolder($this->oDocument->getFolderId()) as $oUnit) {
         foreach (Group::getUnitAdministratorGroupsByUnit($oUnit) as $oGroup) {
             $aGroups[$oGroup->getId()] =& $oGroup;
         }
     }
     $aRoles[-2] = Role::get(-2);
     $oDocument =& $this->oDocument;
     foreach ($aRoles as $oRole) {
         // Ignore anonymous or Everyone roles
         $iRoleId = KTUtil::getId($oRole);
         if ($iRoleId == -3 || $iRoleId == -4) {
             continue;
         }
         // first try on the document, then the folder above it.
         $oRoleAllocation = DocumentRoleAllocation::getAllocationsForDocumentAndRole($oDocument->getId(), $iRoleId);
         if (is_null($oRoleAllocation)) {
             // if we don't get a document role, try folder role.
             $oRoleAllocation = RoleAllocation::getAllocationsForFolderAndRole($oDocument->getFolderID(), $oRole->getId());
         }
         if (is_null($oRoleAllocation) || PEAR::isError($oRoleAllocation)) {
             continue;
         }
         $aRoleUsers = $oRoleAllocation->getUsers();
         $aRoleGroups = $oRoleAllocation->getGroups();
         foreach ($aRoleUsers as $id => $oU) {
             $aUsers[$id] = $oU;
         }
         foreach ($aRoleGroups as $id => $oGroup) {
             $aGroups[$id] = $oGroup;
         }
     }
     $aGroupMembershipSet = GroupUtil::buildGroupArray();
     $aAllIds = array_keys($aGroups);
     foreach ($aGroups as $id => $oGroup) {
         $aAllIds = kt_array_merge($aGroupMembershipSet[$id], $aAllIds);
     }
     foreach ($aAllIds as $id) {
         if (!array_key_exists($id, $aGroups)) {
             $aGroups[$id] = Group::get($id);
         }
     }
     // now, merge this (again) into the user-set.
     foreach ($aGroups as $oGroup) {
         $aNewUsers = $oGroup->getMembers();
         foreach ($aNewUsers as $oU) {
             $id = $oU->getId();
             if (!array_key_exists($id, $aUsers)) {
                 $aUsers[$id] = $oU;
             }
         }
     }
     foreach ($aUsers as $oU) {
         if (!PEAR::isError($oU)) {
             KTAssistNotification::newNotificationForDocument($this->oDocument, $oU, $this->oUser, $sSubject, $sDetails);
         }
     }
     $this->commitTransaction();
     $params = 'fDocumentId=' . $oDocument->getId();
     $url = generateControllerLink('viewDocument', $params);
     exit(redirect($url));
 }
예제 #4
0
 function getMembershipReason($oUser, $oGroup)
 {
     $aGroupArray = GroupUtil::buildGroupArray();
     // short circuit
     if ($oGroup->hasMember($oUser)) {
         return sprintf(_kt('%s is a direct member.'), $oUser->getName());
     }
     $aSubgroups = (array) $aGroupArray[$oGroup->getId()];
     if (empty($aSubgroups)) {
         return null;
         // not a member, no subgroups.
     }
     $sTable = KTUtil::getTableName('users_groups');
     $sQuery = 'SELECT group_id FROM ' . $sTable . ' WHERE user_id = ? AND group_id IN (' . DBUtil::paramArray($aSubgroups) . ')';
     $aParams = array($oUser->getId());
     $aParams = kt_array_merge($aParams, $aSubgroups);
     $res = DBUtil::getOneResult(array($sQuery, $aParams));
     if (PEAR::isError($res)) {
         return $res;
     } else {
         if (is_null($res)) {
             return null;
             // not a member
         }
     }
     // else {
     $oSubgroup = Group::get($res['group_id']);
     if (PEAR::isError($oSubgroup)) {
         return $oSubgroup;
     }
     return sprintf(_kt('%s is a member of %s'), $oUser->getName(), $oSubgroup->getName());
     // could be error, but errors are caught.
     // }
 }
예제 #5
0
<?php

require_once "../../../config/dmsDefaults.php";
require_once KT_LIB_DIR . '/groups/GroupUtil.php';
var_dump(GroupUtil::buildGroupArray());