⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workflowutil.inc.php.svn-base

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
        $aOptions = array('noid' => true);        foreach ($aActions as $sAction) {            $res = DBUtil::autoInsert($sTable, array(                'state_id' => $iStateId,                'action_name' => $sAction,            ), $aOptions);            if (PEAR::isError($res)) {                return $res;            }        }        return;    }    // }}}    function setDisabledActionsForState($oState, $aActions) {        $iStateId = KTUtil::getId($oState);        $sTable = KTUtil::getTableName('workflow_state_disabled_actions');        $aQuery = array(            "DELETE FROM $sTable WHERE state_id = ?",            array($iStateId),        );        $res = DBUtil::runQuery($aQuery);        if (PEAR::isError($res)) {            return $res;        }        if(!is_array($aActions)) return;        $aOptions = array('noid' => true);        foreach ($aActions as $sAction) {            $res = DBUtil::autoInsert($sTable, array(                'state_id' => $iStateId,                'action_name' => $sAction,            ), $aOptions);            if (PEAR::isError($res)) {                return $res;            }        }        return;    }    // {{{ getEnabledActionsForState    /**     * Gets the actions that are enabled by this workflow state.     *     * A controlled action is one that can be enabled or disabled by a     * workflow state attached to this workflow.  This allows for     * actions such as "Delete" to not be allowed to occur during the     * workflow, or for special actions such as "Publish" to only occur     * when a particular workflow state is reached.     *     * Only the enabled actions are tracked.  Any actions controlled by     * the workflow but not explicitly enabled are disabled.     */    function getEnabledActionsForState($oState) {        $iStateId = KTUtil::getId($oState);        $sTable = KTUtil::getTableName('workflow_state_actions');        $aQuery = array(            "SELECT action_name FROM $sTable WHERE state_id = ?",            array($iStateId),        );        return DBUtil::getResultArrayKey($aQuery, 'action_name');    }    // }}}    function getDisabledActionsForState($oState) {        $iStateId = KTUtil::getId($oState);        $sTable = KTUtil::getTableName('workflow_state_disabled_actions');        $aQuery = array(            "SELECT action_name FROM $sTable WHERE state_id = ?",            array($iStateId),        );        return DBUtil::getResultArrayKey($aQuery, 'action_name');    }    // {{{ actionEnabledForDocument    /**     * Checks if a particular action is enabled to occur on a document     * by virtue of its workflow and workflow state.     *     * A controlled action is one that can be enabled or disabled by a     * workflow state attached to this workflow.  This allows for     * actions such as "Delete" to not be allowed to occur during the     * workflow, or for special actions such as "Publish" to only occur     * when a particular workflow state is reached.     *     * Only the enabled actions are tracked.  Any actions controlled by     * the workflow but not explicitly enabled are disabled.     */    function actionEnabledForDocument($oDocument, $sName) {        $oWorkflow =& KTWorkflow::getByDocument($oDocument);        if (is_null($oWorkflow)) {            return true;        }        // FIXME: The workflow_actions table that the method below uses is always empty!        //        It seems the new method was never followed though to completion.        //if (!in_array($sName, KTWorkflowUtil::getControlledActionsForWorkflow($oWorkflow))) {        //    return true;        //}        $oState =& KTWorkflowState::getByDocument($oDocument);        if (in_array($sName, KTWorkflowUtil::getDisabledActionsForState($oState))) {            return false;        }        return true;    }    // }}}    // {{{ getWorkflowForDocument    /**     * Gets the workflow that applies to the given document, returning     * null if there is no workflow assigned.     */    function getWorkflowForDocument ($oDocument, $aOptions = null) {        $ids = KTUtil::arrayGet($aOptions, 'ids', false);        if (is_a($oDocument, 'KTDocumentCore')) {            $oDocument = $oDocument->getId();        }        $oDocument = KTUtil::getObject('Document', $oDocument);        $iWorkflowId = $oDocument->getWorkflowId();        if (PEAR::isError($iWorkflowId)) {            return $iWorkflowId;        }        if (is_null($iWorkflowId)) {            return $iWorkflowId;        }        if ($ids) {            return $iWorkflowId;        }        return KTWorkflow::get($iWorkflowId);    }    // }}}    // {{{ getWorkflowStateForDocument    /**     * Gets the workflow state that applies to the given document,     * returning null if there is no workflow assigned.     */    function getWorkflowStateForDocument ($oDocument, $aOptions = null) {        $ids = KTUtil::arrayGet($aOptions, 'ids', false);        if (is_a($oDocument, 'KTDocumentCore')) {            $oDocument = $oDocument->getId();        }        $oDocument = KTUtil::getObject('Document', $oDocument);        $iWorkflowStateId = $oDocument->getWorkflowStateId();        if (PEAR::isError($iWorkflowStateId)) {            return $iWorkflowStateId;        }        if (is_null($iWorkflowStateId)) {            return $iWorkflowStateId;        }        if ($ids) {            return $iWorkflowStateId;        }        return KTWorkflowState::get($iWorkflowStateId);    }    // }}}    // {{{ getTransitionsForDocumentUser    /**     * 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;    }    // }}}    // {{{ performTransitionOnDocument    /**     * Performs a workflow transition on a document, changing it from     * one workflow state to another, with potential side effects (user     * scripts, and so forth).     *     * This function currently assumes that the user in question is     * allowed to perform the transition and that all the guard     * functionality on the transition has passed.     */    function performTransitionOnDocument($oTransition, $oDocument, $oUser, $sComments) {        $oWorkflow =& KTWorkflow::getByDocument($oDocument);        if (empty($oWorkflow)) {            return PEAR::raiseError(_kt("Document has no workflow"));        }        if (PEAR::isError($oWorkflow)) {            return $oWorkflow;        }        $oSourceState =& KTWorkflowUtil::getWorkflowStateForDocument($oDocument);        // walk the action triggers.        $aActionTriggers = KTWorkflowUtil::getActionTriggersForTransition($oTransition);        if (PEAR::isError($aActionTriggers)) {            return $aActionTriggers; // error out?        }        foreach ($aActionTriggers as $oTrigger) {            $res = $oTrigger->precheckTransition($oDocument, $oUser);            if (PEAR::isError($res)) {                return $res;            }        }        $iPreviousMetadataVersion = $oDocument->getMetadataVersionId();        $oDocument->startNewMetadataVersion($oUser);        KTDocumentUtil::copyMetadata($oDocument, $iPreviousMetadataVersion);        $iStateId = $oTransition->getTargetStateId();        $oDocument->setWorkflowStateId($iStateId);        $res = $oDocument->update();        if (PEAR::isError($res)) {            return $res;        }        $oTargetState =& KTWorkflowState::get($iStateId);        $sSourceState = $oSourceState->getName();        $sTargetState = $oTargetState->getName();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -