newworkflow.inc.php.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 410 行 · 第 1/2 页
SVN-BASE
410 行
} if (!empty($failed)) { $extra_errors['transitions'] = sprintf(_kt("You cannot have duplicate transition names: %s"), implode(', ', $failed)); } $data['transitions'] = $transitions; // handle errors. if (!empty($res['errors']) || !empty($extra_errors)) { $oForm->handleError(null, $extra_errors); } // store the data for a while. $wiz_data = (array) $_SESSION['_wiz_data']; $wiz_data[$fWizardKey] = $data; $_SESSION['_wiz_data'] =& $wiz_data; if (empty($data['transitions'])) { return $this->finalise(); // finish and go. } $this->successRedirectTo("step2",_kt("Initial data stored.")); } function do_step2() { $fWizardKey = KTUtil::arrayGet($_REQUEST, 'fWizardKey'); if (!empty($fWizardKey)) { $this->errorRedirectToMain(_kt("Could not create workflow.") ); exit; } $wiz_data = (array) $_SESSION['_wiz_data'][$fWizardKey]; if (empty($wiz_data)) { $this->errorRedirectToMain(_kt("Unable to find previous value. Please try again.")); } $oTemplate = $this->oValidator->validateTemplate('ktcore/workflow/admin/new_wizard_step2'); $transitions = (array) $wiz_data['transitions']; $args = $this->meldPersistQuery("", "process_step2", true); $oTemplate->setData(array( 'context' => $this, 'fWizardKey'=>$fWizardKey, 'args' => $args, 'transitions' => $wiz_data['transitions'], 'states' => $wiz_data['states'], )); return $oTemplate->render(); } function do_process_step2() { $fWizardKey = KTUtil::arrayGet($_REQUEST, 'fWizardKey'); if (!empty($fWizardKey)) { $this->errorRedirectToMain(_kt("Could not create workflow.") ); exit; } $wiz_data = $_SESSION['_wiz_data'][$fWizardKey]; if (empty($wiz_data)) { $this->errorRedirectToMain(_kt("Unable to locate stored data. Please try again.")); } // we can't use the form "stuff" here since we don't have a grid widget yet // and hopefully never will. $fToData = (array) KTUtil::arrayGet($_REQUEST, 'fTo'); $fFromData = (array) KTUtil::arrayGet($_REQUEST, 'fFrom'); // these are data[transition][state] = true $fTo = array(); $initial_state = $wiz_data['initial_state']; foreach ($wiz_data['transitions'] as $transition) { $candidate = $fToData[$transition]; if (empty($wiz_data['states'][$candidate])) { $candidate = $initial_state; } $fTo[$transition] = $candidate; } $fFrom = array(); foreach ($wiz_data['transitions'] as $transition) { $d = (array) KTUtil::arrayGet($fFromData, $transition); $final = array(); foreach ($d as $state => $discard) { if (!empty($wiz_data['states'][$state])) { $final[] = $state; } } $fFrom[$transition] = $final; } $wiz_data['from'] = $fFrom; $wiz_data['to'] = $fTo; $_SESSION['_wiz_data'][$fWizardKey] = $wiz_data; return $this->finalise(); } function finalise() { $fWizardKey = KTUtil::arrayGet($_REQUEST, 'fWizardKey'); if (!empty($fWizardKey)) { $this->errorRedirectToMain(_kt("Could not create workflow.") ); exit; } $wiz_data = $_SESSION['_wiz_data'][$fWizardKey]; // gather all our data. we're sure this is all good and healthy. $states = $wiz_data['states']; $transitions = $wiz_data['transitions']; $from = $wiz_data['from']; $to = $wiz_data['to']; $initial_state = $wiz_data['initial_state']; $workflow_name = $wiz_data['workflow_name']; $this->startTransaction(); // create the initial workflow $oWorkflow = KTWorkflow::createFromArray(array( 'name' => $workflow_name, 'humanname' => $workflow_name, 'enabled' => true, )); if (PEAR::isError($oWorkflow)) { $this->errorRedirectToMain(sprintf(_kt("Failed to create workflow: %s"), $oWorkflow->getMessage())); } $iWorkflowId = $oWorkflow->getId(); // create the states. $aStates = array(); foreach ($states as $state_name) { $oState = KTWorkflowState::createFromArray(array( 'workflowid' => $iWorkflowId, 'name' => $state_name, 'humanname' => $state_name, )); if (PEAR::isError($oState)) { $this->errorRedirectToMain(sprintf(_kt("Failed to create state: %s"), $oState->getMessage())); } $aStates[$state_name] = $oState; } // update the initial state on workflow $oInitialState = $aStates[$initial_state]; $oWorkflow->setStartStateId($oInitialState->getId()); $res = $oWorkflow->update(); if (PEAR::isError($res)) { $this->errorRedirectToMain(sprintf(_kt("Failed to update workflow: %s"), $res->getMessage())); } // next, we create and hook up the transitions. $aTransitions = array(); foreach ($transitions as $transition) { $dest_name = $to[$transition]; $oDestState = $aStates[$dest_name]; $oTransition = KTWorkflowTransition::createFromArray(array( "WorkflowId" => $iWorkflowId, "Name" => $transition, "HumanName" => $transition, "TargetStateId" => $oDestState->getId(), // FIXME we need to deprecate these, eventually "GuardPermissionId" => null, "GuardGroupId" => null, "GuardRoleId" => null, "GuardConditionId" => null, )); if (PEAR::isError($oTransition)) { $this->errorRedirectToMain(sprintf(_kt("Failed to create transition: %s"), $oTransition->getMessage())); } // hook up source states. $state_ids = array(); $sources = (array) $from[$transition]; foreach ($sources as $state_name) { // must exist. $oState = $aStates[$state_name]; $state_ids[] = $oState->getId(); } $res = KTWorkflowAdminUtil::saveTransitionSources($oTransition, $state_ids); if (PEAR::isError($res)) { $this->errorRedirectToMain(sprintf(_kt("Failed to set transition origins: %s"), $res->getMessage())); } } $this->commitTransaction(); // finally, we want to redirect the user to the parent dispatcher somehow. // FIXME nbm: how do you recommend we do this? $base = $_SERVER['PHP_SELF']; $qs = sprintf("action=view&fWorkflowId=%d",$oWorkflow->getId()); $url = KTUtil::addQueryString($base, $qs); $this->addInfoMessage(_kt("Your new workflow has been created. You may want to configure security and notifications from the menu on the left.")); redirect($url); }}?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?