/** * 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(); }
/** * Calls the handler to process the values collected by the ui before. * * @throws class_exception * @return string * @permissions view */ protected function actionSaveUi() { $strReturn = ""; $objWorkflow = new class_module_workflows_workflow($this->getSystemid()); $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))) { $objHandler = $objWorkflow->getObjWorkflowHandler(); $objHandler->processUserInput($this->getAllParams()); if ($objWorkflow->getBitSaved() == true) { throw new class_exception("Illegal state detected! Workflow was already saved before!", class_exception::$level_FATALERROR); } $objWorkflow->updateObjectToDb(); $this->adminReload(class_link::getLinkAdminHref($this->getArrModule("modul"), "myList")); } else { $strReturn .= $this->getLang("commons_error_permissions"); } return $strReturn; }