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 + -
显示快捷键?