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"); } }
private function beforeSave() { $data =& $_POST; $process = array("processid" => intval($data["processid"]), "type" => intval($data["type"])); if (isset($data["attachpriv"]) && is_array($data["attachpriv"])) { $process["attachpriv"] = implode(",", $data["attachpriv"]); } else { $process["attachpriv"] = ""; } if (!empty($data["prcsuser"])) { $users = StringUtil::getId($data["prcsuser"], true); if (isset($users["c"])) { $process["deptid"] = "alldept"; } else { if (isset($users["d"])) { $process["deptid"] = implode(",", $users["d"]); } else { $process["deptid"] = ""; } if (isset($users["p"])) { $process["positionid"] = implode(",", $users["p"]); } else { $process["positionid"] = ""; } if (isset($users["u"])) { $process["uid"] = implode(",", $users["u"]); } else { $process["uid"] = ""; } } } else { $process["uid"] = $process["deptid"] = $process["positionid"] = ""; } if ($process["type"] == 1) { $childFlow = intval($data["childflow"]); $typeData = array("name" => FlowType::model()->fetchNameByFlowId($childFlow), "processto" => $data["prcsback"], "autouserop" => !empty($data["backuserop"]) ? implode(",", StringUtil::getId($data["backuserop"])) : "", "autouser" => !empty($data["backuser"]) ? implode(",", StringUtil::getId($data["backuser"])) : "", "childflow" => $childFlow, "relationout" => $data["map"]); } else { $autoUser = !empty($data["autouser"]) ? implode(",", StringUtil::getId($data["autouser"])) : ""; $autoType = intval($data["autotype"]); if ($autoType == 7) { $autoUser = intval($data["itemid"]); } elseif ($autoType == 8) { $autoUser = intval($data["autoprcsuser"]); } $typeData = array("name" => StringUtil::filterCleanHtml($data["name"]), "plugin" => $data["plugin"], "pluginsave" => $data["pluginsave"], "feedback" => intval($data["feedback"]), "signlook" => intval($data["signlook"]), "autotype" => $autoType, "autouserop" => !empty($data["autouserop"]) ? implode(",", StringUtil::getId($data["autouserop"])) : "", "autouser" => $autoUser, "userfilter" => intval($data["userfilter"]), "timeout" => $data["timeout"], "syncdeal" => intval($data["syncdeal"]), "userlock" => isset($data["userlock"]) ? 1 : 0, "turnpriv" => isset($data["turnpriv"]) ? 1 : 0, "topdefault" => intval($data["topdefault"]), "gathernode" => intval($data["gathernode"]), "allowback" => $data["allowback"], "childflow" => 0, "autobaseuser" => intval($data["autobaseuser"])); } $process = array_merge($process, $typeData); $write = isset($data["write"]) ? $data["write"] : array(); $secret = isset($data["secret"]) ? $data["secret"] : array(); $check = isset($data["check"]) ? $data["check"] : array(); $micro = isset($data["micro"]) ? $data["micro"] : array(); $checkSelect = isset($data["check_select"]) ? $data["check_select"] : array(); if (!empty($write)) { $prcsItem = $checkItem = array(); foreach ($write as $title) { $prcsItem[] = $title; if (in_array($title, $check)) { $key = array_search($title, $check); if (isset($checkSelect[$key])) { $checkItem[] = sprintf("%s=%s", $title, $checkSelect[$key]); } } } $process["processitem"] = implode(",", $prcsItem); $process["checkitem"] = implode(",", $checkItem); } else { $process["processitem"] = $process["checkitem"] = ""; } if (!empty($secret)) { $process["hiddenitem"] = implode(",", $secret); } else { $process["hiddenitem"] = ""; } if (!empty($micro)) { $process["processitemauto"] = implode(",", $micro); } else { $process["processitemauto"] = ""; } if (isset($data["conresult"])) { foreach ($data["conresult"] as $id => $cond) { FlowProcessTurn::model()->deleteAll(sprintf("`flowid` = '%d' AND `processid` = '%d' AND `to` = '%d'", $this->flow->getID(), $process["processid"], $id)); $desc = $data["condesc"][$id]; FlowProcessTurn::model()->add(array("processout" => $cond, "processid" => $process["processid"], "conditiondesc" => $desc, "flowid" => $this->flow->getID(), "to" => $id)); } } return $process; }