/** * Imports a Project sent through the POST method ($_FILES) * * @param array $arrayData Data * @param string $option Option for Project ("CREATE", "OVERWRITE", "DISABLE", "KEEP") * @param string $optionGroup Option for Group ("CREATE", "RENAME", "MERGE") * @param array $arrayFieldName The field's names * * return array Returns the data sent and the unique id of Project */ public function importPostFile(array $arrayData, $option = "CREATE", $optionGroup = "CREATE", array $arrayFieldName = array()) { try { //Set data $arrayFieldName["projectFile"] = (isset($arrayFieldName["projectFile"]))? $arrayFieldName["projectFile"] : "PROJECT_FILE"; $arrayFieldName["option"] = (isset($arrayFieldName["option"]))? $arrayFieldName["option"] : "OPTION"; $arrayFieldName["optionGroup"] = (isset($arrayFieldName["optionGroup"]))? $arrayFieldName["optionGroup"] : "OPTION_GROUP"; $arrayFieldDefinition = array( $arrayFieldName["projectFile"] => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "projectFile") ); $arrayFieldNameForException = $arrayFieldName; if (isset($_FILES[$arrayFieldName["projectFile"]])) { $_FILES["filePmx"] = $_FILES[$arrayFieldName["projectFile"]]; } if (isset($arrayData[$arrayFieldName["projectFile"]]) && isset($arrayData[$arrayFieldName["projectFile"]]["name"]) && is_array($arrayData[$arrayFieldName["projectFile"]]) ) { $arrayData[$arrayFieldName["projectFile"]] = $arrayData[$arrayFieldName["projectFile"]]["name"]; } $optionCaseUpper = (strtoupper($option) == $option)? true : false; $option = strtoupper($option); $optionGroupCaseUpper = (strtoupper($optionGroup) == $optionGroup)? true : false; $optionGroup = strtoupper($optionGroup); //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $arrayFieldDefinition, $arrayFieldNameForException, true); $arrayOptionDefaultValues = array("CREATE", "OVERWRITE", "DISABLE", "KEEP"); $arrayOptionGroupDefaultValues = array("CREATE", "RENAME", "MERGE"); $arrayAux = array( array($option, $arrayOptionDefaultValues, $arrayFieldNameForException["option"], $optionCaseUpper), array($optionGroup, $arrayOptionGroupDefaultValues, $arrayFieldNameForException["optionGroup"], $optionGroupCaseUpper) ); foreach ($arrayAux as $value) { $opt = $value[0]; $arrayDefaultValues = $value[1]; $fieldNameForException = $value[2]; $caseUpper = $value[3]; if ($opt != "") { if (!in_array($opt, $arrayDefaultValues, true)) { $strdv = implode("|", $arrayDefaultValues); throw new \Exception( \G::LoadTranslation( "ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES", array($fieldNameForException, ($caseUpper)? $strdv : strtolower($strdv)) ) ); } } } if ((isset($_FILES["filePmx"]) && pathinfo($_FILES["filePmx"]["name"], PATHINFO_EXTENSION) != "pmx") || (isset($arrayData[$arrayFieldName["projectFile"]]) && pathinfo($arrayData[$arrayFieldName["projectFile"]], PATHINFO_EXTENSION) != "pmx") ) { throw new \Exception(\G::LoadTranslation("ID_IMPORTER_FILE_EXTENSION_IS_NOT_PMX")); } //Set variables $arrayAux = array( (($option != "")? "CREATE" : "") => self::IMPORT_OPTION_CREATE_NEW, "OVERWRITE" => self::IMPORT_OPTION_OVERWRITE, "DISABLE" => self::IMPORT_OPTION_DISABLE_AND_CREATE_NEW, "KEEP" => self::IMPORT_OPTION_KEEP_WITHOUT_CHANGING_AND_CREATE_NEW ); $option = $arrayAux[$option]; $arrayAux = array( (($optionGroup != "")? "CREATE" : "") => self::GROUP_IMPORT_OPTION_CREATE_NEW, "RENAME" => self::GROUP_IMPORT_OPTION_RENAME, "MERGE" => self::GROUP_IMPORT_OPTION_MERGE_PREEXISTENT ); $optionGroup = $arrayAux[$optionGroup]; if (isset($_FILES["filePmx"])) { $this->setSourceFromGlobals("filePmx"); } else { $filePmx = rtrim($this->getSaveDir(), PATH_SEP) . PATH_SEP . $arrayData[$arrayFieldName["projectFile"]]; if (isset($arrayData[$arrayFieldName["projectFile"]]) && file_exists($filePmx)) { $this->setSourceFile($filePmx); } else { throw new \Exception(\G::LoadTranslation("ID_IMPORTER_FILE_DOES_NOT_EXIST", array($arrayFieldNameForException["projectFile"], $arrayData[$arrayFieldName["projectFile"]]))); } } //Import try { $projectUid = $this->import($option, $optionGroup); $arrayData = array_merge(array("PRJ_UID" => $projectUid), $arrayData); } catch (\Exception $e) { $strOpt = implode("|", $arrayOptionDefaultValues); $strOptg = implode("|", $arrayOptionGroupDefaultValues); $strOpt = ($optionCaseUpper)? $strOpt : strtolower($strOpt); $strOptg = ($optionGroupCaseUpper)? $strOptg : strtolower($strOptg); $msg = str_replace( array( self::IMPORT_OPTION_CREATE_NEW, self::IMPORT_OPTION_OVERWRITE, self::IMPORT_OPTION_DISABLE_AND_CREATE_NEW, self::IMPORT_OPTION_KEEP_WITHOUT_CHANGING_AND_CREATE_NEW, self::GROUP_IMPORT_OPTION_CREATE_NEW, self::GROUP_IMPORT_OPTION_RENAME, self::GROUP_IMPORT_OPTION_MERGE_PREEXISTENT ), array_merge(explode("|", $strOpt), explode("|", $strOptg)), $e->getMessage() ); throw new \Exception($msg); } //Return if ($arrayFieldName["projectFile"] != strtoupper($arrayFieldName["projectFile"])) { $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; } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $messageEventDefinitionUid Unique id of Message-Event-Definition * @param string $projectUid Unique id of Project * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($messageEventDefinitionUid, $projectUid, array $arrayData) { try { //Set variables $arrayMessageEventDefinitionData = $messageEventDefinitionUid == "" ? array() : $this->getMessageEventDefinition($messageEventDefinitionUid, true); $flagInsert = $messageEventDefinitionUid == "" ? true : false; $arrayFinalData = array_merge($arrayMessageEventDefinitionData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $messageType = new \ProcessMaker\BusinessModel\MessageType(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //Verify data if (isset($arrayData["EVN_UID"])) { $this->throwExceptionIfEventIsRegistered($projectUid, $arrayData["EVN_UID"], $this->arrayFieldNameForException["eventUid"], $messageEventDefinitionUid); } if (isset($arrayData["EVN_UID"])) { $arrayEventType = array("START", "END", "INTERMEDIATE"); $arrayEventMarker = array("MESSAGETHROW", "MESSAGECATCH"); $bpmnEvent = \BpmnEventPeer::retrieveByPK($arrayData["EVN_UID"]); if (is_null($bpmnEvent)) { throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_EXIST", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"]))); } if (!in_array($bpmnEvent->getEvnType(), $arrayEventType) || !in_array($bpmnEvent->getEvnMarker(), $arrayEventMarker)) { throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_IS_MESSAGE_EVENT", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"]))); } } if (isset($arrayData["MSGT_UID"]) && $arrayData["MSGT_UID"] . "" != "") { $messageType->throwExceptionIfNotExistsMessageType($arrayData["MSGT_UID"], $this->arrayFieldNameForException["messageTypeUid"]); } $flagCheckData = false; $flagCheckData = isset($arrayData["MSGT_UID"]) && $arrayData["MSGT_UID"] . "" != "" ? true : $flagCheckData; $flagCheckData = isset($arrayData["MSGED_VARIABLES"]) ? true : $flagCheckData; if (isset($arrayFinalData["MSGT_UID"]) && $arrayFinalData["MSGT_UID"] . "" != "" && $flagCheckData) { $arrayMessageTypeVariable = array(); $arrayMessageTypeData = $messageType->getMessageType($arrayFinalData["MSGT_UID"], true); foreach ($arrayMessageTypeData["MSGT_VARIABLES"] as $value) { $arrayMessageTypeVariable[$value["MSGTV_NAME"]] = $value["MSGTV_DEFAULT_VALUE"]; } if (count($arrayMessageTypeVariable) != count($arrayFinalData["MSGED_VARIABLES"]) || count(array_diff_key($arrayMessageTypeVariable, $arrayFinalData["MSGED_VARIABLES"])) > 0) { throw new \Exception(\G::LoadTranslation("ID_MESSAGE_EVENT_DEFINITION_VARIABLES_DO_NOT_MEET_DEFINITION")); } } } catch (\Exception $e) { throw $e; } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $scriptTaskUid Unique id of Script-Task * @param string $projectUid Unique id of Project * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($scriptTaskUid, $projectUid, array $arrayData) { try { //Set variables $arrayScriptTaskData = $scriptTaskUid == "" ? array() : $this->getScriptTask($scriptTaskUid, true); $flagInsert = $scriptTaskUid == "" ? true : false; $arrayFinalData = array_merge($arrayScriptTaskData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //--- if (isset($arrayData["ACT_UID"])) { $obj = \BpmnActivityPeer::retrieveByPK($arrayData["ACT_UID"]); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_DOES_NOT_ACTIVITY", array($this->arrayFieldNameForException["actUid"], $arrayData["ACT_UID"]))); } } //--- if (isset($arrayData["SCRTAS_OBJ_UID"])) { $obj = \TriggersPeer::retrieveByPK($arrayData["SCRTAS_OBJ_UID"]); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_DOES_NOT_TRIGGER", array($this->arrayFieldNameForException["scrtasObjUid"], $arrayData["SCRTAS_OBJ_UID"]))); } } //--- if (isset($arrayData["ACT_UID"])) { $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\BpmnActivityPeer::ACT_UID); $criteria->add(\BpmnActivityPeer::ACT_UID, $arrayData["ACT_UID"], \Criteria::EQUAL); $criteria->add(\BpmnActivityPeer::PRJ_UID, $projectUid, \Criteria::EQUAL); $rsCriteria = \BpmnActivityPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); if (!$rsCriteria->next()) { throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_ACTIVITY_NOT_BELONG_TO_PROJECT", array($arrayData["ACT_UID"], $projectUid))); } } //--- if (isset($arrayData["SCRTAS_OBJ_UID"])) { $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\TriggersPeer::TRI_UID); $criteria->add(\TriggersPeer::TRI_UID, $arrayData["SCRTAS_OBJ_UID"], \Criteria::EQUAL); $criteria->add(\TriggersPeer::PRO_UID, $projectUid, \Criteria::EQUAL); $rsCriteria = \TriggersPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); if (!$rsCriteria->next()) { throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_TRIGGER_NOT_BELONG_TO_PROJECT", array($arrayData["SCRTAS_OBJ_UID"], $projectUid))); } } //--- $obj = \BpmnActivityPeer::retrieveByPK($arrayFinalData["ACT_UID"]); if ($obj->getActTaskType() != "SCRIPTTASK") { throw new \Exception(\G::LoadTranslation("ID_SCRIPT_TASK_TYPE_ACTIVITY_NOT_IS_SCRIPTTASK", array($this->arrayFieldNameForException["actUid"], $arrayData["ACT_UID"]))); } } catch (\Exception $e) { throw $e; } }
/** * Update Group * * @param string $groupUid Unique id of Group * @param array $arrayData Data * * return array Return data of the Group updated */ public function update($groupUid, $arrayData) { try { $arrayData = array_change_key_case($arrayData, CASE_UPPER); //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $this->throwExceptionIfNotExistsGroup($groupUid, $this->arrayFieldNameForException["groupUid"]); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, false); if (isset($arrayData["GRP_TITLE"])) { $this->throwExceptionIfExistsTitle($arrayData["GRP_TITLE"], $this->arrayFieldNameForException["groupTitle"], $groupUid); } //Update $group = new \Groupwf(); $arrayData["GRP_UID"] = $groupUid; $result = $group->update($arrayData); //Return unset($arrayData["GRP_UID"]); if (!$this->formatFieldNameInUppercase) { $arrayData = array_change_key_case($arrayData, CASE_LOWER); } return $arrayData; } catch (\Exception $e) { throw $e; } }
/** * Update InputDocument * * @param string $inputDocumentUid Unique id of InputDocument * @param array $arrayData Data * * return array Return data of the InputDocument updated */ public function update($inputDocumentUid, $arrayData) { try { $arrayData = array_change_key_case($arrayData, CASE_UPPER); //Verify data $this->throwExceptionIfNotExistsInputDocument($inputDocumentUid, "", $this->arrayFieldNameForException["inputDocumentUid"]); //Load InputDocument $inputDocument = new \InputDocument(); $arrayInputDocumentData = $inputDocument->load($inputDocumentUid); $processUid = $arrayInputDocumentData["PRO_UID"]; //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, false); if (isset($arrayData["INP_DOC_TITLE"])) { $this->throwExceptionIfExistsTitle($processUid, $arrayData["INP_DOC_TITLE"], $this->arrayFieldNameForException["inputDocumentTitle"], $inputDocumentUid); } //Update $arrayData["INP_DOC_UID"] = $inputDocumentUid; $result = $inputDocument->update($arrayData); \G::LoadClass('pmDynaform'); $pmDynaform = new \pmDynaform(); $pmDynaform->synchronizeInputDocument($processUid, $arrayData); //Return unset($arrayData["INP_DOC_UID"]); 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 $webEntryEventUid Unique id of WebEntry-Event * @param string $projectUid Unique id of Project * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($webEntryEventUid, $projectUid, array $arrayData) { try { //Set variables $arrayWebEntryEventData = $webEntryEventUid == "" ? array() : $this->getWebEntryEvent($webEntryEventUid, true); $flagInsert = $webEntryEventUid == "" ? true : false; $arrayFinalData = array_merge($arrayWebEntryEventData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //Verify data if (isset($arrayData["EVN_UID"])) { $this->throwExceptionIfEventIsRegistered($projectUid, $arrayData["EVN_UID"], $this->arrayFieldNameForException["eventUid"], $webEntryEventUid); } if (isset($arrayData["EVN_UID"])) { $obj = \BpmnEventPeer::retrieveByPK($arrayData["EVN_UID"]); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_EXIST", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"]))); } if ($obj->getEvnType() != "START" || $obj->getEvnType() == "START" && $obj->getEvnMarker() != "EMPTY") { throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_IS_START_EVENT", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"]))); } } if (isset($arrayData["WEE_TITLE"])) { $this->throwExceptionIfExistsTitle($projectUid, $arrayData["WEE_TITLE"], $this->arrayFieldNameForException["webEntryEventTitle"], $webEntryEventUid); } if (isset($arrayData["ACT_UID"])) { $bpmn = new \ProcessMaker\Project\Bpmn(); if (!$bpmn->activityExists($arrayData["ACT_UID"])) { throw new \Exception(\G::LoadTranslation("ID_ACTIVITY_DOES_NOT_EXIST", array($this->arrayFieldNameForException["activityUid"], $arrayData["ACT_UID"]))); } } if (isset($arrayData["EVN_UID"]) || isset($arrayData["ACT_UID"])) { $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\BpmnFlowPeer::FLO_UID); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_ORIGIN, $arrayFinalData["EVN_UID"], \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE, "bpmnEvent", \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_DEST, $arrayFinalData["ACT_UID"], \Criteria::EQUAL); $criteria->add(\BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE, "bpmnActivity", \Criteria::EQUAL); $rsCriteria = \BpmnFlowPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { throw new \Exception(\G::LoadTranslation("ID_WEB_ENTRY_EVENT_FLOW_EVENT_TO_ACTIVITY_DOES_NOT_EXIST")); } } if (isset($arrayData["DYN_UID"])) { $dynaForm = new \ProcessMaker\BusinessModel\DynaForm(); $dynaForm->throwExceptionIfNotExistsDynaForm($arrayData["DYN_UID"], $projectUid, $this->arrayFieldNameForException["dynaFormUid"]); } if (isset($arrayData["USR_UID"])) { $process->throwExceptionIfNotExistsUser($arrayData["USR_UID"], $this->arrayFieldNameForException["userUid"]); } } catch (\Exception $e) { throw $e; } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $userUid Unique id of User * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($userUid, array $arrayData) { try { //Set variables $arrayUserData = ($userUid == "")? array() : $this->getUser($userUid, true); $flagInsert = ($userUid == "")? true : false; $arrayFinalData = array_merge($arrayUserData, $arrayData); //Verify data - Field definition. $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //Verify data if (isset($arrayData["USR_USERNAME"])) { $this->throwExceptionIfExistsName($arrayData["USR_USERNAME"], $this->arrayFieldNameForException["usrUsername"], $userUid); } if (isset($arrayData["USR_EMAIL"])) { if (!filter_var($arrayData["USR_EMAIL"], FILTER_VALIDATE_EMAIL)) { throw new \Exception($this->arrayFieldNameForException["usrEmail"] . ": " . \G::LoadTranslation("ID_INCORRECT_EMAIL")); } } if (isset($arrayData["USR_NEW_PASS"])) { $this->throwExceptionIfPasswordIsInvalid($arrayData["USR_NEW_PASS"], $this->arrayFieldNameForException["usrNewPass"]); } if (isset($arrayData["USR_REPLACED_BY"]) && $arrayData["USR_REPLACED_BY"] != "") { $obj = \UsersPeer::retrieveByPK($arrayData["USR_REPLACED_BY"]); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_USER_DOES_NOT_EXIST", array($this->arrayFieldNameForException["usrReplacedBy"], $arrayData["USR_REPLACED_BY"]))); } } if (isset($arrayData["USR_DUE_DATE"])) { $arrayUserDueDate = explode("-", $arrayData["USR_DUE_DATE"]); if (ctype_digit($arrayUserDueDate[0])) { if (!checkdate($arrayUserDueDate[1], $arrayUserDueDate[2], $arrayUserDueDate[0])) { throw new \Exception($this->arrayFieldNameForException["usrDueDate"] . ": " . \G::LoadTranslation("ID_MSG_ERROR_DUE_DATE")); } } else { throw new \Exception($this->arrayFieldNameForException["usrDueDate"] . ": " . \G::LoadTranslation("ID_MSG_ERROR_DUE_DATE")); } } if (isset($arrayData["USR_ROLE"])) { require_once (PATH_RBAC_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "Roles.php"); $criteria = new \Criteria("rbac"); $criteria->add(\RolesPeer::ROL_CODE, $arrayData["USR_ROLE"]); $rsCriteria = \RolesPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrRole"]))); } } if (isset($arrayData["USR_COUNTRY"]) && $arrayData["USR_COUNTRY"] != "") { $obj = \IsoCountryPeer::retrieveByPK($arrayData["USR_COUNTRY"]); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrCountry"]))); } } if (isset($arrayData["USR_CITY"]) && $arrayData["USR_CITY"] != "") { if (!isset($arrayFinalData["USR_COUNTRY"]) || $arrayFinalData["USR_COUNTRY"] == "") { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrCountry"]))); } $obj = \IsoSubdivisionPeer::retrieveByPK($arrayFinalData["USR_COUNTRY"], $arrayData["USR_CITY"]); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrCity"]))); } } if (isset($arrayData["USR_LOCATION"]) && $arrayData["USR_LOCATION"] != "") { if (!isset($arrayFinalData["USR_COUNTRY"]) || $arrayFinalData["USR_COUNTRY"] == "") { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrCountry"]))); } $obj = \IsoLocationPeer::retrieveByPK($arrayFinalData["USR_COUNTRY"], $arrayData["USR_LOCATION"]); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($this->arrayFieldNameForException["usrLocation"]))); } } if (isset($arrayData["USR_CALENDAR"]) && $arrayData["USR_CALENDAR"] != "") { $obj = \CalendarDefinitionPeer::retrieveByPK($arrayData["USR_CALENDAR"]); if (is_null($obj)) { throw new \Exception(\G::LoadTranslation("ID_CALENDAR_DOES_NOT_EXIST", array($this->arrayFieldNameForException["usrCalendar"], $arrayData["USR_CALENDAR"]))); } } if (isset($arrayData["DEP_UID"]) && $arrayData["DEP_UID"] != "") { $department = new \Department(); if (!$department->existsDepartment($arrayData["DEP_UID"])) { throw new \Exception(\G::LoadTranslation("ID_DEPARTMENT_NOT_EXIST", array($this->arrayFieldNameForException["depUid"], $arrayData["DEP_UID"]))); } } } catch (\Exception $e) { throw $e; } }
/** * Update Calendar * * @param string $calendarUid Unique id of Calendar * @param array $arrayData Data * * return array Return data of the Calendar updated */ public function update($calendarUid, $arrayData) { try { //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = \G::array_change_key_case2($arrayData, CASE_UPPER); //Verify data $this->throwExceptionIfNotExistsCalendar($calendarUid, $this->arrayFieldNameForException["calendarUid"]); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, false); if (isset($arrayData["CAL_NAME"])) { $this->throwExceptionIfExistsName($arrayData["CAL_NAME"], $this->arrayFieldNameForException["calendarName"], $calendarUid); } if (isset($arrayData["CAL_WORK_DAYS"]) && count($arrayData["CAL_WORK_DAYS"]) < 3) { throw new \Exception(\G::LoadTranslation("ID_MOST_AT_LEAST_3_DAY")); } if (isset($arrayData["CAL_WORK_HOUR"])) { foreach ($arrayData["CAL_WORK_HOUR"] as $value) { $process->throwExceptionIfDataNotMetFieldDefinition($value, $this->arrayWorkHourFieldDefinition, $this->arrayWorkHourFieldNameForException, true); } } if (isset($arrayData["CAL_HOLIDAY"])) { foreach ($arrayData["CAL_HOLIDAY"] as $value) { $process->throwExceptionIfDataNotMetFieldDefinition($value, $this->arrayHolidayFieldDefinition, $this->arrayHolidayFieldNameForException, true); } } //Set variables $arrayCalendarData = \G::array_change_key_case2($this->getCalendar($calendarUid), CASE_UPPER); $calendarWorkDays = isset($arrayData["CAL_WORK_DAYS"]) ? $arrayData["CAL_WORK_DAYS"] : array_keys($arrayCalendarData["CAL_WORK_DAYS"]); $arrayCalendarWorkHour = array(); $arrayAux = isset($arrayData["CAL_WORK_HOUR"]) ? $arrayData["CAL_WORK_HOUR"] : $arrayCalendarData["CAL_WORK_HOUR"]; foreach ($arrayAux as $value) { if (isset($arrayData["CAL_WORK_HOUR"]) && $value["DAY"] != 0 && !in_array($value["DAY"], $calendarWorkDays, true)) { throw new \Exception(\G::LoadTranslation("ID_VALUE_SPECIFIED_DOES_NOT_EXIST", array($this->arrayWorkHourFieldNameForException["day"], $this->arrayFieldNameForException["calendarWorkDays"]))); } $arrayCalendarWorkHour[] = array("CALENDAR_BUSINESS_DAY" => $this->workDaysTransformData($value["DAY"]), "CALENDAR_BUSINESS_START" => $value["HOUR_START"], "CALENDAR_BUSINESS_END" => $value["HOUR_END"]); } $arrayCalendarHoliday = array(); $arrayAux = isset($arrayData["CAL_HOLIDAY"]) ? $arrayData["CAL_HOLIDAY"] : $arrayCalendarData["CAL_HOLIDAY"]; foreach ($arrayAux as $value) { $arrayCalendarHoliday[] = array("CALENDAR_HOLIDAY_NAME" => $value["NAME"], "CALENDAR_HOLIDAY_START" => $value["DATE_START"], "CALENDAR_HOLIDAY_END" => $value["DATE_END"]); } $arrayDataAux = array(); $arrayDataAux["CALENDAR_UID"] = $calendarUid; $arrayDataAux["CALENDAR_NAME"] = isset($arrayData["CAL_NAME"]) ? $arrayData["CAL_NAME"] : $arrayCalendarData["CAL_NAME"]; $arrayDataAux["CALENDAR_DESCRIPTION"] = isset($arrayData["CAL_DESCRIPTION"]) ? $arrayData["CAL_DESCRIPTION"] : $arrayCalendarData["CAL_DESCRIPTION"]; $arrayDataAux["CALENDAR_WORK_DAYS"] = $this->workDaysTransformData($calendarWorkDays); $arrayDataAux["CALENDAR_STATUS"] = isset($arrayData["CAL_STATUS"]) ? $arrayData["CAL_STATUS"] : $arrayCalendarData["CAL_STATUS"]; $arrayDataAux["BUSINESS_DAY"] = $arrayCalendarWorkHour; $arrayDataAux["HOLIDAY"] = $arrayCalendarHoliday; //Update $calendarDefinition = new \CalendarDefinition(); $calendarDefinition->saveCalendarInfo($arrayDataAux); //Return if (!$this->formatFieldNameInUppercase) { $arrayData = \G::array_change_key_case2($arrayData, CASE_LOWER); } return $arrayData; } catch (\Exception $e) { throw $e; } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $messageEventRelationUid Unique id of Message-Event-Relation * @param string $projectUid Unique id of Project * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($messageEventRelationUid, $projectUid, array $arrayData) { try { //Set variables $arrayMessageEventRelationData = $messageEventRelationUid == "" ? array() : $this->getMessageEventRelation($messageEventRelationUid, true); $flagInsert = $messageEventRelationUid == "" ? true : false; $arrayFinalData = array_merge($arrayMessageEventRelationData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //Verify data if (isset($arrayData["EVN_UID_THROW"]) || isset($arrayData["EVN_UID_CATCH"])) { $this->throwExceptionIfEventRelationIsRegistered($projectUid, $arrayFinalData["EVN_UID_THROW"], $arrayFinalData["EVN_UID_CATCH"], $messageEventRelationUid); } if (isset($arrayData["EVN_UID_THROW"]) || isset($arrayData["EVN_UID_CATCH"])) { //Flow $bpmnFlow = \BpmnFlow::findOneBy(array(\BpmnFlowPeer::FLO_TYPE => "MESSAGE", \BpmnFlowPeer::FLO_ELEMENT_ORIGIN => $arrayFinalData["EVN_UID_THROW"], \BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE => "bpmnEvent", \BpmnFlowPeer::FLO_ELEMENT_DEST => $arrayFinalData["EVN_UID_CATCH"], \BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE => "bpmnEvent")); if (is_null($bpmnFlow)) { throw new \Exception(\G::LoadTranslation("ID_MESSAGE_EVENT_RELATION_DOES_NOT_EXIST_MESSAGE_FLOW", array($this->arrayFieldNameForException["eventUidThrow"], $arrayFinalData["EVN_UID_THROW"], $this->arrayFieldNameForException["eventUidCatch"], $arrayFinalData["EVN_UID_CATCH"]))); } //Check and validate Message Flow $bpmn = new \ProcessMaker\Project\Bpmn(); $bpmn->throwExceptionFlowIfIsAnInvalidMessageFlow(array("FLO_TYPE" => "MESSAGE", "FLO_ELEMENT_ORIGIN" => $arrayFinalData["EVN_UID_THROW"], "FLO_ELEMENT_ORIGIN_TYPE" => "bpmnEvent", "FLO_ELEMENT_DEST" => $arrayFinalData["EVN_UID_CATCH"], "FLO_ELEMENT_DEST_TYPE" => "bpmnEvent")); } } catch (\Exception $e) { throw $e; } }
/** * Get all Permissions of a Role * * @param string $roleUid Unique id of Role * @param string $option Option (PERMISSIONS, AVAILABLE-PERMISSIONS) * @param array $arrayFilterData Data of the filters * @param string $sortField Field name to sort * @param string $sortDir Direction of sorting (ASC, DESC) * @param int $start Start * @param int $limit Limit * * return array Return an array with all Permissions of a Role */ public function getPermissions($roleUid, $option, array $arrayFilterData = null, $sortField = null, $sortDir = null, $start = null, $limit = null) { try { $arrayPermission = array(); //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $role = new \ProcessMaker\BusinessModel\Role(); $role->throwExceptionIfNotExistsRole($roleUid, $this->arrayFieldNameForException["roleUid"]); $process->throwExceptionIfDataNotMetFieldDefinition(array("OPTION" => $option), array("OPTION" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("PERMISSIONS", "AVAILABLE-PERMISSIONS"), "fieldNameAux" => "option")), array("option" => "\$option"), true); $process->throwExceptionIfDataNotMetPagerVarDefinition(array("start" => $start, "limit" => $limit), $this->arrayFieldNameForException); //Get data if (!is_null($limit) && $limit . "" == "0") { return $arrayPermission; } //Set variables $rolePermission = new \RolesPermissions(); //SQL switch ($option) { case "PERMISSIONS": //Criteria $criteria = $this->getPermissionCriteria($roleUid); break; case "AVAILABLE-PERMISSIONS": //Get Uids $arrayUid = array(); $criteria = $this->getPermissionCriteria($roleUid); $rsCriteria = \PermissionsPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $arrayUid[] = $row["PER_UID"]; } //Criteria $criteria = $this->getPermissionCriteria("", $arrayUid); break; } if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) && trim($arrayFilterData["filter"]) != "") { $criteria->add(\PermissionsPeer::PER_CODE, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE); } //SQL if (!is_null($sortField) && trim($sortField) != "") { $sortField = strtoupper($sortField); if (in_array($sortField, array("PER_UID", "PER_CODE"))) { $sortField = \PermissionsPeer::TABLE_NAME . "." . $sortField; } else { $sortField = \PermissionsPeer::PER_CODE; } } else { $sortField = \PermissionsPeer::PER_CODE; } if (!is_null($sortDir) && trim($sortDir) != "" && strtoupper($sortDir) == "DESC") { $criteria->addDescendingOrderByColumn($sortField); } else { $criteria->addAscendingOrderByColumn($sortField); } if (!is_null($start)) { $criteria->setOffset((int) $start); } if (!is_null($limit)) { $criteria->setLimit((int) $limit); } $rsCriteria = \PermissionsPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $rolePermission->setPerUid($row["PER_UID"]); $row["PER_NAME"] = $rolePermission->getPermissionName(); $arrayPermission[] = $this->getPermissionDataFromRecord($row); } //Return return $arrayPermission; } catch (\Exception $e) { throw $e; } }
/** * Assign User to Department * * @param string $departmentUid Unique id of Department * @param array $arrayData Data * * return array Return data of the User assigned to Department */ public function assignUser($departmentUid, array $arrayData) { try { //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $validator = new \ProcessMaker\BusinessModel\Validator(); $validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData"); $validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData"); //Set data $arrayData = array_change_key_case($arrayData, CASE_UPPER); unset($arrayData["DEP_UID"]); //Set variables $arrayUserFieldDefinition = array("DEP_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "departmentUid"), "USR_UID" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "userUid")); $arrayUserFieldNameForException = array("departmentUid" => strtolower("DEP_UID"), "userUid" => strtolower("USR_UID")); //Verify data $departmentUid = \ProcessMaker\BusinessModel\Validator::depUid($departmentUid); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $arrayUserFieldDefinition, $arrayUserFieldNameForException, true); $process->throwExceptionIfNotExistsUser($arrayData["USR_UID"], $arrayUserFieldNameForException["userUid"]); //Assign User $department = new \Department(); $department->load($departmentUid); $department->addUserToDepartment($departmentUid, $arrayData["USR_UID"], $department->getDepManager() == "" ? true : false, false); $department->updateDepartmentManager($departmentUid); //Return $arrayData = array_merge(array("DEP_UID" => $departmentUid), $arrayData); $arrayData = array_change_key_case($arrayData, CASE_LOWER); return $arrayData; } catch (\Exception $e) { throw $e; } }
/** * Update Trigger * * @param string $libraryName Library name * @param string $methodName Method name * @param string $triggerUid Unique id of Trigger * @param array $arrayData Data * * return array Return data of the Trigger updated */ public function update($libraryName, $methodName, $triggerUid, $arrayData) { try { $arrayData = array_change_key_case($arrayData, CASE_UPPER); //Verify data $this->throwExceptionIfLibraryAndMethodIsInvalidForTrigger($libraryName, $methodName, $triggerUid, $this->arrayFieldNameForException["libraryName"], $this->arrayFieldNameForException["methodName"], $this->arrayFieldNameForException["triggerUid"]); //Load Trigger $trigger = new \Triggers(); $arrayTriggerData = $trigger->load($triggerUid); $processUid = $arrayTriggerData["PRO_UID"]; //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $trigger = new \ProcessMaker\BusinessModel\Trigger(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, false); if (isset($arrayData["TRI_PARAMS"])) { $arrayParamData = $this->throwExceptionIfDataNotMetTriggerParamsDefinition($libraryName, $methodName, $arrayData, $this->arrayFieldNameForException["libraryName"], $this->arrayFieldNameForException["methodName"], $this->arrayFieldNameForException["triggerParams"]); } if (isset($arrayData["TRI_TITLE"])) { $trigger->throwExceptionIfExistsTitle($processUid, $arrayData["TRI_TITLE"], $this->arrayFieldNameForException["triggerTitle"], $triggerUid); } //TRI_PARAMS if (isset($arrayData["TRI_PARAMS"])) { $arrayData["TRI_PARAMS"] = array_change_key_case($arrayData["TRI_PARAMS"], CASE_UPPER); } //Update $trigger = new \Triggers(); $arrayData["TRI_UID"] = $triggerUid; $result = $trigger->update($arrayData); if (isset($arrayData["TRI_PARAMS"])) { $this->setData($libraryName, $methodName, $triggerUid, $arrayParamData); } //Return unset($arrayData["TRI_UID"]); if (!$this->formatFieldNameInUppercase) { if (isset($arrayData["TRI_PARAMS"])) { $arrayData["TRI_PARAMS"] = array_change_key_case($arrayData["TRI_PARAMS"], CASE_LOWER); } $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 $roleUid Unique id of Role * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($roleUid, array $arrayData) { try { //Set variables $arrayRoleData = $roleUid == "" ? array() : $this->getRole($roleUid, true); $flagInsert = $roleUid == "" ? true : false; $arrayDataMain = array_merge($arrayRoleData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //Verify data if (isset($arrayData["ROL_CODE"]) && !preg_match("/^\\w+\$/", $arrayData["ROL_CODE"])) { throw new \Exception(\G::LoadTranslation("ID_ROLE_FIELD_CANNOT_CONTAIN_SPECIAL_CHARACTERS", array($this->arrayFieldNameForException["roleCode"]))); } if (isset($arrayData["ROL_CODE"])) { $this->throwExceptionIfExistsCode($arrayData["ROL_CODE"], $arrayDataMain["ROL_SYSTEM"], $this->arrayFieldNameForException["roleCode"], $roleUid); } if (isset($arrayData["ROL_NAME"])) { $this->throwExceptionIfExistsName($arrayData["ROL_NAME"], $arrayDataMain["ROL_SYSTEM"], $this->arrayFieldNameForException["roleName"], $roleUid); } } catch (\Exception $e) { throw $e; } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $emailServerUid Unique id of Email Server * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($emailServerUid, array $arrayData) { try { //Set variables $arrayEmailServerData = $emailServerUid == "" ? array() : $this->getEmailServer($emailServerUid, true); $flagInsert = $emailServerUid == "" ? true : false; $arrayFinalData = array_merge($arrayEmailServerData, $arrayData); //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $arrayFieldDefinition = $this->arrayFieldDefinition; switch ($arrayFinalData["MESS_ENGINE"]) { case "PHPMAILER": $arrayFieldDefinition["MESS_SERVER"]["required"] = true; $arrayFieldDefinition["MESS_SERVER"]["empty"] = false; $arrayFieldDefinition["MESS_PORT"]["required"] = true; $arrayFieldDefinition["MESS_PORT"]["empty"] = false; $arrayFieldDefinition["MESS_ACCOUNT"]["required"] = true; $arrayFieldDefinition["MESS_ACCOUNT"]["empty"] = false; $arrayFieldDefinition["SMTPSECURE"]["required"] = true; $arrayFieldDefinition["SMTPSECURE"]["empty"] = false; if ((int) $arrayFinalData["MESS_RAUTH"] == 1) { $arrayFieldDefinition["MESS_PASSWORD"]["required"] = true; $arrayFieldDefinition["MESS_PASSWORD"]["empty"] = false; } break; case "MAIL": $arrayFieldDefinition["SMTPSECURE"]["empty"] = true; $arrayFieldDefinition["SMTPSECURE"]["defaultValues"] = array(); break; } if ((int) $arrayFinalData["MESS_TRY_SEND_INMEDIATLY"] == 1) { $arrayFieldDefinition["MAIL_TO"]["required"] = true; $arrayFieldDefinition["MAIL_TO"]["empty"] = false; } $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); if ($flagInsert == false) { //Update $process->throwExceptionIfDataNotMetFieldDefinition($arrayFinalData, $arrayFieldDefinition, $this->arrayFieldNameForException, true); } //Verify data Test Connection if (isset($_SERVER["SERVER_NAME"])) { $arrayTestConnectionResult = $this->testConnection($arrayFinalData); $msg = ""; foreach ($arrayTestConnectionResult as $key => $value) { $arrayTest = $value; if (!$arrayTest["result"]) { $msg = $msg . ($msg != "" ? ", " : "") . $arrayTest["title"] . " (Error: " . $arrayTest["message"] . ")"; } } if ($msg != "") { throw new \Exception($msg); } } } catch (\Exception $e) { throw $e; } }
/** * Create a Dynaform based on a PMTable * * @param string $processUid Unique id of Process * @param array $arrayData Data * * return array Return data of the new DynaForm created */ public function createBasedPmTable($processUid, $arrayData) { try { $arrayData = \G::array_change_key_case2($arrayData, CASE_UPPER); unset($arrayData["DYN_UID"]); unset($arrayData["COPY_IMPORT"]); //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfNotExistsProcess($processUid, $this->arrayFieldNameForException["processUid"]); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, true); if ($arrayData["DYN_TYPE"] == "grid") { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES", array($this->arrayFieldNameForException["dynaFormType"], "xmlform"))); } if (!isset($arrayData["PMTABLE"])) { throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->getFieldNameByFormatFieldName("PMTABLE")))); } if (!isset($arrayData["PMTABLE"]["TAB_UID"])) { throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->getFieldNameByFormatFieldName("PMTABLE.TAB_UID")))); } $arrayData["PMTABLE"]["TAB_UID"] = trim($arrayData["PMTABLE"]["TAB_UID"]); if ($arrayData["PMTABLE"]["TAB_UID"] == "") { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->getFieldNameByFormatFieldName("PMTABLE.TAB_UID")))); } if (!isset($arrayData["PMTABLE"]["FIELDS"])) { throw new \Exception(\G::LoadTranslation("ID_UNDEFINED_VALUE_IS_REQUIRED", array($this->getFieldNameByFormatFieldName("PMTABLE.FIELDS")))); } if (count($arrayData["PMTABLE"]["FIELDS"]) == 0) { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_CAN_NOT_BE_EMPTY", array($this->getFieldNameByFormatFieldName("PMTABLE.FIELDS")))); } $this->throwExceptionIfExistsTitle($processUid, $arrayData["DYN_TITLE"], $this->arrayFieldNameForException["dynaFormTitle"]); $process->throwExceptionIfNotExistsPmTable($arrayData["PMTABLE"]["TAB_UID"], $this->getFieldNameByFormatFieldName("PMTABLE.TAB_UID")); //Validate PMTABLE.FIELDS //Valid Keys $flagValidFieldKey = 1; foreach ($arrayData["PMTABLE"]["FIELDS"] as $key => $value) { if (!isset($value["FLD_NAME"]) || !isset($value["PRO_VARIABLE"])) { $flagValidFieldKey = 0; break; } } if ($flagValidFieldKey == 0) { throw new \Exception(\G::LoadTranslation("ID_ATTRIBUTE_HAS_INVALID_ELEMENT_KEY", array($this->getFieldNameByFormatFieldName("PMTABLE.FIELDS")))); } //Is Primary Key $arrayFieldPk = $process->getPmTablePrimaryKeyFields($arrayData["PMTABLE"]["TAB_UID"], $this->getFieldNameByFormatFieldName("PMTABLE.TAB_UID")); $flagValidFieldPk = 1; $invalidFieldPk = ""; $arrayFieldPkAux = array(); foreach ($arrayData["PMTABLE"]["FIELDS"] as $key => $value) { $arrayFieldPkAux[] = $value["FLD_NAME"]; if (!in_array($value["FLD_NAME"], $arrayFieldPk)) { $flagValidFieldPk = 0; $invalidFieldPk = $value["FLD_NAME"]; break; } } if ($flagValidFieldPk == 0) { throw new \Exception(\G::LoadTranslation("ID_PMTABLE_FIELD_IS_NOT_PRIMARY_KEY", array($this->getFieldNameByFormatFieldName("PMTABLE.FIELDS.FLD_NAME"), $invalidFieldPk))); } //All Primary Keys $flagAllFieldPk = 1; $missingFieldPk = ""; foreach ($arrayFieldPk as $key => $value) { if (!in_array($value, $arrayFieldPkAux)) { $flagAllFieldPk = 0; $missingFieldPk = $value; break; } } if ($flagAllFieldPk == 0) { throw new \Exception(\G::LoadTranslation("ID_PMTABLE_PRIMARY_KEY_FIELD_IS_MISSING_IN_ATTRIBUTE", array($missingFieldPk, $this->getFieldNameByFormatFieldName("PMTABLE.FIELDS")))); } //Total of Primary Keys $n1 = count($arrayFieldPk); $n2 = count($arrayFieldPkAux); if ($n1 != $n2) { throw new \Exception(\G::LoadTranslation("ID_PMTABLE_TOTAL_PRIMARY_KEY_FIELDS_IS_NOT_EQUAL_IN_ATTRIBUTE", array($n1, $this->getFieldNameByFormatFieldName("PMTABLE.FIELDS"), $n2))); } //Set data $tableUid = $arrayData["PMTABLE"]["TAB_UID"]; $arrayFields = $arrayData["PMTABLE"]["FIELDS"]; unset($arrayData["PMTABLE"]); //Create $dynaForm = new \Dynaform(); $arrayData["PRO_UID"] = $processUid; $arrayData["DYN_TYPE"] = "xmlform"; $arrayData["FIELDS"] = $arrayFields; $dynaForm->createFromPMTable($arrayData, $tableUid); $dynaFormUid = $dynaForm->getDynUid(); //Return unset($arrayData["PRO_UID"]); unset($arrayData["FIELDS"]); $arrayData = array_merge(array("DYN_UID" => $dynaFormUid), $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 $elementTaskRelationUid Unique id of Element-Task-Relation * @param string $projectUid Unique id of Project * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($elementTaskRelationUid, $projectUid, array $arrayData) { try { //Set variables $arrayElementTaskRelationData = $elementTaskRelationUid == "" ? array() : $this->getElementTaskRelation($elementTaskRelationUid, true); $flagInsert = $elementTaskRelationUid == "" ? true : false; $arrayFinalData = array_merge($arrayElementTaskRelationData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); } catch (\Exception $e) { throw $e; } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $messageTypeVariableUid Unique id of Message-Type-Variable * @param string $messageTypeUid Unique id of Project * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($messageTypeVariableUid, $messageTypeUid, array $arrayData) { try { //Set variables $arrayMsgTypeVarData = $messageTypeVariableUid == "" ? array() : $this->getMessageTypeVariable($messageTypeVariableUid, true); $flagInsert = $messageTypeVariableUid == "" ? true : false; $arrayFinalData = array_merge($arrayMsgTypeVarData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //Verify data if (isset($arrayData["MSGTV_NAME"])) { $this->throwExceptionIfExistsName($messageTypeUid, $arrayData["MSGTV_NAME"], $this->arrayFieldNameForException["messageTypeVariableName"], $messageTypeVariableUid); } } catch (\Exception $e) { throw $e; } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $categoryUid Unique id of Category * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($categoryUid, array $arrayData) { try { //Set variables $arrayCategoryData = $categoryUid == "" ? array() : $this->getCategory($categoryUid, true); $flagInsert = $categoryUid == "" ? true : false; $arrayDataMain = array_merge($arrayCategoryData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //Verify data if (isset($arrayData["CAT_NAME"])) { $this->throwExceptionIfExistsName($arrayData["CAT_NAME"], $this->arrayFieldNameForException["categoryName"], $categoryUid); } } catch (\Exception $e) { throw $e; } }
/** * @url POST /generate-bpmn * * @param array $request_data * * @status 201 */ public function doPostGenerateBpmn(array $request_data) { try { //Set data $request_data = array_change_key_case($request_data, CASE_UPPER); //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition( $request_data, array("PRO_UID" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "processUid")), array("processUid" => "pro_uid"), true ); //Generate BPMN $workflowBpmn = new \ProcessMaker\Project\Adapter\WorkflowBpmn(); $projectUid = $workflowBpmn->generateBpmn($request_data["PRO_UID"], "pro_uid", $this->getUserId()); $arrayData = array_change_key_case(array_merge(array("PRJ_UID" => $projectUid), $request_data), CASE_LOWER); $response = $arrayData; return $response; } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } }
/** * Validate the data if they are invalid (INSERT and UPDATE) * * @param string $timerEventUid Unique id of Timer-Event * @param string $projectUid Unique id of Project * @param array $arrayData Data * * return void Throw exception if data has an invalid value */ public function throwExceptionIfDataIsInvalid($timerEventUid, $projectUid, array $arrayData) { try { //Set variables $arrayTimerEventData = $timerEventUid == "" ? array() : $this->getTimerEvent($timerEventUid, true); $flagInsert = $timerEventUid == "" ? true : false; $arrayFinalData = array_merge($arrayTimerEventData, $arrayData); //Verify data - Field definition $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); //Verify data if (isset($arrayData["EVN_UID"])) { $arrayEventType = array("START", "INTERMEDIATE"); $arrayEventMarker = array("TIMER"); $bpmnEvent = \BpmnEventPeer::retrieveByPK($arrayData["EVN_UID"]); if (is_null($bpmnEvent)) { throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_EXIST", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"]))); } if (!in_array($bpmnEvent->getEvnType(), $arrayEventType) || !in_array($bpmnEvent->getEvnMarker(), $arrayEventMarker)) { throw new \Exception(\G::LoadTranslation("ID_EVENT_NOT_IS_TIMER_EVENT", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"]))); } if ($bpmnEvent->getPrjUid() != $projectUid) { throw new \Exception(\G::LoadTranslation("ID_EVENT_EVENT_NOT_BELONG_TO_PROJECT", array($this->arrayFieldNameForException["eventUid"], $arrayData["EVN_UID"], $this->arrayFieldNameForException["projectUid"], $projectUid))); } $this->throwExceptionIfEventIsRegistered($projectUid, $arrayData["EVN_UID"], $this->arrayFieldNameForException["eventUid"], $timerEventUid); } //Verify data - Field definition $arrayFieldDefinition = array(); $bpmnEvent = \BpmnEventPeer::retrieveByPK($arrayFinalData["EVN_UID"]); switch ($bpmnEvent->getEvnType()) { case "START": $arrayFieldDefinition = array("TMREVN_OPTION" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("HOURLY", "DAILY", "MONTHLY", "EVERY", "ONE-DATE-TIME"), "fieldNameAux" => "timerEventOption")); break; case "INTERMEDIATE": $arrayFieldDefinition = array("TMREVN_OPTION" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("WAIT-FOR", "WAIT-UNTIL-SPECIFIED-DATE-TIME"), "fieldNameAux" => "timerEventOption")); break; } if (!empty($arrayFieldDefinition)) { $process->throwExceptionIfDataNotMetFieldDefinition($arrayFinalData, $arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); } $arrayFieldDefinition = array(); $arrayValidateData = array("TMREVN_DAY" => array("/^(?:0[1-9]|[12][0-9]|3[01])\$/", $this->arrayFieldNameForException["timerEventDay"]), "TMREVN_HOUR" => array("/^(?:[0-1]\\d|2[0-3])\$/", $this->arrayFieldNameForException["timerEventHour"]), "TMREVN_MINUTE" => array("/^(?:[0-5]\\d)\$/", $this->arrayFieldNameForException["timerEventMinute"])); switch ($arrayFinalData["TMREVN_OPTION"]) { case "HOURLY": $arrayFieldDefinition = array("TMREVN_START_DATE" => array("type" => "date", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventStartDate"), "TMREVN_END_DATE" => array("type" => "date", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventEndDate"), "TMREVN_MINUTE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventMinute")); break; case "DAILY": $arrayFieldDefinition = array("TMREVN_START_DATE" => array("type" => "date", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventStartDate"), "TMREVN_END_DATE" => array("type" => "date", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventEndDate"), "TMREVN_HOUR" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventHour"), "TMREVN_MINUTE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventMinute"), "TMREVN_CONFIGURATION_DATA" => array("type" => "array", "required" => false, "empty" => true, "defaultValues" => array(1, 2, 3, 4, 5, 6, 7), "fieldNameAux" => "timerEventConfigurationData")); break; case "MONTHLY": $arrayFieldDefinition = array("TMREVN_START_DATE" => array("type" => "date", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventStartDate"), "TMREVN_END_DATE" => array("type" => "date", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "timerEventEndDate"), "TMREVN_DAY" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventDay"), "TMREVN_HOUR" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventHour"), "TMREVN_MINUTE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventMinute"), "TMREVN_CONFIGURATION_DATA" => array("type" => "array", "required" => false, "empty" => true, "defaultValues" => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), "fieldNameAux" => "timerEventConfigurationData")); break; case "EVERY": $arrayFieldDefinition = array("TMREVN_HOUR" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventHour"), "TMREVN_MINUTE" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventMinute")); $arrayValidateData["TMREVN_HOUR"][0] = "/^(?:0?\\d|[1-9]\\d*)\$/"; $arrayValidateData["TMREVN_MINUTE"][0] = "/^(?:0?\\d|[1-9]\\d*)\$/"; break; case "ONE-DATE-TIME": $arrayFieldDefinition = array("TMREVN_NEXT_RUN_DATE" => array("type" => "datetime", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventNextRunDate")); break; case "WAIT-FOR": //TMREVN_DAY //TMREVN_HOUR //TMREVN_MINUTE $arrayValidateData["TMREVN_DAY"][0] = "/^(?:0?\\d|[1-9]\\d*)\$/"; $arrayValidateData["TMREVN_HOUR"][0] = "/^(?:0?\\d|[1-9]\\d*)\$/"; $arrayValidateData["TMREVN_MINUTE"][0] = "/^(?:0?\\d|[1-9]\\d*)\$/"; break; case "WAIT-UNTIL-SPECIFIED-DATE-TIME": $arrayFieldDefinition = array("TMREVN_CONFIGURATION_DATA" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "timerEventConfigurationData")); break; } if (!empty($arrayFieldDefinition)) { $process->throwExceptionIfDataNotMetFieldDefinition($arrayFinalData, $arrayFieldDefinition, $this->arrayFieldNameForException, $flagInsert); } foreach ($arrayValidateData as $key => $value) { if (isset($arrayData[$key]) && !preg_match($value[0], $arrayData[$key])) { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE", array($value[1]))); } } } catch (\Exception $e) { throw $e; } }
/** * Return an assignee list of an activity * * @param string $processUid * @param string $taskUid * @param string $option * @param int $taskUserType * @param array $arrayFilterData * @param int $start * @param int $limit * @param string $type * * return array */ public function getTaskAssignees($processUid, $taskUid, $option, $taskUserType, $arrayFilterData = null, $start = null, $limit = null, $type = null) { try { $arrayAssignee = array(); $numRecTotal = 0; $startbk = $start; $limitbk = $limit; //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $process->throwExceptionIfDataNotMetPagerVarDefinition(array("start" => $start, "limit" => $limit), array("start" => "start", "limit" => "limit")); $arrayFieldDefinition = array("OPTION" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("ASSIGNEE", "AVAILABLE"), "fieldNameAux" => "option"), "TASK_USER_TYPE" => array("type" => "int", "required" => true, "empty" => false, "defaultValues" => array(1, 2), "fieldNameAux" => "taskUserType")); $process->throwExceptionIfDataNotMetFieldDefinition(array("OPTION" => $option, "TASK_USER_TYPE" => $taskUserType), $arrayFieldDefinition, array("option" => "option", "taskUserType" => "taskUserType"), false); //Set variables $filterName = "filter"; if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"])) { $arrayAux = array("" => "filter", "LEFT" => "lfilter", "RIGHT" => "rfilter"); $filterName = $arrayAux[isset($arrayFilterData["filterOption"]) ? $arrayFilterData["filterOption"] : ""]; } //Get data if (!is_null($limit) && $limit . "" == "0") { //Return return array("total" => $numRecTotal, "start" => (int) (!is_null($startbk) ? $startbk : 0), "limit" => (int) (!is_null($limitbk) ? $limitbk : 0), $filterName => !is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) ? $arrayFilterData["filter"] : "", "data" => $arrayAssignee); } //Verify data $process->throwExceptionIfNotExistsProcess($processUid, "prj_uid"); $this->throwExceptionIfNotExistsTask($processUid, $taskUid, "act_uid"); //Set variables $numRecTotalGroup = 0; $numRecTotalUser = 0; switch ($option) { case "ASSIGNEE": break; case "AVAILABLE": $task = new \Tasks(); $arrayGroupUid = array(); foreach ($task->getGroupsOfTask($taskUid, $taskUserType) as $value) { $arrayGroupUid[] = $value['GRP_UID']; } $arrayUserUid = array(); foreach ($task->getUsersOfTask($taskUid, $taskUserType) as $value) { $arrayUserUid[] = $value['USR_UID']; } break; } //Groups //Query if (empty($type) || $type == "group") { $criteriaGroup = new \Criteria("workflow"); $criteriaGroup->addSelectColumn(\GroupwfPeer::GRP_UID); $criteriaGroup->addAsColumn("GRP_TITLE", \ContentPeer::CON_VALUE); switch ($option) { case "ASSIGNEE": $criteriaGroup->addJoin(\TaskUserPeer::USR_UID, \GroupwfPeer::GRP_UID, \Criteria::LEFT_JOIN); $criteriaGroup->add(\TaskUserPeer::TAS_UID, $taskUid, \Criteria::EQUAL); $criteriaGroup->add(\TaskUserPeer::TU_TYPE, $taskUserType, \Criteria::EQUAL); $criteriaGroup->add(\TaskUserPeer::TU_RELATION, 2, \Criteria::EQUAL); break; case "AVAILABLE": $criteriaGroup->add(\GroupwfPeer::GRP_UID, $arrayGroupUid, \Criteria::NOT_IN); break; } $criteriaGroup->addJoin(\GroupwfPeer::GRP_UID, \ContentPeer::CON_ID, \Criteria::LEFT_JOIN); $criteriaGroup->add(\ContentPeer::CON_CATEGORY, "GRP_TITLE", \Criteria::EQUAL); $criteriaGroup->add(\ContentPeer::CON_LANG, SYS_LANG, \Criteria::EQUAL); if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) && trim($arrayFilterData["filter"]) != "") { $arraySearch = array("" => "%" . $arrayFilterData["filter"] . "%", "LEFT" => $arrayFilterData["filter"] . "%", "RIGHT" => "%" . $arrayFilterData["filter"]); $search = $arraySearch[isset($arrayFilterData["filterOption"]) ? $arrayFilterData["filterOption"] : ""]; $criteriaGroup->add(\ContentPeer::CON_VALUE, $search, \Criteria::LIKE); } $criteriaGroup->add(\GroupwfPeer::GRP_STATUS, "ACTIVE", \Criteria::EQUAL); //Number records total $criteriaCount = clone $criteriaGroup; $criteriaCount->clearSelectColumns(); $criteriaCount->addSelectColumn("COUNT(" . \GroupwfPeer::GRP_UID . ") AS NUM_REC"); switch ($option) { case "ASSIGNEE": $rsCriteriaCount = \TaskUserPeer::doSelectRS($criteriaCount); break; case "AVAILABLE": $rsCriteriaCount = \GroupwfPeer::doSelectRS($criteriaCount); break; } $rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $result = $rsCriteriaCount->next(); $row = $rsCriteriaCount->getRow(); $numRecTotalGroup = (int) $row["NUM_REC"]; $numRecTotal = $numRecTotal + $numRecTotalGroup; } //Users //Query if (empty($type) || $type == "user") { $criteriaUser = new \Criteria("workflow"); $criteriaUser->addSelectColumn(\UsersPeer::USR_UID); $criteriaUser->addSelectColumn(\UsersPeer::USR_USERNAME); $criteriaUser->addSelectColumn(\UsersPeer::USR_FIRSTNAME); $criteriaUser->addSelectColumn(\UsersPeer::USR_LASTNAME); switch ($option) { case "ASSIGNEE": $criteriaUser->addJoin(\TaskUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); $criteriaUser->add(\TaskUserPeer::TAS_UID, $taskUid, \Criteria::EQUAL); $criteriaUser->add(\TaskUserPeer::TU_TYPE, $taskUserType, \Criteria::EQUAL); $criteriaUser->add(\TaskUserPeer::TU_RELATION, 1, \Criteria::EQUAL); break; case "AVAILABLE": $criteriaUser->add(\UsersPeer::USR_UID, $arrayUserUid, \Criteria::NOT_IN); break; } if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) && trim($arrayFilterData["filter"]) != "") { $arraySearch = array("" => "%" . $arrayFilterData["filter"] . "%", "LEFT" => $arrayFilterData["filter"] . "%", "RIGHT" => "%" . $arrayFilterData["filter"]); $search = $arraySearch[isset($arrayFilterData["filterOption"]) ? $arrayFilterData["filterOption"] : ""]; $criteriaUser->add($criteriaUser->getNewCriterion(\UsersPeer::USR_USERNAME, $search, \Criteria::LIKE)->addOr($criteriaUser->getNewCriterion(\UsersPeer::USR_FIRSTNAME, $search, \Criteria::LIKE))->addOr($criteriaUser->getNewCriterion(\UsersPeer::USR_LASTNAME, $search, \Criteria::LIKE))); } $criteriaUser->add(\UsersPeer::USR_STATUS, "ACTIVE", \Criteria::EQUAL); //Number records total $criteriaCount = clone $criteriaUser; $criteriaCount->clearSelectColumns(); $criteriaCount->addSelectColumn("COUNT(" . \UsersPeer::USR_UID . ") AS NUM_REC"); switch ($option) { case "ASSIGNEE": $rsCriteriaCount = \TaskUserPeer::doSelectRS($criteriaCount); break; case "AVAILABLE": $rsCriteriaCount = \UsersPeer::doSelectRS($criteriaCount); break; } $rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $result = $rsCriteriaCount->next(); $row = $rsCriteriaCount->getRow(); $numRecTotalUser = (int) $row["NUM_REC"]; $numRecTotal = $numRecTotal + $numRecTotalUser; } //Groups //Query if (empty($type) || $type == "group") { $criteriaGroup->addAscendingOrderByColumn("GRP_TITLE"); if (!is_null($start)) { $criteriaGroup->setOffset((int) $start); } if (!is_null($limit)) { $criteriaGroup->setLimit((int) $limit); } switch ($option) { case "ASSIGNEE": $rsCriteriaGroup = \TaskUserPeer::doSelectRS($criteriaGroup); break; case "AVAILABLE": $rsCriteriaGroup = \GroupwfPeer::doSelectRS($criteriaGroup); break; } $rsCriteriaGroup->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $numRecGroup = 0; while ($rsCriteriaGroup->next()) { $row = $rsCriteriaGroup->getRow(); $criteria2 = new \Criteria("workflow"); $criteria2->addSelectColumn("COUNT(" . \GroupUserPeer::GRP_UID . ") AS NUM_MEM"); $criteria2->add(\GroupUserPeer::GRP_UID, $row["GRP_UID"], \Criteria::EQUAL); $rsCriteria2 = \GroupUserPeer::doSelectRS($criteria2); $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $result = $rsCriteria2->next(); $row2 = $rsCriteria2->getRow(); $row["GRP_TITLE"] = $row["GRP_TITLE"] . " (" . $row2["NUM_MEM"] . " " . \G::LoadTranslation((int) $row2["NUM_MEM"] == 1 ? "ID_USER" : "ID_USERS") . ")"; $arrayAssignee[] = $this->getTaskAssigneeDataFromRecord(array($row["GRP_UID"], $row["GRP_TITLE"], "", $row["GRP_TITLE"], "group"), $taskUserType); $numRecGroup++; } } //Users //Query if (empty($type) || $type == "user") { $flagUser = true; if ($numRecTotalGroup > 0) { if ($numRecGroup > 0) { if (!is_null($limit)) { if ($numRecGroup < (int) $limit) { $start = 0; $limit = $limit - $numRecGroup; } else { $flagUser = false; } } else { $start = 0; } } else { $start = (int) $start - $numRecTotalGroup; } } if ($flagUser) { //Users //Query $criteriaUser->addAscendingOrderByColumn(\UsersPeer::USR_FIRSTNAME); if (!is_null($start)) { $criteriaUser->setOffset((int) $start); } if (!is_null($limit)) { $criteriaUser->setLimit((int) $limit); } switch ($option) { case "ASSIGNEE": $rsCriteriaUser = \TaskUserPeer::doSelectRS($criteriaUser); break; case "AVAILABLE": $rsCriteriaUser = \UsersPeer::doSelectRS($criteriaUser); break; } $rsCriteriaUser->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteriaUser->next()) { $row = $rsCriteriaUser->getRow(); $arrayAssignee[] = $this->getTaskAssigneeDataFromRecord(array($row["USR_UID"], $row["USR_FIRSTNAME"], $row["USR_LASTNAME"], $row["USR_USERNAME"], "user"), $taskUserType); } } } //Return return array("total" => $numRecTotal, "start" => (int) (!is_null($startbk) ? $startbk : 0), "limit" => (int) (!is_null($limitbk) ? $limitbk : 0), $filterName => !is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) ? $arrayFilterData["filter"] : "", "data" => $arrayAssignee); } catch (\Exception $e) { throw $e; } }
/** * Assign User to Group * * @param string $groupUid Unique id of Group * @param array $arrayData Data * * return array Return data of the User assigned to Group */ public function create($groupUid, $arrayData) { try { $arrayData = array_change_key_case($arrayData, CASE_UPPER); unset($arrayData["GRP_UID"]); //Verify data $process = new \ProcessMaker\BusinessModel\Process(); $group = new \ProcessMaker\BusinessModel\Group(); $group->throwExceptionIfNotExistsGroup($groupUid, $this->arrayFieldNameForException["groupUid"]); $process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, true); $process->throwExceptionIfNotExistsUser($arrayData["USR_UID"], $this->arrayFieldNameForException["userUid"]); $this->throwExceptionIfExistsGroupUser($groupUid, $arrayData["USR_UID"], $this->arrayFieldNameForException["userUid"]); //Create $group = new \Groups(); $group->addUserToGroup($groupUid, $arrayData["USR_UID"]); //Return $arrayData = array_merge(array("GRP_UID" => $groupUid), $arrayData); if (!$this->formatFieldNameInUppercase) { $arrayData = array_change_key_case($arrayData, CASE_LOWER); } return $arrayData; } catch (\Exception $e) { throw $e; } }