diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 2dfb01991..b28b50d36 100644 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -3698,6 +3698,31 @@ class Processes } } + public function getElementTaskRelation($processUid){ + try { + $arrayElementTask = array(); + //Get data + $criteria = new \Criteria("workflow"); + $criteria->addSelectColumn(\ElementTaskRelationPeer::ETR_UID); + $criteria->addSelectColumn(\ElementTaskRelationPeer::PRJ_UID); + $criteria->addSelectColumn(\ElementTaskRelationPeer::ELEMENT_UID); + $criteria->addSelectColumn(\ElementTaskRelationPeer::ELEMENT_TYPE); + $criteria->addSelectColumn(\ElementTaskRelationPeer::TAS_UID); + $criteria->add(ElementTaskRelationPeer::PRJ_UID, $processUid, Criteria::EQUAL); + $rsCriteria = ElementTaskRelationPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $rsCriteria->next(); + while ($aRow = $rsCriteria->getRow()) { + $arrayElementTask[] = $aRow; + $rsCriteria->next(); + } + //Return + return $arrayElementTask; + } catch (Exception $e) { + throw $e; + } + } + public function getFilesManager($processUid, $template = 'all') { try { @@ -4464,6 +4489,7 @@ class Processes $oData->emailEvent = $this->getEmailEvent($sProUid); $oData->filesManager = $this->getFilesManager($sProUid); $oData->abeConfiguration = $this->getActionsByEmail($sProUid); + $oData->elementTask = $this->getElementTaskRelation($sProUid); $oData->groupwfs = $this->groupwfsMerge($oData->groupwfs, $oData->processUser, "USR_UID"); $oData->process["PRO_TYPE_PROCESS"] = "PUBLIC"; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ElementTaskRelation.php b/workflow/engine/src/ProcessMaker/BusinessModel/ElementTaskRelation.php index 9f06bd850..46882b3d8 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ElementTaskRelation.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ElementTaskRelation.php @@ -156,7 +156,7 @@ class ElementTaskRelation * * return array Return data of the new Element-Task-Relation created */ - public function create($projectUid, array $arrayData) + public function create($projectUid, array $arrayData, $verifyPrjUid = true) { try { //Verify data @@ -173,7 +173,9 @@ class ElementTaskRelation unset($arrayData["PRJ_UID"]); //Verify data - $process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]); + if($verifyPrjUid){ + $process->throwExceptionIfNotExistsProcess($projectUid, $this->arrayFieldNameForException["projectUid"]); + } $this->throwExceptionIfDataIsInvalid("", $projectUid, $arrayData); @@ -218,6 +220,31 @@ class ElementTaskRelation } } + public function existsElementUid($elementUid) + { + try { + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\ElementTaskRelationPeer::ETR_UID); + $criteria->addSelectColumn(\ElementTaskRelationPeer::PRJ_UID); + $criteria->addSelectColumn(\ElementTaskRelationPeer::ELEMENT_UID); + $criteria->addSelectColumn(\ElementTaskRelationPeer::ELEMENT_TYPE); + $criteria->addSelectColumn(\ElementTaskRelationPeer::TAS_UID); + $criteria->add( \ElementTaskRelationPeer::ELEMENT_UID, $elementUid ); + $rs = \ElementTaskRelationPeer::doSelectRS( $criteria ); + $rs->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + if ($rs->next()) { + return true; + } else { + return false; + } + + return $criteria; + } catch (\Exception $e) { + throw $e; + } + } + /** * Delete Element-Task-Relation * diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index 09bd2d1e7..d8a40ecf7 100644 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -512,6 +512,34 @@ abstract class Importer $arrayWorkflowTables = $this->importData["tables"]["workflow"]; $arrayWorkflowFiles = $this->importData["files"]["workflow"]; + //Element Task Relation + $aElementTask = (isset($arrayWorkflowTables["elementTask"]))? $arrayWorkflowTables["elementTask"] : array(); + $elementTaskRelation = new \ProcessMaker\BusinessModel\ElementTaskRelation(); + foreach ($aElementTask as $key => $row) { + $exists = $elementTaskRelation->existsElementUid($row['ELEMENT_UID']); + if(!$exists){ + $arrayResult = $elementTaskRelation->create( + $row['PRJ_UID'], + [ + 'ELEMENT_UID' => $row['ELEMENT_UID'], + 'ELEMENT_TYPE' => $row['ELEMENT_TYPE'], + 'TAS_UID' => $row['TAS_UID'] + ], + false + ); + $task = new \Task(); + foreach ($arrayWorkflowTables["tasks"] as $key => $value) { + $arrayTaskData = $value; + if ( $arrayTaskData['TAS_UID'] === $row['TAS_UID'] ) { + if(!$task->taskExists($row['TAS_UID'])){ + $tasUid = $task->create($arrayTaskData, false); + break; + } + } + } + } + } + //Import BPMN tables $result = $this->importBpmnTables($arrayBpmnTables, $generateUid);