public function actionShowNext() { $key = EnvUtil::getRequest("key"); if ($key) { $param = WfCommonUtil::param($key, "DECODE"); $flowId = $param["flowid"]; $runId = $param["runid"]; $processId = $param["processid"]; $flowProcess = $param["flowprocess"]; $op = isset($param["op"]) ? $param["op"] : ""; $topflag = EnvUtil::getRequest("topflag"); $lang = Ibos::getLangSources(); $this->nextAccessCheck($topflag, $runId, $processId); $run = new ICFlowRun($runId); $process = new ICFlowProcess($flowId, $flowProcess); $notAllFinished = array(); $parent = ""; foreach (FlowRunProcess::model()->fetchAllByRunIDProcessID($runId, $processId) as $rp) { if ($rp["flowprocess"] == $flowProcess) { $parent .= $rp["parent"] . ","; if (($rp["flag"] == self::TRANS || $rp["flag"] == self::DONE) && $rp["uid"] == $this->uid) { $turnForbidden = true; } else { $turnForbidden = false; } if ($rp["flag"] != self::DONE && $rp["uid"] != $this->uid) { $notAllFinished[] = $rp["uid"]; } } } if ($turnForbidden) { EnvUtil::iExit(Ibos::lang("Already trans")); } if (!empty($notAllFinished)) { $notAllFinished = User::model()->fetchRealnamesbyUids($notAllFinished); } else { $notAllFinished = ""; } if ($process->gathernode == self::FORCE) { foreach (FlowProcess::model()->fetchAllGatherNode($flowId, $flowProcess) as $fp) { $isUntrans = FlowRunProcess::model()->getIsUntrans($runId, $fp["processid"]); if (!StringUtil::findIn($fp["processid"], $parent)) { if ($isUntrans) { EnvUtil::iExit(Ibos::lang("Gathernode trans error")); } } } } if ($process->processto == "") { $prcsMax = FlowProcess::model()->fetchMaxProcessIDByFlowID($flowId); if ($flowProcess !== $prcsMax) { $process->processto = $flowProcess + 1; } else { $process->processto = "0"; } } $prcsArr = explode(",", trim($process->processto, ",")); $prcsArrCount = count($prcsArr); $prcsEnableCount = 0; $prcsStop = "S"; $prcsback = ""; $prcsEnableFirst = null; $list = array(); $formData = WfHandleUtil::getFormData($flowId, $runId); foreach ($prcsArr as $key => $to) { $param = array("checked" => "false"); if ($to == "0") { $param["isover"] = true; $param["prcsname"] = $run->parentrun !== "0" ? Ibos::lang("End subflow") : Ibos::lang("Form endflow"); $prcsStop = $key; $prcsEnableCount++; if ($prcsEnableCount == 1) { $param["checked"] = "true"; $prcsEnableFirst = $key; } if ($run->parentrun !== "0") { $parentFlowId = FlowRun::model()->fetchFlowIdByRunId($run->parentrun); $parentProcess = FlowRun::model()->fetchIDByChild($run->parentrun, $runId); $parentFlowProcess = $parentProcess["flowprocess"]; if ($parentFlowId && $parentFlowProcess) { $temp = FlowProcess::model()->fetchProcess($parentFlowId, $parentFlowProcess); if ($temp) { $prcsback = $temp["processto"]; $backUserOP = $temp["autouserop"]; $param["backuser"] = $temp["autouser"]; } } if ($prcsback != "") { $param["prcsusers"] = WfHandleUtil::getPrcsUser($flowId, $prcsback); $param["display"] = $prcsEnableFirst !== $prcsStop ? false : true; if (isset($backUserOP)) { $param["prcsopuser"] = $backUserOP; } } } } else { $param["isover"] = false; $curProcess = FlowProcess::model()->fetchProcess($flowId, $to); $param["prcsname"] = $curProcess["name"]; $processOut = FlowProcessTurn::model()->fetchByUnique($flowId, $processId, $to); if (!$processOut) { $processOut = array("processout" => "", "conditiondesc" => ""); } $notpass = WfHandleUtil::checkCondition($formData, $processOut["processout"], $processOut["conditiondesc"]); if ($curProcess["childflow"] !== "0") { $param["prcsname"] .= "(" . $lang["Subflow"] . ")"; } if (substr($notpass, 0, 5) == "setok") { $notpass = ""; } if ($notpass == "") { $prcsEnableCount++; if ($prcsEnableCount == 1 || 0 < $process->syncdeal && !is_numeric($prcsStop)) { $param["checked"] = "true"; if ($prcsEnableCount == 1) { $prcsEnableFirst = $key; } } unset($param["notpass"]); $param["selectstr"] = $this->makeUserSelect($runId, $key, $curProcess, $param["prcsname"], $flowId, $processId); } else { $param["notpass"] = $notpass; } } $list[$key] = $param; } if ($prcsEnableCount == 0) { if ($notpass == "") { EnvUtil::iExit($lang["Process define error"]); } else { EnvUtil::iExit($notpass); } } $data = array("lang" => $lang, "notAllFinished" => $notAllFinished, "enableCount" => $prcsEnableCount, "prcsto" => $prcsArr, "prcsback" => $prcsback, "notpass" => isset($notpass) ? $notpass : "", "process" => $process->toArray(), "run" => $run->toArray(), "runid" => $runId, "flowid" => $flowId, "processid" => $processId, "flowprocess" => $flowProcess, "count" => $prcsArrCount, "prcsStop" => $prcsStop, "topflag" => $topflag, "list" => $list, "op" => $op); $this->ajaxReturn($data, "JSONP"); } }
public function actionIndex() { $flow = new ICFlowType(intval($this->flowid)); if (EnvUtil::submitCheck("formhash")) { $data = array(); $readOnly = $_POST["readonly"]; $hidden = $_POST["hidden"]; $saveflag = $_POST["saveflag"]; $fbAttachmentId = $_POST["fbattachmentid"]; $attachmentId = $_POST["attachmentid"]; $content = isset($_POST["content"]) ? StringUtil::filterCleanHtml($_POST["content"]) : ""; $topflag = $_POST["topflag"]; $this->checkRunAccess($this->runid, $this->processid, $this->createUrl("list/index")); if (FlowRunProcess::model()->getIsOp($this->uid, $this->runid, $this->processid)) { $formData = array(); $structure = $flow->form->parser->structure; foreach ($structure as $index => $item) { if (StringUtil::findIn($hidden, $item["itemid"]) || StringUtil::findIn($readOnly, $item["itemid"])) { continue; } $value = isset($_POST[$index]) ? $_POST[$index] : ""; $formData[$index] = $value; } $formData && $this->handleImgComponent($formData); $formData && FlowDataN::model()->update($this->flowid, $this->runid, $formData); } if (!empty($content) || !empty($fbAttachmentId)) { $fbData = array("runid" => $this->runid, "processid" => $this->processid, "flowprocess" => $this->flowprocess, "uid" => $this->uid, "content" => $content, "attachmentid" => $fbAttachmentId, "edittime" => TIMESTAMP); FlowRunfeedback::model()->add($fbData); AttachUtil::updateAttach($fbAttachmentId, $this->runid); } FlowRun::model()->modify($this->runid, array("attachmentid" => $attachmentId)); AttachUtil::updateAttach($attachmentId, $this->runid); $plugin = FlowProcess::model()->fetchSavePlugin($this->flowid, $this->flowprocess); if (!empty($plugin)) { $pluginFile = "./system/modules/workflow/plugins/save/" . $plugin; if (file_exists($pluginFile)) { include_once $pluginFile; } } switch ($saveflag) { case "save": MainUtil::setCookie("save_flag", 1); $this->redirect($this->createUrl("form/index", array("key" => $this->key))); break; case "turn": MainUtil::setCookie("turn_flag", 1); $this->redirect($this->createUrl("form/index", array("key" => $this->key))); break; case "end": case "finish": if ($saveflag == "end") { $param = array("opflag" => 1); } else { $param = array("topflag" => $topflag); } $this->redirect($this->createUrl("handle/complete", array_merge($param, array("key" => $this->key)))); break; default: break; } } else { $this->checkRunDel(); $this->checkIllegal(); $len = strlen($flow->autonum); for ($i = 0; $i < $flow->autolen - $len; $i++) { $flow->autonum = "0" . $flow->autonum; } $runProcess = new ICFlowRunProcess($this->runid, $this->processid, $this->flowprocess, $this->uid); $checkitem = ""; if ($flow->isFixed()) { $process = new ICFlowProcess($this->flowid, $this->flowprocess); if ($runProcess->opflag != 0) { $checkitem = $process->checkitem; } if (0 < $process->allowback) { $isAllowBack = $this->isAllowBack($runProcess->parent); } } else { $process = array(); } $run = new ICFlowRun($this->runid); $hasOtherOPUser = FlowRunProcess::model()->getHasOtherOPUser($this->runid, $this->processid, $this->flowprocess, $this->uid); if ($runProcess->flag == FlowConst::PRCS_UN_RECEIVE) { $this->setSelfToHandle($runProcess->id); } if ($runProcess->topflag == 1 && $runProcess->opflag == 1) { FlowRunProcess::model()->updateTop($this->uid, $this->runid, $this->processid, $this->flowprocess); } if ($runProcess->topflag == 2) { if (!$hasOtherOPUser) { $runProcess->opflag = 1; } } if ($this->processid == 1) { FlowRun::model()->modify($this->runid, array("beginuser" => $this->uid, "begintime" => TIMESTAMP)); if (!empty($run->parentrun)) { $this->setParentToHandle($run->parentrun, $this->runid); } } $preProcess = $this->processid - 1; if ($preProcess) { if ($flow->isFree() || $flow->isFixed() && $process->gathernode != 1) { $this->setProcessDone($preProcess); } } if ($flow->isFixed() && $process->timeout != 0) { if ($runProcess->flag == FlowConst::PRCS_UN_RECEIVE && $this->processid != 1) { $processBegin = FlowRunProcess::model()->fetchDeliverTime($this->runid, $preProcess); } else { $processBegin = $runProcess->processtime ? $runProcess->processtime : TIMESTAMP; } $timeUsed = TIMESTAMP - $processBegin; } $viewer = new ICFlowFormViewer(array("flow" => $flow, "form" => $flow->getForm(), "run" => $run, "process" => $process, "rp" => $runProcess)); $data = array_merge(array("flow" => $flow->toArray(), "run" => $run->toArray(), "processid" => $this->processid, "process" => !empty($process) ? $process->toArray() : $process, "checkItem" => $checkitem, "prcscache" => WfCommonUtil::loadProcessCache($this->flowid), "rp" => $runProcess->toArray(), "fbSigned" => $this->isFeedBackSigned(), "allowBack" => isset($isAllowBack) ? $isAllowBack : false, "timeUsed" => isset($timeUsed) ? $timeUsed : 0, "uploadConfig" => AttachUtil::getUploadConfig()), $viewer->render()); if ($this->isEnabledAttachment($flow, $run, $process, $runProcess)) { $data["allowAttach"] = true; if (!empty($run->attachmentid)) { $attachPurv = $this->getAttachPriv($flow, $process, $runProcess); $down = $attachPurv["down"]; $edit = $attachPurv["edit"]; $del = $attachPurv["del"]; $data["attachData"] = AttachUtil::getAttach($run->attachmentid, $down, $down, $edit, $del); } } else { $data["allowAttach"] = false; } if ($flow->isFixed() && $process->feedback != 1 || $flow->isFree()) { $data["allowFeedback"] = true; } else { $data["allowFeedback"] = false; } if ($data["allowBack"]) { $data["backlist"] = $this->getBackList($runProcess->flowprocess); } $data["feedback"] = WfHandleUtil::loadFeedback($flow->getID(), $run->getID(), $flow->type, $this->uid); if ($flow->isFree() && $runProcess->opflag == "1") { $hasDefault = FlowRunProcess::model()->getHasDefaultStep($this->runid, $this->processid); if (!$hasDefault) { $data["defaultEnd"] = true; } } if ($flow->isFree() && $runProcess->topflag == "2") { if (!$hasOtherOPUser) { $data["otherEnd"] = true; } } $this->setPageTitle(Ibos::lang("Handle work")); $this->setPageState("breadCrumbs", array(array("name" => Ibos::lang("Workflow")), array("name" => Ibos::lang("My work"), "url" => $this->createUrl("list/index")), array("name" => Ibos::lang("Handle work")))); $this->render("index", $data); } }