/** * Update properties of an Task * @var string $prj_uid. Uid for Process * @var string $act_uid. Uid for Activity * @var array $arrayProperty. Data for properties of Activity * * @author Brayan Pereyra (Cochalo) <*****@*****.**> * @copyright Colosa - Bolivia * * return object */ public function updateProperties($prj_uid, $act_uid, $arrayProperty) { //Copy of processmaker/workflow/engine/methods/tasks/tasks_Ajax.php //case "saveTaskData": try { if (isset($arrayProperty['properties'])) { $arrayProperty = array_change_key_case($arrayProperty['properties'], CASE_UPPER); } $prj_uid = $this->validateProUid($prj_uid); $act_uid = $this->validateActUid($act_uid); $arrayProperty["TAS_UID"] = $act_uid; $arrayProperty["PRO_UID"] = $prj_uid; $task = new \Task(); $aTaskInfo = $task->load($arrayProperty["TAS_UID"]); $arrayResult = array(); if ($arrayProperty["TAS_SELFSERVICE_TIMEOUT"] == "1") { if (!is_numeric($arrayProperty["TAS_SELFSERVICE_TIME"]) || $arrayProperty["TAS_SELFSERVICE_TIME"]=='') { throw (new \Exception("Invalid value specified for 'tas_selfservice_time'")); } } foreach ($arrayProperty as $k => $v) { $arrayProperty[$k] = str_replace("@amp@", "&", $v); } if (isset($arrayProperty["TAS_SEND_LAST_EMAIL"])) { $arrayProperty["TAS_SEND_LAST_EMAIL"] = ($arrayProperty["TAS_SEND_LAST_EMAIL"] == "TRUE")? "TRUE" : "FALSE"; } else { if (isset($arrayProperty["SEND_EMAIL"])) { $arrayProperty["TAS_SEND_LAST_EMAIL"] = ($arrayProperty["SEND_EMAIL"] == "TRUE")? "TRUE" : "FALSE"; } else { $arrayProperty["TAS_SEND_LAST_EMAIL"] = (is_null($aTaskInfo["TAS_SEND_LAST_EMAIL"]))? "FALSE" : $aTaskInfo["TAS_SEND_LAST_EMAIL"]; } } //Validating TAS_ASSIGN_VARIABLE value if (!isset($arrayProperty["TAS_ASSIGN_TYPE"])) { $derivateType = $task->kgetassigType($arrayProperty["PRO_UID"], $arrayProperty["TAS_UID"]); if (is_null($derivateType)) { $arrayProperty["TAS_ASSIGN_TYPE"] = "BALANCED"; } else { $arrayProperty["TAS_ASSIGN_TYPE"] = $derivateType["TAS_ASSIGN_TYPE"]; } } switch ($arrayProperty["TAS_ASSIGN_TYPE"]) { case 'BALANCED': case 'MANUAL': case 'REPORT_TO': $this->unsetVar($arrayProperty, "TAS_ASSIGN_VARIABLE"); $this->unsetVar($arrayProperty, "TAS_GROUP_VARIABLE"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIMEOUT"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME_UNIT"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TRIGGER_UID"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_EXECUTION"); break; case 'EVALUATE': if (empty($arrayProperty["TAS_ASSIGN_VARIABLE"])) { throw (new \Exception("Invalid value specified for 'tas_assign_variable'")); } $this->unsetVar($arrayProperty, "TAS_GROUP_VARIABLE"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIMEOUT"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME_UNIT"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TRIGGER_UID"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_EXECUTION"); break; case 'SELF_SERVICE': case 'SELF_SERVICE_EVALUATE': if ($arrayProperty["TAS_ASSIGN_TYPE"] == "SELF_SERVICE_EVALUATE") { if (empty($arrayProperty["TAS_GROUP_VARIABLE"])) { throw (new \Exception("Invalid value specified for 'tas_group_variable'")); } } else { $arrayProperty["TAS_GROUP_VARIABLE"] = ''; } $arrayProperty["TAS_ASSIGN_TYPE"] = "SELF_SERVICE"; if (!($arrayProperty["TAS_SELFSERVICE_TIMEOUT"] == 0 || $arrayProperty["TAS_SELFSERVICE_TIMEOUT"] == 1)) { throw (new \Exception("Invalid value specified for 'tas_selfservice_timeout'")); } if ($arrayProperty["TAS_SELFSERVICE_TIMEOUT"] == "1") { if (empty($arrayProperty["TAS_SELFSERVICE_TIME"])) { throw (new \Exception("Invalid value specified for 'tas_assign_variable'")); } if (empty($arrayProperty["TAS_SELFSERVICE_TIME_UNIT"])) { throw (new \Exception("Invalid value specified for 'tas_selfservice_time_unit'")); } if (empty($arrayProperty["TAS_SELFSERVICE_TRIGGER_UID"])) { throw (new \Exception("Invalid value specified for 'tas_selfservice_trigger_uid'")); } if (empty($arrayProperty["TAS_SELFSERVICE_EXECUTION"])) { throw (new \Exception("Invalid value specified for 'tas_selfservice_execution'")); } } else { $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TIME_UNIT"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_TRIGGER_UID"); $this->unsetVar($arrayProperty, "TAS_SELFSERVICE_EXECUTION"); } break; } //Validating TAS_TRANSFER_FLY value if ($arrayProperty["TAS_TRANSFER_FLY"] == "FALSE") { if (!isset($arrayProperty["TAS_DURATION"])) { throw (new \Exception("Invalid value specified for 'tas_duration'")); } $valuesTimeUnit = array('DAYS','HOURS','MINUTES'); if ((!isset($arrayProperty["TAS_TIMEUNIT"])) || (!in_array($arrayProperty["TAS_TIMEUNIT"], $valuesTimeUnit))) { throw (new \Exception("Invalid value specified for 'tas_timeunit'")); } $valuesTypeDay = array('1','2',''); if ((!isset($arrayProperty["TAS_TYPE_DAY"])) || (!in_array($arrayProperty["TAS_TYPE_DAY"], $valuesTypeDay))) { throw (new \Exception("Invalid value specified for 'tas_type_day'")); } if (!isset($arrayProperty["TAS_CALENDAR"])) { throw (new \Exception("Invalid value specified for 'tas_calendar'")); } } else { $this->unsetVar($arrayProperty, "TAS_DURATION"); $this->unsetVar($arrayProperty, "TAS_TIMEUNIT"); $this->unsetVar($arrayProperty, "TAS_TYPE_DAY"); $this->unsetVar($arrayProperty, "TAS_CALENDAR"); } if ($arrayProperty["TAS_SEND_LAST_EMAIL"] == "TRUE") { if (empty($arrayProperty["TAS_DEF_SUBJECT_MESSAGE"])) { throw (new \Exception("Invalid value specified for 'tas_def_subject_message'")); } $valuesDefMessageType = array('template','text'); if ((!isset($arrayProperty["TAS_DEF_MESSAGE_TYPE"])) || (!in_array($arrayProperty["TAS_DEF_MESSAGE_TYPE"], $valuesDefMessageType))) { throw (new \Exception("Invalid value specified for 'tas_def_message_type'")); } if ($arrayProperty["TAS_DEF_MESSAGE_TYPE"] == 'template') { if (empty($arrayProperty["TAS_DEF_MESSAGE_TEMPLATE"])) { throw (new \Exception("Invalid value specified for 'tas_def_message_template'")); } $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE"); } else { if (empty($arrayProperty["TAS_DEF_MESSAGE"])) { throw (new \Exception("Invalid value specified for 'tas_def_message'")); } $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE_TEMPLATE"); } //Additional configuration if (isset($arrayProperty["TAS_DEF_MESSAGE_TYPE"])) { \G::LoadClass("configuration"); $oConf = new \Configurations(); if (!isset($arrayProperty["TAS_DEF_MESSAGE_TEMPLATE"])) { $arrayProperty["TAS_DEF_MESSAGE_TEMPLATE"] = "alert_message.html"; } $oConf->aConfig = array("TAS_DEF_MESSAGE_TYPE" => $arrayProperty["TAS_DEF_MESSAGE_TYPE"], "TAS_DEF_MESSAGE_TEMPLATE" => $arrayProperty["TAS_DEF_MESSAGE_TEMPLATE"]); $oConf->saveConfig("TAS_EXTRA_PROPERTIES", $arrayProperty["TAS_UID"], "", ""); } } else { $this->unsetVar($arrayProperty, "TAS_DEF_SUBJECT_MESSAGE"); $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE_TYPE"); $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE"); $this->unsetVar($arrayProperty, "TAS_DEF_MESSAGE_TEMPLATE"); } $result = $task->update($arrayProperty); if (!empty($arrayProperty['CONSOLIDATE_DATA'])) { if (!empty($arrayProperty['CONSOLIDATE_DATA']['consolidated_dynaform'])) { G::LoadClass("consolidatedCases"); $consolidated = new \ConsolidatedCases(); $dataConso = array( 'con_status' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_enable'], 'tas_uid' => $arrayProperty['TAS_UID'], 'dyn_uid' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_dynaform'], 'pro_uid' => $arrayProperty['PRO_UID'], 'rep_uid' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_report_table'], 'table_name' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_table'], 'title' => $arrayProperty['CONSOLIDATE_DATA']['consolidated_title'] ); $consolidated->saveConsolidated($dataConso); } } $arrayResult["status"] = "OK"; if ($result == 3) { $arrayResult["status"] = "CRONCL"; } return $arrayResult; } catch (Exception $e) { throw $e; } }
/** * Remove a Adhoc assignee of an activity * * @param string $sProcessUID {@min 32} {@max 32} * @param string $sTaskUID {@min 32} {@max 32} * @param string $sAssigneeUID {@min 32} {@max 32} * * @access public */ public function removeTaskAdhocAssignee($sProcessUID, $sTaskUID, $sAssigneeUID) { try { Validator::proUid($sProcessUID, '$prj_uid'); $this->validateActUid($sTaskUID); $iType = 2; $iRelation = ''; $oCriteria = new \Criteria('workflow'); $oCriteria->addSelectColumn(\TaskUserPeer::TU_RELATION); $oCriteria->add(\TaskUserPeer::USR_UID, $sAssigneeUID); $oCriteria->add(\TaskUserPeer::TAS_UID, $sTaskUID); $oCriteria->add(\TaskUserPeer::TU_TYPE, $iType); $oTaskUser = \TaskUserPeer::doSelectRS($oCriteria); $oTaskUser->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($oTaskUser->next()) { $aRow = $oTaskUser->getRow(); $iRelation = $aRow['TU_RELATION']; } $oTaskUser = \TaskUserPeer::retrieveByPK($sTaskUID, $sAssigneeUID, $iType, $iRelation); if (!is_null($oTaskUser)) { \TaskUserPeer::doDelete($oCriteria); $arrayAux = $this->getTaskAssignees($sProcessUID, $sTaskUID, "ASSIGNEE", 2); $arrayTaskAdhocAssignees = $arrayAux["data"]; if (empty($arrayTaskAdhocAssignees)) { $task = new \Task(); $result = $task->update(array("TAS_UID" => $sTaskUID, "TAS_TYPE" => "NORMAL")); } } else { throw new \Exception(\G::LoadTranslation("ID_ROW_DOES_NOT_EXIST")); } } catch (\Exception $e) { throw $e; } }
/** * 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; }