Example #1
0
 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");
     }
 }
Example #2
0
 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;
 }