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 @@