diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index f1c2f5a57..69b3bad99 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -112,7 +112,7 @@ class Derivation $arrayTaskData["NEXT_TASK"]["TAS_PARENT"] = ""; } - $arrayTaskData["NEXT_TASK"]["USER_ASSIGNED"] = (!in_array($arrayTaskData["NEXT_TASK"]["TAS_TYPE"], array("GATEWAYTOGATEWAY", "END-MESSAGE-EVENT", "SCRIPT-TASK")))? $this->getNextAssignedUser($arrayTaskData) : array("USR_UID" => "", "USR_FULLNAME" => ""); + $arrayTaskData["NEXT_TASK"]["USER_ASSIGNED"] = (!in_array($arrayTaskData["NEXT_TASK"]["TAS_TYPE"], array("GATEWAYTOGATEWAY", "END-MESSAGE-EVENT", "SCRIPT-TASK", "END-EMAIL-EVENT")))? $this->getNextAssignedUser($arrayTaskData) : array("USR_UID" => "", "USR_FULLNAME" => ""); } //Return @@ -219,7 +219,7 @@ class Derivation $arrayNextTask[++$i] = $this->prepareInformationTask($arrayNextTaskDefault); } - //Check Task GATEWAYTOGATEWAY or END-MESSAGE-EVENT + //Check Task GATEWAYTOGATEWAY or END-MESSAGE-EVENT or END-EMAIL-EVENT $arrayNextTaskBackup = $arrayNextTask; $arrayNextTask = array(); $i = 0; @@ -228,7 +228,7 @@ class Derivation $arrayNextTaskData = $value; if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] != "-1" && - in_array($arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"], array("GATEWAYTOGATEWAY", "END-MESSAGE-EVENT")) + in_array($arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"], array("GATEWAYTOGATEWAY", "END-MESSAGE-EVENT", "END-EMAIL-EVENT")) ) { $arrayAux = $this->prepareInformation($arrayData, $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]); @@ -236,8 +236,8 @@ class Derivation $arrayNextTask[++$i] = $value2; } } else { - if ($arrayNextTaskData["TAS_TYPE"] == "END-MESSAGE-EVENT" && - $arrayNextTaskData["NEXT_TASK"]["TAS_UID"] == "-1" + if (in_array($arrayNextTaskData["TAS_TYPE"], array("END-MESSAGE-EVENT", "END-EMAIL-EVENT")) && + $arrayNextTaskData["NEXT_TASK"]["TAS_UID"] == "-1" ) { $arrayNextTaskData["NEXT_TASK"]["TAS_UID"] = $arrayNextTaskData["TAS_UID"] . "/" . $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]; } @@ -599,6 +599,7 @@ class Derivation foreach ($nextDelegations as $nextDel) { //BpmnEvent - END-MESSAGE-EVENT - Check and get unique id + //BpmnEvent - END-EMAIL-EVENT - Check and get unique id if (preg_match("/^(.{32})\/(\-1)$/", $nextDel["TAS_UID"], $arrayMatch)) { $nextDel["TAS_UID"] = $arrayMatch[2]; $nextDel["TAS_UID_DUMMY"] = $arrayMatch[1]; @@ -643,15 +644,31 @@ class Derivation $this->case->closeAllThreads( $currentDelegation['APP_UID'] ); //I think we need to change the APP_STATUS to completed, - //Throw Message-Events - BpmnEvent - END-MESSAGE-EVENT + //BpmnEvent - END-MESSAGE-EVENT and END-EMAIL-EVENT if (isset($nextDel["TAS_UID_DUMMY"])) { - $case = new \ProcessMaker\BusinessModel\Cases(); - - $case->throwMessageEventBetweenElementOriginAndElementDest( - $currentDelegation["TAS_UID"], - $nextDel["TAS_UID_DUMMY"], - $appFields - ); + $taskDummy = TaskPeer::retrieveByPK($nextDel["TAS_UID_DUMMY"]); + switch ($taskDummy->getTasType()) { + case "END-MESSAGE-EVENT": + //Throw Message-Events - BpmnEvent - END-MESSAGE-EVENT + $case = new \ProcessMaker\BusinessModel\Cases(); + + $case->throwMessageEventBetweenElementOriginAndElementDest( + $currentDelegation["TAS_UID"], + $nextDel["TAS_UID_DUMMY"], + $appFields + ); + break; + case "END-EMAIL-EVENT": + //Email Event + $emailEvent = new \ProcessMaker\BusinessModel\EmailEvent(); + + $emailEvent->emailEventBetweenElementOriginAndElementDest( + $currentDelegation["TAS_UID"], + $nextDel["TAS_UID_DUMMY"], + $appFields + ); + break; + } } break; case TASK_FINISH_TASK: @@ -713,7 +730,16 @@ class Derivation $case = new \ProcessMaker\BusinessModel\Cases(); $case->throwMessageEventBetweenElementOriginAndElementDest($currentDelegation["TAS_UID"], $nextDel["TAS_UID"], $appFields); + + //Email Event + $emailEvent = new \ProcessMaker\BusinessModel\EmailEvent(); + $emailEvent->emailEventBetweenElementOriginAndElementDest( + $currentDelegation["TAS_UID"], + $nextDel["TAS_UID"], + $appFields + ); + //Derivate $aSP = isset( $aSP ) ? $aSP : null; diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 91f8eace7..6fdc45142 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -847,6 +847,18 @@ class Processes $oData->messageType[$key]["PRJ_UID"] = $sNewProUid; } } + + if (isset($oData->emailEvent)) { + foreach ($oData->emailEvent as $key => $value) { + $oData->emailEvent[$key]["PRJ_UID"] = $sNewProUid; + } + } + + if (isset($oData->filesManager)) { + foreach ($oData->filesManager as $key => $value) { + $oData->filesManager[$key]["PRO_UID"] = $sNewProUid; + } + } return true; } @@ -2389,7 +2401,7 @@ class Processes throw $e; } } - + /** * Renew the GUID's for all the Uids for all the elements * @@ -3168,6 +3180,60 @@ class Processes throw $e; } } + + public function getEmailEvent($processUid) + { + try { + $arrayEmailEvent = array(); + + $emailEvent = new \ProcessMaker\BusinessModel\EmailEvent(); + $criteria = $emailEvent->getEmailEventCriteria(); + + //Get data + $criteria->add(EmailEventPeer::PRJ_UID, $processUid, Criteria::EQUAL); + $rsCriteria = EmailEventPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $rsCriteria->next(); + while ($aRow = $rsCriteria->getRow()) { + $arrayEmailEvent[] = $aRow; + $rsCriteria->next(); + } + //Return + return $arrayEmailEvent; + } catch (Exception $e) { + throw $e; + } + } + + public function getFilesManager($processUid) + { + try { + $arrayFilesManager = array(); + //Get data + $criteria = new \Criteria("workflow"); + $criteria->addSelectColumn(\ProcessFilesPeer::PRF_UID); + $criteria->addSelectColumn(\ProcessFilesPeer::PRO_UID); + $criteria->addSelectColumn(\ProcessFilesPeer::USR_UID); + $criteria->addSelectColumn(\ProcessFilesPeer::PRF_UPDATE_USR_UID); + $criteria->addSelectColumn(\ProcessFilesPeer::PRF_PATH); + $criteria->addSelectColumn(\ProcessFilesPeer::PRF_TYPE); + $criteria->addSelectColumn(\ProcessFilesPeer::PRF_EDITABLE); + $criteria->addSelectColumn(\ProcessFilesPeer::PRF_CREATE_DATE); + $criteria->addSelectColumn(\ProcessFilesPeer::PRF_UPDATE_DATE); + $criteria->add(ProcessFilesPeer::PRO_UID, $processUid, Criteria::EQUAL); + $rsCriteria = ProcessFilesPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $rsCriteria->next(); + while ($aRow = $rsCriteria->getRow()) { + $arrayFilesManager[] = $aRow; + $rsCriteria->next(); + } + //Return + return $arrayFilesManager; + } catch (Exception $e) { + throw $e; + } + } public function getScriptTasks($processUid) { @@ -3462,6 +3528,48 @@ class Processes throw $e; } } + + /** + * Create Email-event records + * + * @param string $processUid Unique id of Process + * @param array $arrayData Data + * + * return void + */ + public function createEmailEvent($processUid, array $arrayData) + { + try { + $emailEvent = new \ProcessMaker\BusinessModel\EmailEvent(); + + foreach ($arrayData as $value) { + $emailEventData = $emailEvent->save($processUid, $value); + } + } catch (Exception $e) { + throw $e; + } + } + + /** + * Create Files Manager records + * + * @param string $processUid Unique id of Process + * @param array $arrayData Data + * + * return void + */ + public function createFilesManager($processUid, array $arrayData) + { + try { + $filesManager = new \ProcessMaker\BusinessModel\FilesManager(); + + foreach ($arrayData as $value) { + $filesManager->addProcessFilesManagerInDb($value); + } + } catch (Exception $e) { + throw $e; + } + } /** * Create Script-Task records @@ -3676,6 +3784,8 @@ class Processes $oData->messageTypeVariable = $this->getMessageTypeVariables($sProUid); $oData->messageEventDefinition = $this->getMessageEventDefinitions($sProUid); $oData->scriptTask = $this->getScriptTasks($sProUid); + $oData->emailEvent = $this->getEmailEvent($sProUid); + $oData->filesManager = $this->getFilesManager($sProUid); $oData->groupwfs = $this->groupwfsMerge($oData->groupwfs, $oData->processUser, "USR_UID"); $oData->process["PRO_TYPE_PROCESS"] = "PUBLIC"; @@ -4776,6 +4886,8 @@ class Processes $this->createMessageTypeVariable((isset($oData->messageTypeVariable))? $oData->messageTypeVariable : array()); $this->createMessageEventDefinition($arrayProcessData["PRO_UID"], (isset($oData->messageEventDefinition))? $oData->messageEventDefinition : array()); $this->createScriptTask($arrayProcessData["PRO_UID"], (isset($oData->scriptTask))? $oData->scriptTask : array()); + $this->createEmailEvent($arrayProcessData["PRO_UID"], (isset($oData->emailEvent))? $oData->emailEvent : array()); + $this->createFilesManager($arrayProcessData["PRO_UID"], (isset($oData->filesManager))? $oData->filesManager : array()); } /** @@ -5343,4 +5455,4 @@ class ObjectCellection return false; } } -} +} \ No newline at end of file diff --git a/workflow/engine/classes/model/map/TaskMapBuilder.php b/workflow/engine/classes/model/map/TaskMapBuilder.php index c7723abb2..97cfd91c7 100755 --- a/workflow/engine/classes/model/map/TaskMapBuilder.php +++ b/workflow/engine/classes/model/map/TaskMapBuilder.php @@ -159,7 +159,7 @@ class TaskMapBuilder $tMap->addColumn('TAS_SELFSERVICE_EXECUTION', 'TasSelfserviceExecution', 'string', CreoleTypes::VARCHAR, false, 15); - $tMap->addValidator('TAS_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'NORMAL|ADHOC|SUBPROCESS|HIDDEN|GATEWAYTOGATEWAY|WEBENTRYEVENT|END-MESSAGE-EVENT|START-MESSAGE-EVENT|INTERMEDIATE-THROW-MESSAGE-EVENT|INTERMEDIATE-CATCH-MESSAGE-EVENT|SCRIPT-TASK', 'Please enter a valid value for TAS_TYPE'); + $tMap->addValidator('TAS_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'NORMAL|ADHOC|SUBPROCESS|HIDDEN|GATEWAYTOGATEWAY|WEBENTRYEVENT|END-MESSAGE-EVENT|START-MESSAGE-EVENT|INTERMEDIATE-THROW-MESSAGE-EVENT|INTERMEDIATE-CATCH-MESSAGE-EVENT|SCRIPT-TASK|END-EMAIL-EVENT', 'Please enter a valid value for TAS_TYPE'); $tMap->addValidator('TAS_TIMEUNIT', 'validValues', 'propel.validator.ValidValuesValidator', 'MINUTES|HOURS|DAYS|WEEKS|MONTHS', 'Please select a valid value for TAS_TIMEUNIT.'); diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 9c68a072a..0394e6a14 100755 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -1255,7 +1255,7 @@ - + @@ -5078,4 +5078,26 @@ + + + + + + + + + + + + + + + + + + + + + +
diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index f7a9f0040..32bad6447 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2845,6 +2845,23 @@ CREATE TABLE SCRIPT_TASK PRIMARY KEY (SCRTAS_UID) )ENGINE=InnoDB DEFAULT CHARSET='utf8'; +#----------------------------------------------------------------------------- +#-- EMAIL_EVENT +#----------------------------------------------------------------------------- + +DROP TABLE IF EXISTS `EMAIL_EVENT`; +CREATE TABLE `EMAIL_EVENT` +( + `EMAIL_EVENT_UID` VARCHAR(32) NOT NULL, + `PRJ_UID` VARCHAR(32) default '' NOT NULL, + `EVN_UID` VARCHAR(32) NOT NULL, + `EMAIL_EVENT_FROM` VARCHAR(100) default '' NOT NULL, + `EMAIL_EVENT_TO` MEDIUMTEXT NOT NULL, + `EMAIL_EVENT_SUBJECT` VARCHAR(150) default '' NOT NULL, + `PRF_UID` VARCHAR(32) default '' NOT NULL, + PRIMARY KEY (`EMAIL_EVENT_UID`) +)ENGINE=InnoDB DEFAULT CHARSET='utf8'; + # This restores the fkey checks, after having unset them earlier SET FOREIGN_KEY_CHECKS = 1; diff --git a/workflow/engine/src/ProcessMaker/Services/api.ini b/workflow/engine/src/ProcessMaker/Services/api.ini index acb8ef668..ae2e8aab7 100644 --- a/workflow/engine/src/ProcessMaker/Services/api.ini +++ b/workflow/engine/src/ProcessMaker/Services/api.ini @@ -42,6 +42,7 @@ debug = 1 web-entry-event = "ProcessMaker\Services\Api\Project\WebEntryEvent" message-event-definition = "ProcessMaker\Services\Api\Project\MessageEventDefinition" script-task = "ProcessMaker\Services\Api\Project\ScriptTask" + email-event = "ProcessMaker\Services\Api\Project\EmailEvent" [alias: projects] project = "ProcessMaker\Services\Api\Project"