workflowsv2.php

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 1,647 行 · 第 1/5 页

PHP
1,647
字号
        // create those we don't have.

        foreach ($aStatePermAssigns as $perm_id => $assign) {
            if (!$active[$perm_id]) {
                $assign->delete();
            }
        }
        $emptydescriptor = KTPermissionUtil::getOrCreateDescriptor(array());
        if (PEAR::isError($emptydescriptor)) {
            $this->errorRedirectTo("managepermissions", sprintf(_kt("Failed to create assignment: %s"), $emptydescriptor->getMessage()));
        }
        foreach ($active as $perm_id => $discard) {
            if (!$aStatePermAssigns[$perm_id]) {
                $assign = KTWorkflowStatePermissionAssignment::createFromArray(array(
                    "iStateId" => $this->oState->getId(),
                    "iPermissionId" => $perm_id,
                    "iDescriptorId" => $emptydescriptor->getId(),
                ));
                if (PEAR::isError($assign)) {
                    $this->errorRedirectTo("managepermissions", sprintf(_kt("Failed to create assignment: %s"), $assign->getMessage()));
                }
            }
        }

        $this->successRedirectTo("managepermissions", _kt("Controlled permission updated."));
    }

    // == PERMISSIONS
    function do_allocatepermissions() {
        $oTemplate = $this->oValidator->validateTemplate('ktcore/workflow/admin/allocate_permissions');

        $oForm = $this->form_managepermissions();

        $this->breadcrumbs_security();
        $this->aBreadcrumbs[] = array(
            'name' => _kt("Document Permissions"),
            'url' => KTUtil::addQueryStringSelf($this->meldPersistQuery("fStateId=","permissionsoverview",true)),
        );
        $this->aBreadcrumbs[] = array(
            'name' => $this->oState->getHumanName(),
            'url' => KTUtil::addQueryStringSelf($this->meldPersistQuery("","managepermissions",true)),
        );
        $this->oPage->setBreadcrumbDetails(_kt("Allocate Permissions"));

        $aUsefulPermissions = KTPermission::getDocumentRelevantList();
        $aPermissionGrid = array();
        $aStatePermAssigns = KTWorkflowStatePermissionAssignment::getByState($this->oState);

        foreach ($aStatePermAssigns as $oPermAssign) {
            $aPermissionGrid[$oPermAssign->getPermissionId()] = $oPermAssign;
        }

        $aPermissionsToJSON = array();
        foreach($aUsefulPermissions as $oP) {
            $perm_id = $oP->getId();
            if ($aPermissionGrid[$perm_id]) {
                $aPermissionsToJSON[] = array('id'=>$oP->getId(), 'name'=>$oP->getHumanName());
            }
        }

        $oJSON = new Services_JSON;
        $sJSONPermissions = $oJSON->encode($aPermissionsToJSON);

        $oTemplate->setData(array(
            'context' => $this,
            'perm_grid' => $aPermissionGrid,
            'perms' => $aUsefulPermissions,
            'form' => $oForm,
            'jsonpermissions' => $sJSONPermissions,
            'args' => $this->meldPersistQuery("","setpermissionallocations",true),
        ));
        return $oTemplate->render();
    }

    // JSON helper. from permissions.

    function &_getPermissionsMap() {
        $aStatePermAssigns = KTWorkflowStatePermissionAssignment::getByState($this->oState);
        $aPermissionsMap = array('role'=>array(), 'group'=>array());

        foreach ($aStatePermAssigns as $oPermAssign) {
            $oDescriptor = KTPermissionDescriptor::get($oPermAssign->getDescriptorId());
            $iPermissionId = $oPermAssign->getPermissionId();

	    // groups
            $aGroupIds = $oDescriptor->getGroups();
            foreach ($aGroupIds as $iId) {
                $aPermissionsMap['group'][$iId][$iPermissionId] = true;
            }

	    // roles
            $aRoleIds = $oDescriptor->getRoles();
            foreach ($aRoleIds as $iId) {
                $aPermissionsMap['role'][$iId][$iPermissionId] = true;
            }
        }
    	return $aPermissionsMap;
    }

    function json_getEntities($optFilter = null) {
        $sFilter = KTUtil::arrayGet($_REQUEST, 'filter', false);
        if($sFilter == false && $optFilter != null) {
            $sFilter = $optFilter;
        }

        $bSelected = KTUtil::arrayGet($_REQUEST, 'selected', false);

        $aEntityList = array('off' => _kt('-- Please filter --'));

        // get permissions map
        $aPermissionsMap =& $this->_getPermissionsMap();

        if($bSelected || $sFilter && trim($sFilter)) {
            if(!$bSelected) {
                $aEntityList = array();
            }

            $aGroups = Group::getList(sprintf('name like "%%%s%%"', $sFilter));
            foreach($aGroups as $oGroup) {
                $aPerm = @array_keys($aPermissionsMap['group'][$oGroup->getId()]);
                if(!is_array($aPerm)) {
                    $aPerm = array();
                }

                if($bSelected) {
                    if(count($aPerm))
                        $aEntityList['g'.$oGroup->getId()] = array('type' => 'group',
                                   'display' => 'Group: ' . $oGroup->getName(),
                                   'name' => $oGroup->getName(),
                                   'permissions' => $aPerm,
                                   'id' => $oGroup->getId(),
                                   'selected' => true);
                } else {
                    $aEntityList['g'.$oGroup->getId()] = array('type' => 'group',
                               'display' => 'Group: ' . $oGroup->getName(),
                               'name' => $oGroup->getName(),
                               'permissions' => $aPerm,
                               'id' => $oGroup->getId());
                }
            }

            $aRoles = Role::getList(sprintf('name like "%%%s%%"', $sFilter));
            foreach($aRoles as $oRole) {
                $aPerm = @array_keys($aPermissionsMap['role'][$oRole->getId()]);
                if(!is_array($aPerm)) {
                    $aPerm = array();
                }

            if($bSelected) {
                if(count($aPerm))
                    $aEntityList['r'.$oRole->getId()] = array('type' => 'role',
                                      'display' => 'Role: ' . $oRole->getName(),
                                      'name' => $oRole->getName(),
                                      'permissions' => $aPerm,
                                      'id' => $oRole->getId(),
                                      'selected' => true);
            } else {
                $aEntityList['r'.$oRole->getId()] = array('type' => 'role',
                                      'display' => 'Role: ' . $oRole->getName(),
                                      'name' => $oRole->getName(),
                                      'permissions' => $aPerm,
                                      'id' => $oRole->getId());
            }
            }
        }
        return $aEntityList;
    }


    function do_setpermissionallocations() {
        $aPermissionAllowed = (array) KTUtil::arrayGet($_REQUEST, 'foo'); // thanks BD.

        $this->startTransaction();

        $aStatePermAssigns = KTWorkflowStatePermissionAssignment::getByState($this->oState);

        // we now walk the alloc'd perms, and go.
        foreach ($aStatePermAssigns as $oPermAssign) {
            $aAllowed = (array) $aPermissionAllowed[$oPermAssign->getPermissionId()]; // is already role, group, etc.
            $oDescriptor = KTPermissionUtil::getOrCreateDescriptor($aAllowed);
            if (PEAR::isError($oDescriptor)) { $this->errorRedirectTo('allocatepermissions', _kt('Failed to allocate as specified.')); }

            $oPermAssign->setDescriptorId($oDescriptor->getId());
            $res = $oPermAssign->update();
            if (PEAR::isError($res)) { $this->errorRedirectTo('allocatepermissions', _kt('Failed to allocate as specified.')); }
        }

        KTPermissionUtil::updatePermissionLookupForState($this->oState);

        $this->successRedirectTo('managepermissions', _kt('Permissions Allocated.'));
    }

    // ACTIONS

    function do_actionsoverview() {
        $oTemplate = $this->oValidator->validateTemplate('ktcore/workflow/admin/actions_overview');
        $this->oPage->setBreadcrumbDetails(_kt("Actions"));
        $this->breadcrumbs_security();
        $actions = KTUtil::keyArray(KTDocumentActionUtil::getAllDocumentActions(), 'getName');
        $blacklist = array('ktcore.actions.document.displaydetails');

        foreach ($blacklist as $name) {
            unset($actions[$name]);
        }

        $states = KTWorkflowState::getByWorkflow($this->oWorkflow);
        $action_grid = array();
        foreach ($states as $oState) {
            $state_actions = array();
            $disabled = KTWorkflowUtil::getDisabledActionsForState($oState);

            foreach ($disabled as $name) {
                $state_actions[$name] = $name;
            }

            $action_grid[$oState->getId()] = $state_actions;
        }

        $oTemplate->setData(array(
            'context' => $this,
            'states' => $states,
            'actions' => $actions,
            'grid' => $action_grid,
        ));
        return $oTemplate->render();
    }

    function do_editactions() {
        $oTemplate = $this->oValidator->validateTemplate('ktcore/workflow/admin/actions_edit');
        $this->oPage->setBreadcrumbDetails(_kt("Edit Actions"));
        $actions = KTUtil::keyArray(KTDocumentActionUtil::getAllDocumentActions(), 'getName');
        $blacklist = array('ktcore.actions.document.displaydetails');
        $this->breadcrumbs_security();
        foreach ($blacklist as $name) {
            unset($actions[$name]);
        }

        $states = KTWorkflowState::getByWorkflow($this->oWorkflow);
        $action_grid = array();
        foreach ($states as $oState) {
            $state_actions = array();
            $disabled = KTWorkflowUtil::getDisabledActionsForState($oState);

            foreach ($disabled as $name) {
                $state_actions[$name] = $name;
            }

            $action_grid[$oState->getId()] = $state_actions;
        }

        $oTemplate->setData(array(
            'context' => $this,
            'states' => $states,
            'actions' => $actions,
            'grid' => $action_grid,
            'args' => $this->meldPersistQuery("","saveactions", true),
        ));
        return $oTemplate->render();
    }

    function do_saveactions() {
        $disabled_actions = (array) $_REQUEST['fActions'];


        $states = KTWorkflowState::getByWorkflow($this->oWorkflow);
        $actions = KTUtil::keyArray(KTDocumentActionUtil::getAllDocumentActions(), 'getName');

        $this->startTransaction();

        foreach ($states as $oState) {
            $disable = array();
            $state_disabled = (array) $disabled_actions[$oState->getId()];
            if (!empty($state_disabled)) {
                foreach ($actions as $name => $oAction) {
                    if ($state_disabled[$name]) {
                        $disable[] = $name;
                    }
                }
            }

            $res = KTWorkflowUtil::setDisabledActionsForState($oState, $disable);
        }

        $this->successRedirectTo('actionsoverview', _kt('Disabled actions updated.'));
    }

    function do_transitionsecurityoverview() {
        $oTemplate = $this->oValidator->validateTemplate('ktcore/workflow/admin/transition_guards_overview');
        $this->oPage->setBreadcrumbDetails(_kt("Overview"));
        $this->oPage->setTitle(_kt("Transition Restrictions Overview"));
        $this->breadcrumbs_security();
        $this->aBreadcrumbs[] = array(
            'name' => _kt("Transition Restrictions"),
            'url' => KTUtil::addQueryStringSelf($this->meldPersistQuery("", "transitionsecurityoverview", true)),
        );

        $transitions = KTWorkflowTransition::getByWorkflow($this->oWorkflow);

        $oTemplate->setData(array(
            'context' => $this,
            'transitions' => $transitions,
        ));
        return $oTemplate->render();
    }

    // helper
    function describeTransitionGuards($oTransition) {
        $restrictions = KTWorkflowUtil::getGuardTriggersForTransition($oTransition);

        if (empty($restrictions)) {
            return _kt("No restrictions in place for this transition.");
        }

        $restriction_text = array();
        foreach ($restrictions as $oGuard) {
            $restriction_text[] = $oGuard->getConfigDescription();
        }

        return implode('. ', $restriction_text);
    }

    function form_addtransitionguard() {
        $oForm = new KTForm;
        $oForm->setOptions(array(
            'identifier' => 'ktcore.admin.workflow.addguard',
            'label' => _kt("Add New Transition Restriction"),
            'action' => 'addgu

⌨️ 快捷键说明

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