/** * Runs a single workflow. * @param class_module_workflows_workflow $objOneWorkflow */ public function runSingleWorkflow($objOneWorkflow) { $objHandler = $objOneWorkflow->getObjWorkflowHandler(); if ($objOneWorkflow->getIntState() != class_module_workflows_workflow::$INT_STATE_SCHEDULED) { return; } //trigger the workflow class_logger::getInstance(self::STR_LOGFILE)->addLogRow("executing workflow " . $objOneWorkflow->getSystemid(), class_logger::$levelInfo); if ($objHandler->execute()) { //handler executed successfully. shift to state 'executed' $objOneWorkflow->setIntState(class_module_workflows_workflow::$INT_STATE_EXECUTED); class_logger::getInstance(self::STR_LOGFILE)->addLogRow(" execution finished, new state: executed", class_logger::$levelInfo); } else { //handler failed to execute. reschedule. $objHandler->schedule(); $objOneWorkflow->setIntState(class_module_workflows_workflow::$INT_STATE_SCHEDULED); class_logger::getInstance(self::STR_LOGFILE)->addLogRow(" execution finished, new state: scheduled", class_logger::$levelInfo); } $objOneWorkflow->setIntRuns($objOneWorkflow->getIntRuns() + 1); $objOneWorkflow->updateObjectToDb(); }
/** * Creates the form to perform the current workflow-step * * @return string * @permissions view */ protected function actionShowUi() { $strReturn = ""; $objWorkflow = new class_module_workflows_workflow($this->getSystemid()); if ($objWorkflow->getIntState() != class_module_workflows_workflow::$INT_STATE_SCHEDULED || !$objWorkflow->getObjWorkflowHandler()->providesUserInterface()) { return $this->getLang("commons_error_permissions"); } $arrIdsToCheck = array_merge(array($this->objSession->getUserID()), $this->objSession->getGroupIdsAsArray()); $arrIdsOfTask = explode(",", $objWorkflow->getStrResponsible()); //ui given? current user responsible? //magic: the difference of the tasks' ids and the users' ids should be less than the count of the task-ids - then at least one id matches if ($objWorkflow->getObjWorkflowHandler()->providesUserInterface() && ($objWorkflow->getStrResponsible() == "" || count(array_diff($arrIdsOfTask, $arrIdsToCheck)) < count($arrIdsOfTask))) { $strCreator = ""; if (validateSystemid($objWorkflow->getStrOwner())) { $objUser = new class_module_user_user($objWorkflow->getStrOwner(), false); $strCreator .= $objUser->getStrUsername(); } $strInfo = $this->objToolkit->getTextRow($this->getLang("workflow_owner") . " " . $strCreator); $strResponsible = ""; foreach (explode(",", $objWorkflow->getStrResponsible()) as $strOneId) { if (validateSystemid($strOneId)) { if ($strResponsible != "") { $strResponsible .= ", "; } $objUser = new class_module_user_user($strOneId, false); if ($objUser->getStrUsername() != "") { $strResponsible .= $objUser->getStrUsername(); } else { $objGroup = new class_module_user_group($strOneId); $strResponsible .= $objGroup->getStrName(); } } } $arrHeader = array($this->getLang("workflow_general"), ""); $arrRow1 = array($this->getLang("workflow_owner"), $strCreator); $arrRow2 = array($this->getLang("workflow_responsible"), $strResponsible); $strReturn .= $this->objToolkit->dataTable($arrHeader, array($arrRow1, $arrRow2)); $strForm = $objWorkflow->getObjWorkflowHandler()->getUserInterface(); if ($strForm instanceof class_admin_formgenerator) { $strForm->addField(new class_formentry_hidden(null, null), "workflowid")->setStrValue($objWorkflow->getSystemid()); $strReturn .= $strForm->renderForm(class_link::getLinkAdminHref($this->getArrModule("modul"), "saveUI")); } else { $strReturn .= $this->objToolkit->formHeader(class_link::getLinkAdminHref($this->getArrModule("modul"), "saveUI")); $strReturn .= $strForm; $strReturn .= $this->objToolkit->formInputHidden("systemid", $objWorkflow->getSystemid()); $strReturn .= $this->objToolkit->formInputSubmit($this->getLang("commons_save")); $strReturn .= $this->objToolkit->formClose(); } } else { $strReturn .= $this->getLang("commons_error_permissions"); } return $strReturn; }