From f0bebb5fe5bd9be5cd9047dbd127c733587aa04e Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Fri, 20 Feb 2015 17:12:49 -0400 Subject: [PATCH] PM-939 "Support for Message-Event(Export, Import y Delete)" > Se han implementado los metodos para: Export, Import y Delete (delete Process) de este nuevo "Objeto", asi tambien se ha agregado validaciones en el listados en el casesList. --- .../engine/classes/class.applications.php | 11 ++- workflow/engine/classes/class.case.php | 6 +- workflow/engine/classes/class.processes.php | 91 +++++++++++++++++-- .../BusinessModel/MessageEventDefinition.php | 25 ++++- .../src/ProcessMaker/Importer/Importer.php | 2 +- .../src/ProcessMaker/Project/Workflow.php | 44 +++++++++ 6 files changed, 165 insertions(+), 14 deletions(-) diff --git a/workflow/engine/classes/class.applications.php b/workflow/engine/classes/class.applications.php index a25af44ef..2e4353620 100755 --- a/workflow/engine/classes/class.applications.php +++ b/workflow/engine/classes/class.applications.php @@ -61,6 +61,7 @@ class Applications $confCasesList = $conf->getConfiguration("casesList", ($action == "search" || $action == "simple_search")? "search" : $action); $oAppCache->confCasesList = $confCasesList; } + // get the action based list switch ($action) { case "draft": @@ -118,7 +119,7 @@ class Applications case "COMPLETED": $Criteria = $oAppCache->getCompletedListCriteria($userUid); $CriteriaCount = $oAppCache->getCompletedCountCriteria($userUid); - + $Criteria->add (AppCacheViewPeer::DEL_LAST_INDEX,"1"); $CriteriaCount->add (AppCacheViewPeer::DEL_LAST_INDEX,"1"); break; @@ -161,6 +162,14 @@ class Applications break; } + $arrayTaskTypeToExclude = array("WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT"); + + $Criteria->addJoin(AppCacheViewPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); + $Criteria->add(TaskPeer::TAS_TYPE, $arrayTaskTypeToExclude, Criteria::NOT_IN); + + $CriteriaCount->addJoin(AppCacheViewPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); + $CriteriaCount->add(TaskPeer::TAS_TYPE, $arrayTaskTypeToExclude, Criteria::NOT_IN); + $Criteria->addAlias( 'CU', 'USERS' ); $Criteria->addJoin( AppCacheViewPeer::USR_UID, 'CU.USR_UID', Criteria::LEFT_JOIN ); $Criteria->addAsColumn( 'USR_UID', 'CU.USR_UID' ); diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 78f021b69..896043c07 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -249,6 +249,8 @@ class Cases $rows[] = array('uid' => 'char', 'value' => 'char'); $tasks = array(); + $arrayTaskTypeToExclude = array("WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT"); + $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn(TaskPeer::TAS_UID); @@ -256,7 +258,7 @@ class Cases $c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); - $c->add(TaskPeer::TAS_TYPE, "WEBENTRYEVENT", Criteria::NOT_EQUAL); + $c->add(TaskPeer::TAS_TYPE, $arrayTaskTypeToExclude, Criteria::NOT_IN); $c->add(TaskPeer::TAS_START, 'TRUE'); $c->add(TaskUserPeer::USR_UID, $sUIDUser); @@ -282,7 +284,7 @@ class Cases $c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); - $c->add(TaskPeer::TAS_TYPE, "WEBENTRYEVENT", Criteria::NOT_EQUAL); + $c->add(TaskPeer::TAS_TYPE, $arrayTaskTypeToExclude, Criteria::NOT_IN); $c->add(TaskPeer::TAS_START, 'TRUE'); $c->add(TaskUserPeer::USR_UID, $aGroups, Criteria::IN); diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 4f7dfeb8d..513b78ba1 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -888,12 +888,18 @@ class Processes $oData->uid["TASK"] = $map; if (isset( $oData->routes ) && is_array( $oData->routes )) { - foreach ($oData->routes as $key => $val) { - $newGuid = $map[$val['TAS_UID']]; - $oData->routes[$key]['TAS_UID'] = $newGuid; - if (strlen( $val['ROU_NEXT_TASK'] ) > 0 && $val['ROU_NEXT_TASK'] > 0) { - $newGuid = $map[$val['ROU_NEXT_TASK']]; - $oData->routes[$key]['ROU_NEXT_TASK'] = $newGuid; + foreach ($oData->routes as $key => $value) { + $record = $value; + + if (isset($map[$record["TAS_UID"]])) { + $newUid = $map[$record["TAS_UID"]]; + + $oData->routes[$key]["TAS_UID"] = $newUid; + + if (strlen($record["ROU_NEXT_TASK"]) > 0 && $record["ROU_NEXT_TASK"] > 0) { + $newUid = $map[$record["ROU_NEXT_TASK"]]; + $oData->routes[$key]["ROU_NEXT_TASK"] = $newUid; + } } } } @@ -2297,6 +2303,19 @@ class Processes } } } + + //Message-Envent-Definition + if (isset($data->messageEventDefinition)) { + foreach ($data->messageEventDefinition as $key => $value) { + $record = $value; + + if (isset($map[$record["MSGT_UID"]])) { + $newUid = $map[$record["MSGT_UID"]]; + + $data->messageEventDefinition[$key]["MSGT_UID"] = $newUid; + } + } + } } catch (Exception $e) { throw $e; } @@ -3077,6 +3096,39 @@ class Processes } } + public function getMessageEventDefinitions($processUid) + { + try { + $arrayMessageEventDefinition = array(); + + $messageEventDefinition = new \ProcessMaker\BusinessModel\MessageEventDefinition(); + + //Get data + $criteria = new Criteria("workflow"); + + $criteria->addSelectColumn(MessageEventDefinitionPeer::MSGED_UID); + $criteria->add(MessageEventDefinitionPeer::PRJ_UID, $processUid, Criteria::EQUAL); + + $rsCriteria = MessageEventDefinitionPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $arrayData = $messageEventDefinition->getMessageEventDefinition($row["MSGED_UID"], true); + + $arrayData["MSGED_VARIABLES"] = serialize($arrayData["MSGED_VARIABLES"]); + + $arrayMessageEventDefinition[] = $arrayData; + } + + //Return + return $arrayMessageEventDefinition; + } catch (Exception $e) { + throw $e; + } + } + /** * Get Task User Rows from an array of data * @@ -3318,6 +3370,31 @@ class Processes } } + /** + * Create Message-Event-Definition records + * + * @param string $processUid Unique id of Process + * @param array $arrayData Data + * + * return void + */ + public function createMessageEventDefinition($processUid, array $arrayData) + { + try { + $messageEventDefinition = new \ProcessMaker\BusinessModel\MessageEventDefinition(); + + foreach ($arrayData as $value) { + $record = $value; + + $record["MSGED_VARIABLES"] = unserialize($record["MSGED_VARIABLES"]); + + $arrayMessageEventDefinitionData = $messageEventDefinition->create($processUid, $record, false); + } + } catch (Exception $e) { + throw $e; + } + } + /** * Cleanup Report Tables References from an array of data * @@ -3506,6 +3583,7 @@ class Processes $oData->webEntryEvent = $this->getWebEntryEvents($sProUid); $oData->messageType = $this->getMessageTypes($sProUid); $oData->messageTypeVariable = $this->getMessageTypeVariables($sProUid); + $oData->messageEventDefinition = $this->getMessageEventDefinitions($sProUid); $oData->groupwfs = $this->groupwfsMerge($oData->groupwfs, $oData->processUser, "USR_UID"); $oData->process["PRO_TYPE_PROCESS"] = "PUBLIC"; @@ -4552,6 +4630,7 @@ class Processes $this->createWebEntryEvent($arrayProcessData["PRO_UID"], $arrayProcessData["PRO_CREATE_USER"], (isset($oData->webEntryEvent))? $oData->webEntryEvent : array()); $this->createMessageType((isset($oData->messageType))? $oData->messageType : array()); $this->createMessageTypeVariable((isset($oData->messageTypeVariable))? $oData->messageTypeVariable : array()); + $this->createMessageEventDefinition($arrayProcessData["PRO_UID"], (isset($oData->messageEventDefinition))? $oData->messageEventDefinition : array()); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/MessageEventDefinition.php b/workflow/engine/src/ProcessMaker/BusinessModel/MessageEventDefinition.php index 95543e2b4..8c8bb4ec3 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/MessageEventDefinition.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/MessageEventDefinition.php @@ -8,7 +8,7 @@ class MessageEventDefinition "PRJ_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "projectUid"), "EVN_UID" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "eventUid"), - "MSGT_UID" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "messageTypeUid"), + "MSGT_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "messageTypeUid"), "MSGED_USR_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "messageEventDefinitionUserUid"), "MSGED_VARIABLES" => array("type" => "array", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "messageEventDefinitionVariables"), "MSGED_CORRELATION" => array("type" => "string", "required" => false, "empty" => true, "defaultValues" => array(), "fieldNameAux" => "messageEventDefinitionCorrelation") @@ -259,7 +259,7 @@ class MessageEventDefinition * * return array Return data of the new Message-Event-Definition created */ - public function create($projectUid, array $arrayData) + public function create($projectUid, array $arrayData, $flagValidateArrayData = true) { try { //Verify data @@ -278,7 +278,9 @@ class MessageEventDefinition //Verify data $process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]); - $this->throwExceptionIfDataIsInvalid("", $projectUid, $arrayData); + if ($flagValidateArrayData) { + $this->throwExceptionIfDataIsInvalid("", $projectUid, $arrayData); + } //Create $cnn = \Propel::getConnection("workflow"); @@ -295,6 +297,21 @@ class MessageEventDefinition $arrayData["MSGED_VARIABLES"] = array(); } + if (isset($arrayData["MSGED_USR_UID"]) && $arrayData["MSGED_USR_UID"] != "") { + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\UsersPeer::USR_UID); + $criteria->add(\UsersPeer::USR_UID, $arrayData["MSGED_USR_UID"], \Criteria::EQUAL); + + //QUERY + $rsCriteria = \UsersPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + if (!$rsCriteria->next()) { + $arrayData["MSGED_USR_UID"] = ""; + } + } + $messageEventDefinitionUid = \ProcessMaker\Util\Common::generateUID(); $messageEventDefinition->fromArray($arrayData, \BasePeer::TYPE_FIELDNAME); @@ -314,7 +331,7 @@ class MessageEventDefinition $cnn->commit(); //Task - User - if (isset($arrayData["MSGED_USR_UID"])) { + if (isset($arrayData["MSGED_USR_UID"]) && $arrayData["MSGED_USR_UID"] != "") { $bpmnEvent = \BpmnEventPeer::retrieveByPK($arrayData["EVN_UID"]); //Event - START-MESSAGE-EVENT diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index aa3847f0b..1aef380dc 100755 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -374,7 +374,7 @@ abstract class Importer foreach ($arrayWorkflowTables["tasks"] as $key => $value) { $arrayTaskData = $value; - if (!in_array($arrayTaskData["TAS_TYPE"], array("GATEWAYTOGATEWAY", "WEBENTRYEVENT"))) { + if (!in_array($arrayTaskData["TAS_TYPE"], array("GATEWAYTOGATEWAY", "WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT"))) { $result = $workflow->updateTask($arrayTaskData["TAS_UID"], $arrayTaskData); } } diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index c86a4c369..688023b9d 100755 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -815,6 +815,33 @@ class Workflow extends Handler $messageType->delete($row["MSGT_UID"]); } + //Delete Message-Event-Relation + $messageEventRelation = new \ProcessMaker\BusinessModel\MessageEventRelation(); + + $messageEventRelation->deleteWhere(array(\MessageEventRelationPeer::PRJ_UID => $sProcessUID)); + + //Delete Message-Event-Task-Relation + $messageEventTaskRelation = new \ProcessMaker\BusinessModel\MessageEventTaskRelation(); + + $messageEventTaskRelation->deleteWhere(array(\MessageEventTaskRelationPeer::PRJ_UID => $sProcessUID)); + + //Delete Message-Event-Definition + $messageEventDefinition = new \ProcessMaker\BusinessModel\MessageEventDefinition(); + + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\MessageEventDefinitionPeer::MSGED_UID); + $criteria->add(\MessageEventDefinitionPeer::PRJ_UID, $sProcessUID, \Criteria::EQUAL); + + $rsCriteria = \MessageEventDefinitionPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $messageEventDefinition->delete($row["MSGED_UID"]); + } + //Delete the process try { $oProcess->remove($sProcessUID); @@ -1184,6 +1211,23 @@ class Workflow extends Handler } } } + + //Update MESSAGE_EVENT_DEFINITION.EVN_UID + if (isset($arrayWorkflowData["messageEventDefinition"])) { + foreach ($arrayWorkflowData["messageEventDefinition"] as $key => $value) { + $messageEventDefinitionEventUid = $arrayWorkflowData["messageEventDefinition"][$key]["EVN_UID"]; + + foreach ($arrayUid as $value2) { + $arrayItem = $value2; + + if ($arrayItem["old_uid"] == $messageEventDefinitionEventUid) { + $arrayWorkflowData["messageEventDefinition"][$key]["EVN_UID"] = $arrayItem["new_uid"]; + break; + } + } + } + } + //Workflow tables $workflowData = (object)($arrayWorkflowData);