/** * 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 &getBySourceState($oState) { return KTWorkflowUtil::getTransitionsFrom($oState); }