From eac6bebca5d74d6aee6830c8f6ddfb6bbc1e7754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 23 Jun 2017 14:27:16 -0400 Subject: [PATCH 1/6] HOR-3220 --- gulliver/system/class.g.php | 7 +++---- workflow/engine/controllers/pmTablesProxy.php | 7 ++++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index b70a5d488..147b03aa8 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -2970,11 +2970,10 @@ class G */ public function is_utf8 ($string) { - if (is_array( $string )) { - $enc = implode( '', $string ); - return @! ((ord( $enc[0] ) != 239) && (ord( $enc[1] ) != 187) && (ord( $enc[2] ) != 191)); + if (preg_match('//u', $string)) { + return true; } else { - return (utf8_encode( utf8_decode( $string ) ) == $string); + return false; } } diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index 2f92242a9..3db3891ae 100644 --- a/workflow/engine/controllers/pmTablesProxy.php +++ b/workflow/engine/controllers/pmTablesProxy.php @@ -506,7 +506,12 @@ class pmTablesProxy extends HttpProxyController $j = 0; foreach ($aAdditionalTables['FIELDS'] as $aField) { $conData++; - $temp = (array_key_exists($j, $aAux))? '"' . addslashes(stripslashes(utf8_encode($aAux[$j]))) . '"' : '""'; + + if (array_key_exists($j, $aAux)) { + $temp = '"' . addslashes(stripslashes(G::is_utf8($aAux[$j]) ? $aAux[$j] : utf8_encode($aAux[$j]))) . '"'; + } else { + $temp = '""'; + } if ($temp == '') { switch ($aField['FLD_TYPE']) { From 18d8e8904afc53dc9e1c974487e8174c9c2b7969 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 11 Jul 2017 13:50:56 -0400 Subject: [PATCH 2/6] HOR-3116 --- .../Project/Adapter/BpmnWorkflow.php | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index 1205fa62b..688e935dc 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -805,6 +805,9 @@ class BpmnWorkflow extends Project\Bpmn try { if (isset($this->arrayElementTaskRelation[$elementUid])) { $taskUid = $this->arrayElementTaskRelation[$elementUid]; + //Task - User + //Assign to admin + $this->assignUserAdminInMessageEvents($elementType, $key, $taskUid); } else { $taskPosX = 0; $taskPosY = 0; @@ -844,17 +847,9 @@ class BpmnWorkflow extends Project\Bpmn "TAS_POSY" => $taskPosY )); - if ($elementType == "bpmnEvent" && - in_array($key, array("end-message-event", "start-message-event", "intermediate-catch-message-event")) - ) { - if (in_array($key, array("start-message-event", "intermediate-catch-message-event"))) { - //Task - User - //Assign to admin - $task = new \Tasks(); - - $result = $task->assignUser($taskUid, "00000000000000000000000000000001", 1); - } - } + //Task - User + //Assign to admin + $this->assignUserAdminInMessageEvents($elementType, $key, $taskUid); //Element-Task-Relation - Create $elementTaskRelation = new \ProcessMaker\BusinessModel\ElementTaskRelation(); @@ -879,6 +874,27 @@ class BpmnWorkflow extends Project\Bpmn } } + /** + * Task - User, Assign 'admin' user in 'start-message-event' and + * 'intermediate-catch-message-event' elements. + * @param string $elementType + * @param string $key + * @param string $taskUid + */ + public function assignUserAdminInMessageEvents($elementType, $key, $taskUid) + { + try { + if ($elementType == "bpmnEvent" && in_array($key, ["start-message-event", "intermediate-catch-message-event"])) { + $task = new \Tasks(); + $task->assignUser($taskUid, "00000000000000000000000000000001", 1); + } + } catch (Exception $e) { + $context = \Bootstrap::getDefaultContextLog(); + $context['action'] = $e->getMessage(); + \Bootstrap::registerMonolog('Import', 300, 'assign user', $context, $context["workspace"], 'processmaker.log'); + } + } + public function mapBpmnGatewayToWorkflowRoutes($activityUid, $gatewayUid) { try { From fda20185ca45a8e35021bc6e2f9319f0e0cb1dbd Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 13 Jul 2017 16:34:49 -0400 Subject: [PATCH 3/6] HOR-3489 Improvement: the observations are applied in 'Pull Request', the changes are reversed because they are not necessary in the process import... --- workflow/engine/classes/class.derivation.php | 3 +- workflow/engine/classes/class.wsBase.php | 2 +- .../Project/Adapter/BpmnWorkflow.php | 38 ++++++------------- 3 files changed, 14 insertions(+), 29 deletions(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 8a6563106..7bd77c546 100644 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -1236,7 +1236,8 @@ class Derivation } //Check if $taskNextDel is Script-Task - if (!is_null($taskNextDel) && ($taskNextDel->getTasType() === "SCRIPT-TASK" || $taskNextDel->getTasType() === "INTERMEDIATE-THROW-EMAIL-EVENT" || $taskNextDel->getTasType() === "INTERMEDIATE-THROW-MESSAGE-EVENT" || $taskNextDel->getTasType() === "SERVICE-TASK")) { + $arrayTaskTypeToExclude = ["SCRIPT-TASK", "INTERMEDIATE-THROW-EMAIL-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "SERVICE-TASK", "START-MESSAGE-EVENT"]; + if (!is_null($taskNextDel) && (in_array($taskNextDel->getTasType(), $arrayTaskTypeToExclude))) { //Get for $nextDel["TAS_UID"] your next Task $currentDelegationAux = array_merge($currentDelegation, array("DEL_INDEX" => $iNewDelIndex, "TAS_UID" => $nextDel["TAS_UID"])); $nextDelegationsAux = array(); diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index f3bbc9dec..03229f936 100644 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -1986,7 +1986,7 @@ class wsBase $task = TaskPeer::retrieveByPK($taskId); - $arrayTaskTypeToExclude = array("START-TIMER-EVENT"); + $arrayTaskTypeToExclude = array("START-TIMER-EVENT", "START-MESSAGE-EVENT"); if (!is_null($task) && !in_array($task->getTasType(), $arrayTaskTypeToExclude) && $founded == "") { $result = new wsResponse( 14, G::LoadTranslation( 'ID_TASK_INVALID_USER_NOT_ASSIGNED_TASK' ) ); diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index 688e935dc..1205fa62b 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -805,9 +805,6 @@ class BpmnWorkflow extends Project\Bpmn try { if (isset($this->arrayElementTaskRelation[$elementUid])) { $taskUid = $this->arrayElementTaskRelation[$elementUid]; - //Task - User - //Assign to admin - $this->assignUserAdminInMessageEvents($elementType, $key, $taskUid); } else { $taskPosX = 0; $taskPosY = 0; @@ -847,9 +844,17 @@ class BpmnWorkflow extends Project\Bpmn "TAS_POSY" => $taskPosY )); - //Task - User - //Assign to admin - $this->assignUserAdminInMessageEvents($elementType, $key, $taskUid); + if ($elementType == "bpmnEvent" && + in_array($key, array("end-message-event", "start-message-event", "intermediate-catch-message-event")) + ) { + if (in_array($key, array("start-message-event", "intermediate-catch-message-event"))) { + //Task - User + //Assign to admin + $task = new \Tasks(); + + $result = $task->assignUser($taskUid, "00000000000000000000000000000001", 1); + } + } //Element-Task-Relation - Create $elementTaskRelation = new \ProcessMaker\BusinessModel\ElementTaskRelation(); @@ -874,27 +879,6 @@ class BpmnWorkflow extends Project\Bpmn } } - /** - * Task - User, Assign 'admin' user in 'start-message-event' and - * 'intermediate-catch-message-event' elements. - * @param string $elementType - * @param string $key - * @param string $taskUid - */ - public function assignUserAdminInMessageEvents($elementType, $key, $taskUid) - { - try { - if ($elementType == "bpmnEvent" && in_array($key, ["start-message-event", "intermediate-catch-message-event"])) { - $task = new \Tasks(); - $task->assignUser($taskUid, "00000000000000000000000000000001", 1); - } - } catch (Exception $e) { - $context = \Bootstrap::getDefaultContextLog(); - $context['action'] = $e->getMessage(); - \Bootstrap::registerMonolog('Import', 300, 'assign user', $context, $context["workspace"], 'processmaker.log'); - } - } - public function mapBpmnGatewayToWorkflowRoutes($activityUid, $gatewayUid) { try { From 698c3a5c753a684374863cb61ecfa94bc6c93b0c Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Fri, 14 Jul 2017 14:17:25 -0400 Subject: [PATCH 4/6] HOR-3116 improvement observations in pull request --- workflow/engine/classes/class.derivation.php | 3 +-- .../ProcessMaker/Project/Adapter/BpmnWorkflow.php | 12 ------------ 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 7bd77c546..8a6563106 100644 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -1236,8 +1236,7 @@ class Derivation } //Check if $taskNextDel is Script-Task - $arrayTaskTypeToExclude = ["SCRIPT-TASK", "INTERMEDIATE-THROW-EMAIL-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "SERVICE-TASK", "START-MESSAGE-EVENT"]; - if (!is_null($taskNextDel) && (in_array($taskNextDel->getTasType(), $arrayTaskTypeToExclude))) { + if (!is_null($taskNextDel) && ($taskNextDel->getTasType() === "SCRIPT-TASK" || $taskNextDel->getTasType() === "INTERMEDIATE-THROW-EMAIL-EVENT" || $taskNextDel->getTasType() === "INTERMEDIATE-THROW-MESSAGE-EVENT" || $taskNextDel->getTasType() === "SERVICE-TASK")) { //Get for $nextDel["TAS_UID"] your next Task $currentDelegationAux = array_merge($currentDelegation, array("DEL_INDEX" => $iNewDelIndex, "TAS_UID" => $nextDel["TAS_UID"])); $nextDelegationsAux = array(); diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index 1205fa62b..8106dfd35 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -844,18 +844,6 @@ class BpmnWorkflow extends Project\Bpmn "TAS_POSY" => $taskPosY )); - if ($elementType == "bpmnEvent" && - in_array($key, array("end-message-event", "start-message-event", "intermediate-catch-message-event")) - ) { - if (in_array($key, array("start-message-event", "intermediate-catch-message-event"))) { - //Task - User - //Assign to admin - $task = new \Tasks(); - - $result = $task->assignUser($taskUid, "00000000000000000000000000000001", 1); - } - } - //Element-Task-Relation - Create $elementTaskRelation = new \ProcessMaker\BusinessModel\ElementTaskRelation(); From 38e1afe32084eb8226dfba3cd6ccc9bce68bd141 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 19 Jul 2017 11:30:12 -0400 Subject: [PATCH 5/6] HOR-3300 --- workflow/engine/classes/class.pmLicenseManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.pmLicenseManager.php b/workflow/engine/classes/class.pmLicenseManager.php index 2b549f2db..33e33b232 100644 --- a/workflow/engine/classes/class.pmLicenseManager.php +++ b/workflow/engine/classes/class.pmLicenseManager.php @@ -67,7 +67,7 @@ class pmLicenseManager $this->id = $results ['ID']; $this->expireIn = $this->getExpireIn (); $this->features = $this->result!='TMINUS'?isset($results ['DATA']['CUSTOMER_PLUGIN'])? $results ['DATA']['CUSTOMER_PLUGIN'] : $this->getActiveFeatures() : array(); - $this->licensedfeatures = $this->result!='TMINUS'?isset($results ['DATA']['CUSTOMER_LICENSED_FEATURES'])? $results ['DATA']['CUSTOMER_LICENSED_FEATURES'] : array() : array(); + $this->licensedfeatures = $this->result != 'TMINUS' ? (isset($results ['DATA']['CUSTOMER_LICENSED_FEATURES']) && is_array($results ['DATA']['CUSTOMER_LICENSED_FEATURES'])) ? $results ['DATA']['CUSTOMER_LICENSED_FEATURES'] : array() : array(); $this->licensedfeaturesList = isset($results ['DATA']['LICENSED_FEATURES_LIST'])? $results ['DATA']['LICENSED_FEATURES_LIST'] : null; $this->status = $this->getCurrentLicenseStatus (); From d160585122369b2644315b1081b6e2b00e3caab4 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Tue, 18 Jul 2017 15:40:31 -0400 Subject: [PATCH 6/6] HOR-2704 --- workflow/engine/methods/cases/open.php | 10 +++--- .../BusinessModel/ProcessSupervisor.php | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/workflow/engine/methods/cases/open.php b/workflow/engine/methods/cases/open.php index fe6ea043c..0e49ee283 100644 --- a/workflow/engine/methods/cases/open.php +++ b/workflow/engine/methods/cases/open.php @@ -109,12 +109,14 @@ if( isset($_GET['action']) && ($_GET['action'] == 'jump') ) { } if(isset($_GET['actionFromList']) && ($_GET['actionFromList'] === 'to_revise') ){ - $oApp = new Application; - $oApp->Load($appUid); - //If the case is completed can not update the information from supervisor/review - if($oApp->getAppStatus() === 'COMPLETED') { + $oSupervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $caseCanBeReview = $oSupervisor->reviewCaseStatusForSupervisor($appUid, $delIndex); + //Check if the case has the correct status for update the information from supervisor/review + if (!$caseCanBeReview) { + //The supervisor can not edit the information $script = 'cases_Open?'; } else { + //The supervisor can edit the information, the case are in TO_DO $script = 'cases_OpenToRevise?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex . '&TAS_UID=' . $tasUid; $oHeadPublisher->assign( 'treeToReviseTitle', G::loadtranslation( 'ID_STEP_LIST' ) ); $casesPanelUrl = 'casesToReviseTreeContent?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php index 87503f43d..41d566bb1 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php @@ -1494,4 +1494,36 @@ class ProcessSupervisor } return false; } + + /** + * This function define if the supervisor can be review and edit + * The appStatus can be:TO_DO, DRAFT, COMPLETED, CANCELLED + * The thread status can be: PAUSED + * @param string $appUid + * @param integer $delIndex + * @return array + */ + public function reviewCaseStatusForSupervisor($appUid, $delIndex = 0) + { + $oApp = new \Application(); + $oApp->Load($appUid); + $canEdit = false; + switch ($oApp->getAppStatus()) { + case 'TO_DO': + //Verify if the case is paused because the supervisor can not edit the PAUSED case + $oDelay = new \AppDelay(); + if ($oDelay->isPaused($appUid, $delIndex)) { + $canEdit = false; + } else { + $canEdit = true; + } + break; + case 'COMPLETED': + case 'CANCELLED': + default: + $canEdit = false; + } + + return $canEdit; + } }