Example #1
0
    /**
     * 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;
        }
    }
Example #2
0
 /**
  * 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;
     }
 }