/** * @url GET /:prj_uid/activity/:act_uid/available-steps * * @param string $act_uid {@min 32}{@max 32} * @param string $prj_uid {@min 32}{@max 32} */ public function doGetActivityAvailableSteps($act_uid, $prj_uid) { try { $task = new \ProcessMaker\BusinessModel\Task(); $task->setFormatFieldNameInUppercase(false); $task->setArrayParamException(array("taskUid" => "act_uid")); $response = $task->getAvailableSteps($act_uid); return $response; } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } }
/** * @url GET /project/:prj_uid/activity/:act_uid/steps * * @param string $act_uid {@min 32}{@max 32} * @param string $prj_uid {@min 32}{@max 32} */ public function doGetActivitySteps($act_uid, $prj_uid) { try { $task = new \ProcessMaker\BusinessModel\Task(); $task->setFormatFieldNameInUppercase(false); $task->setArrayParamException(array("taskUid" => "act_uid", "stepUid" => "step_uid")); $activitySteps = $task->getSteps($act_uid); $_SESSION['PROCESS'] = $prj_uid; $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); $dynaForm->setFormatFieldNameInUppercase(false); $oMobile = new \ProcessMaker\BusinessModel\Light(); $step = new \ProcessMaker\Services\Api\Project\Activity\Step(); \G::LoadClass("pmDynaform"); $pmDynaForm = new \pmDynaform(); $response = array(); for ($i = 0; $i < count($activitySteps); $i++) { if ($activitySteps[$i]['step_type_obj'] == "DYNAFORM") { $dataForm = $dynaForm->getDynaForm($activitySteps[$i]['step_uid_obj']); $result = $this->parserDataDynaForm($dataForm); $result['formContent'] = (isset($result['formContent']) && $result['formContent'] != null)?json_decode($result['formContent']):""; $pmDynaForm->jsonr($result['formContent']); $result['index'] = $i; $result['stepId'] = $activitySteps[$i]["step_uid"]; $result['stepUidObj'] = $activitySteps[$i]["step_uid_obj"]; $result['stepMode'] = $activitySteps[$i]['step_mode']; $result['stepPosition'] = $activitySteps[$i]['step_position']; $trigger = $oMobile->statusTriggers($step->doGetActivityStepTriggers($activitySteps[$i]["step_uid"], $act_uid, $prj_uid)); $result["triggers"] = $trigger; $response[] = $result; } } } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } return $response; }
/** * Create Steps for a Task * * @param string $taskUid Unique id of Task * @param string $processUid Unique id of Process * @param array $arrayData Data * * return array Return data of the new Steps created */ public function createAll($taskUid, $processUid, $arrayData) { try { $stepTrigger = new \ProcessMaker\BusinessModel\Step\Trigger(); $arrayData = array_change_key_case($arrayData, CASE_UPPER); unset($arrayData["STEP_UID"]); //Verify data $task = new \ProcessMaker\BusinessModel\Task(); $this->throwExceptionIfNotExistsProcess($processUid); $task->throwExceptionIfNotExistsTask($processUid, $taskUid, $this->arrayParamException["taskUid"]); if (!isset($arrayData["STEP_TYPE_OBJ"])) { throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->arrayParamException["stepTypeObj"]))); } $arrayData["STEP_TYPE_OBJ"] = trim($arrayData["STEP_TYPE_OBJ"]); if ($arrayData["STEP_TYPE_OBJ"] == "") { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->arrayParamException["stepTypeObj"]))); } if (!isset($arrayData["STEP_UID_OBJ"])) { throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->arrayParamException["stepUidObj"]))); } $arrayData["STEP_UID_OBJ"] = trim($arrayData["STEP_UID_OBJ"]); if ($arrayData["STEP_UID_OBJ"] == "") { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->arrayParamException["stepUidObj"]))); } if (!isset($arrayData["STEP_MODE"])) { throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->arrayParamException["stepMode"]))); } $arrayData["STEP_MODE"] = trim($arrayData["STEP_MODE"]); if ($arrayData["STEP_MODE"] == "") { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->arrayParamException["stepMode"]))); } $this->throwExceptionIfHaveInvalidValueInTypeObj($arrayData["STEP_TYPE_OBJ"]); $this->throwExceptionIfHaveInvalidValueInMode($arrayData["STEP_MODE"]); $msg = $this->existsObjectUid($arrayData["STEP_TYPE_OBJ"], $arrayData["STEP_UID_OBJ"], $this->arrayParamException["stepUidObj"]); if ($msg != "") { throw new \Exception($msg); } if ($this->existsRecord($taskUid, $arrayData["STEP_TYPE_OBJ"], $arrayData["STEP_UID_OBJ"])) { throw new \Exception(\G::LoadTranslation("ID_RECORD_EXISTS_IN_TABLE", array($taskUid . ", " . $arrayData["STEP_TYPE_OBJ"] . ", " . $arrayData["STEP_UID_OBJ"], "STEP"))); } //Create $step = new \Step(); $stepUid = $step->create(array("PRO_UID" => $processUid, "TAS_UID" => $taskUid, "STEP_POSITION" => $arrayData["STEP_POSITION"])); if (!isset($arrayData["STEP_POSITION"]) || $arrayData["STEP_POSITION"] == "") { unset($arrayData["STEP_POSITION"]); } $arrayData = $this->updateAll($stepUid, $arrayData); //Return unset($arrayData["STEP_UID"]); $arrayData = array_merge(array("STEP_UID" => $stepUid), $arrayData); if (!$this->formatFieldNameInUppercase) { $arrayData = array_change_key_case($arrayData, CASE_LOWER); } return $arrayData; } catch (\Exception $e) { throw $e; } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $webEntryUid Unique id of Web Entry * @param string $processUid Unique id of Process * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($webEntryUid, $processUid, array $arrayData) { try { //Set variables $arrayWebEntryData = $webEntryUid == "" ? array() : $this->getWebEntry($webEntryUid, true); $flagInsert = $webEntryUid == "" ? true : false; $arrayDataMain = array_merge($arrayWebEntryData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); if ($arrayDataMain["WE_METHOD"] == "WS") { $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayUserFieldDefinition, $this->arrayFieldNameForException, $flagInsert); } //Verify data if (isset($arrayData["WE_TITLE"])) { $this->throwExceptionIfExistsTitle($processUid, $arrayData["WE_TITLE"], $this->arrayFieldNameForException["webEntryTitle"], $webEntryUid); } if (isset($arrayData["TAS_UID"])) { $task = new \ProcessMaker\BusinessModel\Task(); $task->throwExceptionIfNotExistsTask($processUid, $arrayData["TAS_UID"], $this->arrayFieldNameForException["taskUid"]); } if (isset($arrayData["DYN_UID"])) { $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); $dynaForm->throwExceptionIfNotExistsDynaForm($arrayData["DYN_UID"], $processUid, $this->arrayFieldNameForException["dynaFormUid"]); } if ($arrayDataMain["WE_METHOD"] == "WS" && isset($arrayData["USR_UID"])) { $process->throwExceptionIfNotExistsUser($arrayData["USR_UID"], $this->arrayFieldNameForException["userUid"]); } $task = new \Task(); $arrayTaskData = $task->load($arrayDataMain["TAS_UID"]); if (isset($arrayData["TAS_UID"])) { if ($arrayTaskData["TAS_START"] == "FALSE") { throw new \Exception(\G::LoadTranslation("ID_ACTIVITY_IS_NOT_INITIAL_ACTIVITY", array($arrayTaskData["TAS_TITLE"]))); } if ($arrayTaskData["TAS_ASSIGN_TYPE"] != "BALANCED") { throw new \Exception(\G::LoadTranslation("ID_WEB_ENTRY_ACTIVITY_DOES_NOT_HAVE_VALID_ASSIGNMENT_TYPE", array($arrayTaskData["TAS_TITLE"]))); } } if ($arrayDataMain["WE_METHOD"] == "WS" && isset($arrayData["TAS_UID"])) { $task = new \Tasks(); if ($task->assignUsertoTask($arrayData["TAS_UID"]) == 0) { throw new \Exception(\G::LoadTranslation("ID_ACTIVITY_DOES_NOT_HAVE_USERS", array($arrayTaskData["TAS_TITLE"]))); } } if (isset($arrayData["DYN_UID"])) { $dynaForm = new \Dynaform(); $arrayDynaFormData = $dynaForm->Load($arrayData["DYN_UID"]); $step = new \ProcessMaker\BusinessModel\Step(); if (!$step->existsRecord($arrayDataMain["TAS_UID"], "DYNAFORM", $arrayData["DYN_UID"])) { throw new \Exception(\G::LoadTranslation("ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY", array($arrayDynaFormData["DYN_TITLE"], $arrayTaskData["TAS_TITLE"]))); } } if ($arrayDataMain["WE_METHOD"] == "WS" && isset($arrayData["USR_UID"])) { $user = new \Users(); $arrayUserData = $user->load($arrayData["USR_UID"]); //Verify if User is assigned to Task $projectUser = new \ProcessMaker\BusinessModel\ProjectUser(); if (!$projectUser->userIsAssignedToTask($arrayData["USR_UID"], $arrayDataMain["TAS_UID"])) { throw new \Exception(\G::LoadTranslation("ID_USER_DOES_NOT_HAVE_ACTIVITY_ASSIGNED", array($arrayUserData["USR_USERNAME"], $arrayTaskData["TAS_TITLE"]))); } } } catch (\Exception $e) { throw $e; } }
/** * Method get list start case * * @param $userId User id * @return array * @throws \Exception */ public function getProcessListStartCase($userId) { $response = null; try { $oProcess = new \Process(); $oCase = new \Cases(); //Get ProcessStatistics Info $start = 0; $limit = ''; $proData = $oProcess->getAllProcesses( $start, $limit, null, null, false, true ); $processListInitial = $oCase->getStartCasesPerType( $userId, 'category' ); $processList = array (); foreach ($processListInitial as $key => $procInfo) { if (isset( $procInfo['pro_uid'] )) { if (trim( $procInfo['cat'] ) == "") { $procInfo['cat'] = "_OTHER_"; } $processList[$procInfo['catname']][$procInfo['value']] = $procInfo; } } ksort( $processList ); foreach ($processList as $key => $processInfo) { ksort( $processList[$key] ); } foreach ($proData as $key => $proInfo) { $proData[$proInfo['PRO_UID']] = $proInfo; } $task = new \ProcessMaker\BusinessModel\Task(); $task->setFormatFieldNameInUppercase(false); $task->setArrayParamException(array("taskUid" => "act_uid", "stepUid" => "step_uid")); $step = new \ProcessMaker\Services\Api\Project\Activity\Step(); $response = array(); foreach ($processList as $key => $processInfo) { $tempTreeChildren = array (); foreach ($processList[$key] as $keyChild => $processInfoChild) { $tempTreeChild['text'] = htmlentities($keyChild, ENT_QUOTES, 'UTF-8'); //ellipsis ( $keyChild, 50 ); $tempTreeChild['processId'] = $processInfoChild['pro_uid']; $tempTreeChild['taskId'] = $processInfoChild['uid']; $forms = $task->getSteps($processInfoChild['uid']); $newForm = array(); $c = 0; foreach ($forms as $k => $form) { if ($form['step_type_obj'] == "DYNAFORM") { $newForm[$c]['formId'] = $form['step_uid_obj']; $newForm[$c]['index'] = $c+1; $newForm[$c]['title'] = $form['obj_title']; $newForm[$c]['description'] = $form['obj_description']; $newForm[$c]['stepId'] = $form["step_uid"]; $newForm[$c]['stepMode'] = $form['step_mode']; $trigger = $this->statusTriggers($step->doGetActivityStepTriggers($form["step_uid"], $tempTreeChild['taskId'], $tempTreeChild['processId'])); $newForm[$c]["triggers"] = $trigger; $c++; } } $tempTreeChild['forms'] = $newForm; if (isset( $proData[$processInfoChild['pro_uid']] )) { $tempTreeChildren[] = $tempTreeChild; } } $response = array_merge($response, $tempTreeChildren); } } catch (\Exception $e) { throw $e; } return $response; }
/** * @url GET /:prjUid/activity/:actUid/adhoc-assignee/all * * @param string $prjUid {@min 32} {@max 32} * @param string $actUid {@min 32} {@max 32} * @param string $filter * @param int $start * @param int $limit * @param string $type * */ public function doGetActivityAdhocAssigneesAll($prjUid, $actUid, $filter = '', $start = null, $limit = null, $type = '') { $response = array(); try { $task = new \ProcessMaker\BusinessModel\Task(); $arrayData = $task->getTaskAdhocAssigneesAll($prjUid, $actUid, $filter, $start, $limit, $type); //Response $response = $arrayData; } catch (\Exception $e) { //Response throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } return $response; }
/** * @url PUT /:prj_uid/activity/validate-active-cases * * @param string $prj_uid {@min 32}{@max 32} */ public function doGetActivityValidateSelfService($prj_uid, $request_data = array()) { try { $task = new \ProcessMaker\BusinessModel\Task(); $task->setFormatFieldNameInUppercase(false); $task->setArrayParamException(array("taskUid" => "act_uid")); $response = $task->getValidateSelfService($request_data); return $response; } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } }
/** * @url GET /:processUid/activity/:activityUid/steps/list */ public function getActivityStepsList($activityUid, $processUid, $start = 0, $limit = 10) { $response = array(); try { $task = new \ProcessMaker\BusinessModel\Task(); $data = $task->getStepsList($activityUid, $processUid, false, $start, $limit); //Response $response["success"] = true; $response["message"] = "Steps loaded successfully"; $response["data"] = $data; } catch (\Exception $e) { //Response $response["success"] = false; $response["message"] = $e->getMessage(); } return $response; }
/** * Create/Update Process * * @param string $option * @param array $arrayDefineProcessData * * return array Return data array with new UID for each element * * @access public */ public function defineProcess($option, $arrayDefineProcessData) { if (!isset($arrayDefineProcessData["process"]) || count($arrayDefineProcessData["process"]) == 0) { throw (new \Exception("Process data do not exist")); } //Process $process = new \Process(); $arrayProcessData = $arrayDefineProcessData["process"]; unset($arrayProcessData["tasks"]); unset($arrayProcessData["routes"]); switch ($option) { case "CREATE": if (!isset($arrayProcessData["USR_UID"]) || trim($arrayProcessData["USR_UID"]) == "") { throw (new \Exception("User data do not exist")); } if (!isset($arrayProcessData["PRO_TITLE"]) || trim($arrayProcessData["PRO_TITLE"]) == "") { throw (new \Exception("Process title data do not exist")); } if (!isset($arrayProcessData["PRO_DESCRIPTION"])) { throw (new \Exception("Process description data do not exist")); } if (!isset($arrayProcessData["PRO_CATEGORY"])) { throw (new \Exception("Process category data do not exist")); } break; case "UPDATE": break; } if (isset($arrayProcessData["PRO_TITLE"])) { $arrayProcessData["PRO_TITLE"] = trim($arrayProcessData["PRO_TITLE"]); } if (isset($arrayProcessData["PRO_DESCRIPTION"])) { $arrayProcessData["PRO_DESCRIPTION"] = trim($arrayProcessData["PRO_DESCRIPTION"]); } if (isset($arrayProcessData["PRO_TITLE"]) && $process->existsByProTitle($arrayProcessData["PRO_TITLE"])) { throw (new \Exception(\G::LoadTranslation("ID_PROCESSTITLE_ALREADY_EXISTS", SYS_LANG, array("PRO_TITLE" => $arrayProcessData["PRO_TITLE"])))); } $arrayProcessData["PRO_DYNAFORMS"] = array (); $arrayProcessData["PRO_DYNAFORMS"]["PROCESS"] = (isset($arrayProcessData["PRO_SUMMARY_DYNAFORM"]))? $arrayProcessData["PRO_SUMMARY_DYNAFORM"] : ""; unset($arrayProcessData["PRO_SUMMARY_DYNAFORM"]); switch ($option) { case "CREATE": $processUid = $process->create($arrayProcessData, false); //Call plugins //$arrayData = array( // "PRO_UID" => $processUid, // "PRO_TEMPLATE" => (isset($arrayProcessData["PRO_TEMPLATE"]) && $arrayProcessData["PRO_TEMPLATE"] != "")? $arrayProcessData["PRO_TEMPLATE"] : "", // "PROCESSMAP" => $this //? //); // //$oPluginRegistry = &PMPluginRegistry::getSingleton(); //$oPluginRegistry->executeTriggers(PM_NEW_PROCESS_SAVE, $arrayData); break; case "UPDATE": $result = $process->update($arrayProcessData); $processUid = $arrayProcessData["PRO_UID"]; break; } //Process - Save Calendar ID for this process if (isset($arrayProcessData["PRO_CALENDAR"]) && $arrayProcessData["PRO_CALENDAR"] != "") { $calendar = new \Calendar(); $calendar->assignCalendarTo($processUid, $arrayProcessData["PRO_CALENDAR"], "PROCESS"); } $uidAux = $arrayDefineProcessData["process"]["PRO_UID"]; $arrayDefineProcessData["process"]["PRO_UID"] = $processUid; $arrayDefineProcessData["process"]["PRO_UID_OLD"] = $uidAux; //Tasks if (isset($arrayDefineProcessData["process"]["tasks"]) && count($arrayDefineProcessData["process"]["tasks"]) > 0) { $arrayTaskData = $arrayDefineProcessData["process"]["tasks"]; foreach ($arrayTaskData as $index => $value) { $t = $value; $t["PRO_UID"] = $processUid; $arrayData = $t; $action = $arrayData["_action"]; unset($arrayData["_action"]); switch ($action) { case "CREATE": //Create task $arrayDataAux = array( "TAS_UID" => $arrayData["TAS_UID"], "PRO_UID" => $arrayData["PRO_UID"], "TAS_TITLE" => $arrayData["TAS_TITLE"], "TAS_DESCRIPTION" => $arrayData["TAS_DESCRIPTION"], "TAS_POSX" => $arrayData["TAS_POSX"], "TAS_POSY" => $arrayData["TAS_POSY"], "TAS_START" => $arrayData["TAS_START"] ); $task = new \Task(); $taskUid = $task->create($arrayDataAux, false); $uidAux = $arrayDefineProcessData["process"]["tasks"][$index]["TAS_UID"]; $arrayDefineProcessData["process"]["tasks"][$index]["TAS_UID"] = $taskUid; $arrayDefineProcessData["process"]["tasks"][$index]["TAS_UID_OLD"] = $uidAux; //Update task properties $task2 = new \ProcessMaker\BusinessModel\Task(); $arrayResult = $task2->updateProperties($taskUid, $processUid, $arrayData); //Update array routes if (isset($arrayDefineProcessData["process"]["routes"]) && count($arrayDefineProcessData["process"]["routes"]) > 0) { $arrayDefineProcessData["process"]["routes"] = $this->routeUpdateTaskUidInArray($arrayDefineProcessData["process"]["routes"], $taskUid, $t["TAS_UID"]); } break; case "UPDATE": //Update task $task = new \Task(); $result = $task->update($arrayData); //Update task properties $task2 = new \ProcessMaker\BusinessModel\Task(); $arrayResult = $task2->updateProperties($arrayData["TAS_UID"], $processUid, $arrayData); break; case "DELETE": $tasks = new \Tasks(); $tasks->deleteTask($arrayData["TAS_UID"]); break; } } } //Routes if (isset($arrayDefineProcessData["process"]["routes"]) && count($arrayDefineProcessData["process"]["routes"]) > 0) { $arrayRouteData = $arrayDefineProcessData["process"]["routes"]; foreach ($arrayRouteData as $index => $value) { $r = $value; $routeUid = $this->defineRoute( //***** New method $processUid, $r["TAS_UID"], $r["ROU_NEXT_TASK"], $r["ROU_TYPE"], false ); $uidAux = $arrayDefineProcessData["process"]["routes"][$index]["ROU_UID"]; $arrayDefineProcessData["process"]["routes"][$index]["ROU_UID"] = $routeUid; $arrayDefineProcessData["process"]["routes"][$index]["ROU_UID_OLD"] = $uidAux; } } return $arrayDefineProcessData; }