/** * Update Process * * @param string $processUid Unique id of Process * @param array $arrayData Data * * return array Return data of the Process updated */ public function update($processUid, $arrayData) { try { $arrayData = array_change_key_case($arrayData, CASE_UPPER); //Verify data $this->throwExceptionIfNotExistsProcess($processUid, $this->arrayFieldNameForException["processUid"]); $this->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, false); if (isset($arrayData["PRO_TITLE"])) { $this->throwExceptionIfExistsTitle($arrayData["PRO_TITLE"], $this->arrayFieldNameForException["processTitle"], $processUid); } if (isset($arrayData["PRO_CALENDAR"]) && $arrayData["PRO_CALENDAR"] . "" != "") { $calendar = new \ProcessMaker\BusinessModel\Calendar(); $calendar->throwExceptionIfNotExistsCalendar($arrayData["PRO_CALENDAR"], $this->arrayFieldNameForException["processCalendar"]); } if (isset($arrayData["PRO_CATEGORY"]) && $arrayData["PRO_CATEGORY"] . "" != "") { $this->throwExceptionIfNotExistsProcessCategory($arrayData["PRO_CATEGORY"], $this->arrayFieldNameForException["processCategory"]); } if (isset($arrayData["PRO_SUMMARY_DYNAFORM"]) && $arrayData["PRO_SUMMARY_DYNAFORM"] . "" != "") { $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); $dynaForm->throwExceptionIfNotExistsDynaForm($arrayData["PRO_SUMMARY_DYNAFORM"], $processUid, $this->arrayFieldNameForException["processSummaryDynaform"]); } if (isset($arrayData["PRO_DERIVATION_SCREEN_TPL"]) && $arrayData["PRO_DERIVATION_SCREEN_TPL"] . "" != "") { $this->throwExceptionIfNotExistsRoutingScreenTemplate($processUid, $arrayData["PRO_DERIVATION_SCREEN_TPL"], $this->arrayFieldNameForException["processDerivationScreenTpl"]); } $trigger = new \ProcessMaker\BusinessModel\Trigger(); if (isset($arrayData["PRO_TRI_DELETED"]) && $arrayData["PRO_TRI_DELETED"] . "" != "") { $trigger->throwExceptionIfNotExistsTrigger($arrayData["PRO_TRI_DELETED"], $processUid, $this->arrayFieldNameForException["processTriDeleted"]); } if (isset($arrayData["PRO_TRI_CANCELED"]) && $arrayData["PRO_TRI_CANCELED"] . "" != "") { $trigger->throwExceptionIfNotExistsTrigger($arrayData["PRO_TRI_CANCELED"], $processUid, $this->arrayFieldNameForException["processTriCanceled"]); } if (isset($arrayData["PRO_TRI_PAUSED"]) && $arrayData["PRO_TRI_PAUSED"] . "" != "") { $trigger->throwExceptionIfNotExistsTrigger($arrayData["PRO_TRI_PAUSED"], $processUid, $this->arrayFieldNameForException["processTriPaused"]); } if (isset($arrayData["PRO_TRI_REASSIGNED"]) && $arrayData["PRO_TRI_REASSIGNED"] . "" != "") { $trigger->throwExceptionIfNotExistsTrigger($arrayData["PRO_TRI_REASSIGNED"], $processUid, $this->arrayFieldNameForException["processTriReassigned"]); } if (isset($arrayData["PRO_PARENT"])) { $this->throwExceptionIfNotExistsProcess($arrayData["PRO_PARENT"], $this->arrayFieldNameForException["processParent"]); } if (isset($arrayData["PRO_CREATE_USER"]) && $arrayData["PRO_CREATE_USER"] . "" != "") { $this->throwExceptionIfNotExistsUser($arrayData["PRO_CREATE_USER"], $this->arrayFieldNameForException["processCreateUser"]); } //Update $process = new \Process(); $arrayDataBackup = $arrayData; $arrayData["PRO_UID"] = $processUid; if (isset($arrayData["PRO_ASSIGNMENT"])) { $arrayData["PRO_ASSIGNMENT"] = ($arrayData["PRO_ASSIGNMENT"] == 1)? "TRUE" : "FALSE"; } $arrayData["PRO_DYNAFORMS"] = array(); $arrayData["PRO_DYNAFORMS"]["PROCESS"] = (isset($arrayData["PRO_SUMMARY_DYNAFORM"]))? $arrayData["PRO_SUMMARY_DYNAFORM"] : ""; unset($arrayData["PRO_SUMMARY_DYNAFORM"]); $result = $process->update($arrayData); if (isset($arrayData["PRO_CALENDAR"])) { $calendar = new \Calendar(); $calendar->assignCalendarTo($processUid, $arrayData["PRO_CALENDAR"], "PROCESS"); //Save Calendar ID for this process } $arrayData = $arrayDataBackup; //Return if (!$this->formatFieldNameInUppercase) { $arrayData = array_change_key_case($arrayData, CASE_LOWER); } return $arrayData; } catch (\Exception $e) { throw $e; } }
/** * Set values in Trigger fields (TRI_WEBBOT, TRI_PARAM) * * @param string $libraryName Library name * @param string $methodName Method name * @param string $triggerUid Unique id of Trigger * @param array $arrayParamData Data * * return void */ public function setData($libraryName, $methodName, $triggerUid, $arrayParamData) { try { //Verify data $this->throwExceptionIfNotExistsMethodInLibrary($libraryName, $methodName, $this->arrayFieldNameForException["libraryName"], $this->arrayFieldNameForException["methodName"]); $trigger = new \ProcessMaker\BusinessModel\Trigger(); $trigger->throwExceptionIfNotExistsTrigger($triggerUid, "", $this->arrayFieldNameForException["triggerUid"]); //Set variables $arrayMethodInputParam = $this->methodGetInputParams($libraryName, $methodName); $arrayMethodOutputParam = $this->methodGetOutputParams($libraryName, $methodName); $arrayTriggerParam = array(); $arrayScriptMethodParam = array(); $strParamsNamePhp = ""; $strParamsType = ""; $strParamsRequired = ""; //Set variables - Load Trigger $trigger = new \Triggers(); $arrayTriggerData = $trigger->load($triggerUid); $arrayTriggerParam["TRI_UID"] = $triggerUid; $arrayTriggerParam["TRI_TITLE"] = $arrayTriggerData["TRI_TITLE"]; $arrayTriggerParam["TRI_DESCRIPTION"] = $arrayTriggerData["TRI_DESCRIPTION"]; $arrayTriggerParam["TRI_TYPE"] = $arrayTriggerData["TRI_TYPE"]; $arrayTriggerParam["PRO_UID"] = $arrayTriggerData["PRO_UID"]; //Set variables - Input foreach ($arrayMethodInputParam as $key => $value) { $paramName = $value["name"]; $paramType = $value["type"]; $paramRequired = $value["required"]; $paramDefaultValue = isset($value["default_value"]) ? $value["default_value"] : ""; //TRI_PARAM if ($paramType != "array") { $arrayTriggerParam[$paramName] = isset($arrayParamData["input"][$paramName]) ? $arrayParamData["input"][$paramName] : $paramDefaultValue; } else { if (isset($arrayParamData["input"][$paramName])) { if (is_array($arrayParamData["input"][$paramName])) { $strArrayElements = ""; foreach ($arrayParamData["input"][$paramName] as $key2 => $value2) { $strKey = is_string($key2) ? "\"" . $key2 . "\"" : $key2; $strValue = is_string($value2) ? "\"" . str_replace("\"", "\\\"", $value2) . "\"" : $value2; $strArrayElements = $strArrayElements . ($strArrayElements != "" ? ", " : "") . $strKey . " => " . $strValue; } $arrayParamData["input"][$paramName] = "array(" . $strArrayElements . ")"; } $arrayTriggerParam[$paramName] = $arrayParamData["input"][$paramName]; } else { $arrayTriggerParam[$paramName] = $paramDefaultValue; } } //Variables $strParamsNamePhp = $strParamsNamePhp . ($strParamsNamePhp != "" ? "," : "") . "\$" . $paramName; $strParamsType = $strParamsType . ($strParamsType != "" ? "," : "") . $paramType; if ($paramRequired) { $strParamsRequired = $strParamsRequired . ($strParamsRequired != "" ? "," : "") . $paramName; } //Method parameters $paramValue = "\"" . $paramDefaultValue . "\""; if (isset($arrayParamData["input"][$paramName])) { if (preg_match("/^.*@@.*\$/", $arrayParamData["input"][$paramName])) { $paramValue = trim($arrayParamData["input"][$paramName]); } else { switch ($paramType) { case "int": case "integer": $paramValue = intval($arrayParamData["input"][$paramName]); break; case "float": case "real": case "double": $paramValue = floatval($arrayParamData["input"][$paramName]); break; case "bool": case "boolean": $paramValue = 'true'; if ($arrayParamData["input"][$paramName] != '') { $paramValue = $arrayParamData["input"][$paramName]; } break; case "array": $paramValue = trim($arrayParamData["input"][$paramName]); break; case "string": $paramValue = "\"" . str_replace("\"", "\\\"", $arrayParamData["input"][$paramName]) . "\""; break; default: if (is_numeric($arrayParamData["input"][$paramName]) || is_bool($arrayParamData["input"][$paramName]) || preg_match("/^\\s*array\\s*\\(.*\\)\\s*\$/", $arrayParamData["input"][$paramName])) { $paramValue = trim($arrayParamData["input"][$paramName]); } else { $paramValue = "\"" . str_replace("\"", "\\\"", $arrayParamData["input"][$paramName]) . "\""; } break; } } } $arrayScriptMethodParam[] = $paramValue; } //Set variables - Output $varReturn = ""; foreach ($arrayMethodOutputParam as $key => $value) { $paramName = $value["name"]; $paramRequired = $value["required"]; if ($paramRequired && isset($arrayParamData["output"][$paramName]) && trim($arrayParamData["output"][$paramName]) != "") { $arrayTriggerParam[strtoupper($paramName)] = trim($arrayParamData["output"][$paramName]); $strParamsRequired = $strParamsRequired . ($strParamsRequired != "" ? "," : "") . strtoupper($paramName); $varReturn = trim($arrayParamData["output"][$paramName]) . " = "; break; } } //Set data $library = $this->library->getLibraryDefinition($this->libraryGetLibraryName($libraryName)); $method = $library->methods[$methodName]; $strScript = "/*******************************************************"; $strScript = $strScript . "\n" . " *"; $strScript = $strScript . "\n" . " * Generated by ProcessMaker Trigger Wizard"; $strScript = $strScript . "\n" . " * Library: " . trim($library->info["name"]); $strScript = $strScript . "\n" . " * Method: " . trim($method->info["label"]); $strScript = $strScript . "\n" . " * Date: " . date("Y-m-d H:i:s"); $strScript = $strScript . "\n" . " *"; $strScript = $strScript . "\n" . " * ProcessMaker " . date("Y"); $strScript = $strScript . "\n" . " *"; $strScript = $strScript . "\n" . " *******************************************************/"; $strScript = $strScript . "\n"; $strScript = $strScript . "\n" . $varReturn . $methodName . "(" . implode(", ", $arrayScriptMethodParam) . ");"; $arrayTriggerParam["TRI_WEBBOT"] = $strScript; $arrayTriggerParam["__notValidateThisFields__"] = ""; $arrayTriggerParam["DynaformRequiredFields"] = "[]"; $arrayTriggerParam["PAGED_TABLE_ID"] = ""; $arrayTriggerParam["LIBRARY_NAME"] = trim($library->info["name"]); $arrayTriggerParam["LIBRARY_CLASS"] = $this->libraryGetLibraryName($libraryName); $arrayTriggerParam["PMFUNTION_NAME"] = $methodName; $arrayTriggerParam["PMFUNTION_LABEL"] = trim($method->info["label"]); $arrayTriggerParam["ALLFUNCTION"] = $strParamsNamePhp; $arrayTriggerParam["ALLFUNCTION_TYPE"] = $strParamsType; $arrayTriggerParam["FIELDS_REQUIRED"] = $strParamsRequired; //Update $result = $trigger->update(array("TRI_UID" => $triggerUid, "TRI_WEBBOT" => $strScript, "TRI_PARAM" => serialize(array("hash" => md5($strScript), "params" => $arrayTriggerParam)))); } catch (\Exception $e) { throw $e; } }