/** * 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; }
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(); }