diff --git a/workflow/engine/classes/Processes.php b/workflow/engine/classes/Processes.php index 431aee38b..b4a2b66d7 100644 --- a/workflow/engine/classes/Processes.php +++ b/workflow/engine/classes/Processes.php @@ -1015,6 +1015,7 @@ class Processes $newGuid = $this->getUnusedDynaformGUID(); $map[$val['DYN_UID']] = $newGuid; $oData->dynaforms[$key]['DYN_UID'] = $newGuid; + unset($oData->dynaforms[$key]['DYN_ID']); } $oData->uid["DYNAFORM"] = $map; @@ -1980,6 +1981,7 @@ class Processes $map[$val['INP_DOC_UID']] = $newGuid; $oData->inputFiles[$oData->inputs[$key]['INP_DOC_UID']] = $newGuid; $oData->inputs[$key]['INP_DOC_UID'] = $newGuid; + unset($oData->inputs[$key]['INP_DOC_ID']); } $oData->uid["INPUT_DOCUMENT"] = $map; @@ -2112,6 +2114,7 @@ class Processes $newGuid = $this->getUnusedOutputGUID(); $map[$val['OUT_DOC_UID']] = $newGuid; $oData->outputs[$key]['OUT_DOC_UID'] = $newGuid; + unset($oData->outputs[$key]['OUT_DOC_ID']); } $oData->uid["OUTPUT_DOCUMENT"] = $map; diff --git a/workflow/engine/classes/model/Dynaform.php b/workflow/engine/classes/model/Dynaform.php index 67498cc8b..f1053c0ac 100644 --- a/workflow/engine/classes/model/Dynaform.php +++ b/workflow/engine/classes/model/Dynaform.php @@ -136,40 +136,44 @@ class Dynaform extends BaseDynaform } // set() - /** - * Creates the Dynaform + * Creates the Dynaform. * * @param array $aData Fields with : * $aData['DYN_UID'] the dynaform id * $aData['USR_UID'] the userid + * @param string $pmTableUid * @return void + * @throws Exception */ - - public function create ($aData, $pmTableUid='') + public function create($aData, $pmTableUid = '') { - if (! isset( $aData['PRO_UID'] )) { - throw (new PropelException( 'The dynaform cannot be created. The PRO_UID is empty.' )); + if (!isset($aData['PRO_UID'])) { + throw (new PropelException('The dynaform cannot be created. The PRO_UID is empty.')); } - $con = Propel::getConnection( DynaformPeer::DATABASE_NAME ); + $con = Propel::getConnection(DynaformPeer::DATABASE_NAME); try { - if (isset( $aData['DYN_UID'] ) && $aData['DYN_UID'] == '') { - unset( $aData['DYN_UID'] ); + if (isset($aData['DYN_UID']) && $aData['DYN_UID'] == '') { + unset($aData['DYN_UID']); } - if (! isset( $aData['DYN_UID'] )) { + if (!isset($aData['DYN_UID'])) { $dynUid = (G::generateUniqueID()); } else { $dynUid = $aData['DYN_UID']; } - $this->setDynUid( $dynUid ); + if (!empty($aData['DYN_ID'])) { + $this->setDynId($aData['DYN_ID']); + } + + $this->setDynUid($dynUid); $dynTitle = isset($aData['DYN_TITLE']) ? $aData['DYN_TITLE'] : 'Default Dynaform Title'; $this->setDynTitle($dynTitle); $dynDescription = isset($aData['DYN_DESCRIPTION']) ? $aData['DYN_DESCRIPTION'] : 'Default Dynaform Description'; $this->setDynDescription($dynDescription); - $this->setProUid( $aData['PRO_UID'] ); - $this->setDynType( isset( $aData['DYN_TYPE'] ) ? $aData['DYN_TYPE'] : 'xmlform' ); - $this->setDynFilename( $aData['PRO_UID'] . PATH_SEP . $dynUid ); - $this->setDynUpdateDate( date("Y-m-d H:i:s")); + $this->setProUid($aData['PRO_UID']); + $this->setDynType(isset($aData['DYN_TYPE']) ? $aData['DYN_TYPE'] : 'xmlform' ); + $this->setDynFilename($aData['PRO_UID'] . PATH_SEP . $dynUid); + $this->setDynUpdateDate(date("Y-m-d H:i:s")); if (isset($aData["DYN_CONTENT"])) { $this->setDynContent($aData["DYN_CONTENT"]); @@ -202,40 +206,39 @@ class Dynaform extends BaseDynaform if (!isset($aData['DYN_VERSION'])) { $aData['DYN_VERSION'] = 0; } - $this->setDynVersion( $aData['DYN_VERSION'] ); + $this->setDynVersion($aData['DYN_VERSION']); if ($this->validate()) { $con->begin(); - $this->setDynTitleContent( $dynTitle ); - $this->setDynDescriptionContent( $dynDescription ); + $this->setDynTitleContent($dynTitle); + $this->setDynDescriptionContent($dynDescription); $res = $this->save(); $con->commit(); - + //Add Audit Log - $mode = isset($aData['MODE'])? $aData['MODE'] : 'Determined by Fields'; + $mode = isset($aData['MODE']) ? $aData['MODE'] : 'Determined by Fields'; $description = ""; - if($pmTableUid!=''){ - $pmTable = AdditionalTablesPeer::retrieveByPK( $pmTableUid ); - $addTabName = $pmTable->getAddTabName(); - $description = "Create from a PM Table: ".$addTabName.", "; + if ($pmTableUid != '') { + $pmTable = AdditionalTablesPeer::retrieveByPK($pmTableUid); + $addTabName = $pmTable->getAddTabName(); + $description = "Create from a PM Table: " . $addTabName . ", "; } - G::auditLog("CreateDynaform", $description."Dynaform Title: ".$aData['DYN_TITLE'].", Type: ".$aData['DYN_TYPE'].", Description: ".$aData['DYN_DESCRIPTION'].", Mode: ".$mode); - + G::auditLog("CreateDynaform", $description . "Dynaform Title: " . $aData['DYN_TITLE'] . ", Type: " . $aData['DYN_TYPE'] . ", Description: " . $aData['DYN_DESCRIPTION'] . ", Mode: " . $mode); + $sXml = '' . "\n"; $sXml .= '' . "\n"; $sXml .= ''; - G::verifyPath( PATH_DYNAFORM . $this->getProUid(), true ); - $oFile = fopen( PATH_DYNAFORM . $this->getProUid() . '/' . $this->getDynUid() . '.xml', 'w' ); - fwrite( $oFile, $sXml ); - fclose( $oFile ); + G::verifyPath(PATH_DYNAFORM . $this->getProUid(), true); + $oFile = fopen(PATH_DYNAFORM . $this->getProUid() . '/' . $this->getDynUid() . '.xml', 'w'); + fwrite($oFile, $sXml); + fclose($oFile); return $this->getDynUid(); } else { $msg = ''; foreach ($this->getValidationFailures() as $objValidationFailure) { $msg .= $objValidationFailure->getMessage() . "
"; } - throw (new PropelException( 'The row cannot be created!', new PropelException( $msg ) )); + throw (new PropelException('The row cannot be created!', new PropelException($msg))); } - } catch (Exception $e) { $con->rollback(); throw ($e); diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index f36dc271a..47d0acf02 100644 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -300,6 +300,8 @@ abstract class Importer $this->preserveEmailEventConfiguration($emailEvent); } } + + $this->preserveCurrentId($this->importData["tables"]["workflow"]); $objectList = $granularObj->loadObjectsListSelected($this->importData, $newObjectArray); if (sizeof($objectList) > 0 && $processGranulate) { @@ -602,6 +604,8 @@ abstract class Importer foreach ($arrayWorkflowTables["emailEvent"] as &$emailEvent) { $this->preserveEmailEventConfiguration($emailEvent); } + + $this->preserveCurrentId($arrayWorkflowTables); $this->importWfTables($arrayWorkflowTables); @@ -873,6 +877,9 @@ abstract class Importer $result->tasks = $processes->getTaskRows($proUid); $result->abeConfigurations = $processes->getActionsByEmail($proUid); $result->emailEvents = $processes->getEmailEvent($proUid); + $result->dynaforms = $processes->getDynaformRows($proUid); + $result->inputs = $processes->getInputRows($proUid); + $result->outputs = $processes->getOutputRows($proUid); $this->setCurrentProcess($result); } @@ -944,4 +951,71 @@ abstract class Importer } } } + + /** + * Restore id values for the dynaforms, input documents and output documents. + * + * @param type $arrayWorkflowTables + */ + private function preserveCurrentId(&$arrayWorkflowTables) + { + $currentProcess = $this->getCurrentProcess(); + + //dynaforms + foreach ($arrayWorkflowTables["dynaforms"] as &$data) { + if (!is_object($currentProcess)) { + unset($data['DYN_ID']); + continue; + } + $currentElements = $currentProcess->dynaforms; + if (!is_array($currentElements)) { + unset($data['DYN_ID']); + continue; + } + foreach ($currentElements as $currentElement) { + if ($currentElement["PRO_UID"] === $data["PRO_UID"] && + $currentElement["DYN_UID"] === $data["DYN_UID"]) { + $data['DYN_ID'] = $currentElement["DYN_ID"]; + } + } + } + + //input documents + foreach ($arrayWorkflowTables["inputs"] as &$data) { + if (!is_object($currentProcess)) { + unset($data['INP_DOC_ID']); + continue; + } + $currentElements = $currentProcess->inputs; + if (!is_array($currentElements)) { + unset($data['INP_DOC_ID']); + continue; + } + foreach ($currentElements as $currentElement) { + if ($currentElement["PRO_UID"] === $data["PRO_UID"] && + $currentElement["INP_DOC_UID"] === $data["INP_DOC_UID"]) { + $data['INP_DOC_ID'] = $currentElement['INP_DOC_ID']; + } + } + } + + //output documents + foreach ($arrayWorkflowTables["outputs"] as &$data) { + if (!is_object($currentProcess)) { + unset($data['OUT_DOC_ID']); + continue; + } + $currentElements = $currentProcess->outputs; + if (!is_array($currentElements)) { + unset($data['OUT_DOC_ID']); + continue; + } + foreach ($currentElements as $currentElement) { + if ($currentElement["PRO_UID"] === $data["PRO_UID"] && + $currentElement["OUT_DOC_UID"] === $data["OUT_DOC_UID"]) { + $data['OUT_DOC_ID'] = $currentElement['OUT_DOC_ID']; + } + } + } + } }