Exemplo n.º 1
0
 /**
  * Gets the transitions that are available for a document by virtue
  * of its workflow state, and also by virtue of the user that wishes
  * to perform the transition.
  *
  * In other words, ensures that the guard permission, role, group,
  * and/or user are met for the given user.
  */
 function getTransitionsForDocumentUser($oDocument, $oUser)
 {
     $oState = KTWorkflowUtil::getWorkflowStateForDocument($oDocument);
     if (is_null($oState) || PEAR::isError($oState)) {
         return $oState;
     }
     $aTransitions = KTWorkflowUtil::getTransitionsFrom($oState);
     $aEnabledTransitions = array();
     foreach ($aTransitions as $oTransition) {
         // keeping this around to make coding the replacements easier.
         /*
         $iPermissionId = $oTransition->getGuardPermissionId();
         if ($iPermissionId) {
             $oPermission =& KTPermission::get($iPermissionId);
             if (!KTPermissionUtil::userHasPermissionOnItem($oUser, $oPermission, $oDocument)) {
                 continue;
             }
         }
         $iGroupId = $oTransition->getGuardGroupId();
         if ($iGroupId) {
             $oGroup =& Group::get($iGroupId);
             $res = GroupUtil::getMembershipReason($oUser, $oGroup);
             if (!is_string($res)) {
                 continue;
             }
         }
         $iRoleId = $oTransition->getGuardRoleId();
         if ($iRoleId) {
             $oRoleAllocation = RoleAllocation::getAllocationsForFolderAndRole($oDocument->getFolderID(), $iRoleId);
         
             if ($oRoleAllocation == null) {   // no role allocation, no fulfillment.
                 continue;
             }
         
             if (!$oRoleAllocation->hasMember($oUser)) {
                 continue;
             }
         }
         
         $iConditionId = $oTransition->getGuardConditionId();
         if ($iConditionId) {
             if (!KTSearchUtil::testConditionOnDocument($iConditionId, $oDocument)) {
                 continue;
             }
         }
         */
         $aGuardTriggers = KTWorkflowUtil::getGuardTriggersForTransition($oTransition);
         if (PEAR::isError($aGuardTriggers)) {
             return $aGuardTriggers;
             // error out?
         }
         $bBreak = false;
         foreach ($aGuardTriggers as $oTrigger) {
             if (!$oTrigger->allowTransition($oDocument, $oUser)) {
                 $bBreak = true;
                 break;
             }
         }
         if ($bBreak) {
             continue;
         }
         $aEnabledTransitions[] = $oTransition;
     }
     return $aEnabledTransitions;
 }
Exemplo n.º 2
0
 function do_manageguards()
 {
     $oTemplate = $this->oValidator->validateTemplate('ktcore/workflow/admin/restrictions_edit');
     $this->oPage->setBreadcrumbDetails(_kt("Manage Restrictions"));
     $this->breadcrumbs_security();
     $this->aBreadcrumbs[] = array('name' => _kt("Transition Restrictions"), 'url' => KTUtil::addQueryStringSelf($this->meldPersistQuery("", "transitionsecurityoverview", true)));
     $this->aBreadcrumbs[] = array('name' => $this->oTransition->getHumanName());
     $restrictions = KTWorkflowUtil::getGuardTriggersForTransition($this->oTransition);
     $add_form = $this->form_addtransitionguard();
     $oTemplate->setData(array('context' => $this, 'add_form' => $add_form, 'aGuardTriggers' => $restrictions));
     return $oTemplate->render();
 }