diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 1c2aec660..962e378ea 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -1984,10 +1984,12 @@ class Processes { $map = array(); foreach ($oData->inputs as $key => $val) { + $oldUid = $val['INP_DOC_UID']; $newGuid = $this->getUnusedInputGUID(); $map[$val['INP_DOC_UID']] = $newGuid; $oData->inputFiles[$oData->inputs[$key]['INP_DOC_UID']] = $newGuid; $oData->inputs[$key]['INP_DOC_UID'] = $newGuid; + $oData->inputs[$key]['INP_DOC_UID_OLD'] = $oldUid; } if (!isset($oData->inputFiles)) { $oData->inputFiles = array(); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php index 2195ca234..cd877afe7 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php @@ -41,7 +41,7 @@ class FilesManager * * @access public */ - public function getProcessFilesManagerPath($sProcessUID, $path) + public function getProcessFilesManagerPath($sProcessUID, $path, $getContent = true) { try { $checkPath = substr($path, -1); @@ -85,7 +85,10 @@ class FilesManager } foreach ($aFiles as $aFile) { $arrayFileUid = $this->getFileManagerUid($sDirectory.$aFile['FILE']); - $fcontent = ''; + $fcontent = ""; + if ($getContent === true) { + $fcontent = file_get_contents($sDirectory . $aFile['FILE']); + } $fileUid = $arrayFileUid["PRF_UID"]; if ($fileUid != null) { $oProcessFiles = \ProcessFilesPeer::retrieveByPK($fileUid); @@ -243,6 +246,11 @@ class FilesManager } } + /** + * @param $aData + * @throws Exception + * @throws \Exception + */ public function addProcessFilesManagerInDb($aData) { try { @@ -250,7 +258,26 @@ class FilesManager $aData = array_change_key_case($aData, CASE_UPPER); $oProcessFiles->fromArray($aData, \BasePeer::TYPE_FIELDNAME); - $sDirectory = PATH_DATA_MAILTEMPLATES . $aData['PRO_UID'] . PATH_SEP . basename($aData['PRF_PATH']); + $path = $aData['PRF_PATH']; + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $path = str_replace("/", DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR, $path); + } + + $path = explode(DIRECTORY_SEPARATOR,$path); + $fileDirectory = $path[count($path)-3]; + + switch ($fileDirectory) { + case 'mailTemplates': + $sDirectory = PATH_DATA_MAILTEMPLATES . $aData['PRO_UID'] . PATH_SEP . basename($aData['PRF_PATH']); + break; + case 'public': + $sDirectory = PATH_DATA_PUBLIC . $aData['PRO_UID'] . PATH_SEP . basename($aData['PRF_PATH']); + break; + default: + throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array($aData['PRF_PATH']))); + break; + } + $oProcessFiles->setPrfPath($sDirectory); if($this->existsProcessFile($aData['PRF_UID'])) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php index 087df5e12..9e58f3a09 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php @@ -36,6 +36,19 @@ class ProcessDefinitionMigrator implements Importable, Exportable try { //Bpmn elements $pjrUid =$this->bpmn->createFromStruct($data['bpmn'], false); + //Import workflow elements + $this->afterImport($data); + + } catch (\Exception $e) { + $exception = new ImportException($e->getMessage()); + $exception->setNameException($this->className); + throw($exception); + } + } + + public function afterImport($data) + { + try { //Workflow elements $this->processes->createTaskRows($data['workflow']['tasks']); $this->processes->createTaskUserRows($data['workflow']['taskusers']); @@ -70,11 +83,6 @@ class ProcessDefinitionMigrator implements Importable, Exportable } } - public function afterImport($data) - { - // TODO: Implement afterImport() method. - } - public function beforeExport() { // TODO: Implement beforeExport() method. diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index d7fc63c41..8ca49dca3 100755 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -253,6 +253,10 @@ abstract class Importer $granularObj->import($objectList); } } + if($option === self::IMPORT_OPTION_CREATE_NEW || $option === self::IMPORT_OPTION_KEEP_WITHOUT_CHANGING_AND_CREATE_NEW){ + $oProcessDef = new \ProcessMaker\BusinessModel\Migrator\ProcessDefinitionMigrator(); + $oProcessDef->afterImport($this->importData['tables']); + } return $projectUid; } diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index d3fcb0adc..2f34522a4 100755 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -1317,6 +1317,18 @@ class Workflow extends Handler } } + foreach ($arrayWorkflowData["inputs"] as $keyin => $value) { + $newUid = $value["INP_DOC_UID"]; + if(isset($value["INP_DOC_UID_OLD"])){ + foreach ($arrayWorkflowData["processVariables"] as $keypv => $vars) { + if($vars['INP_DOC_UID'] === $value["INP_DOC_UID_OLD"]){ + $arrayWorkflowData["processVariables"][$keypv]["INP_DOC_UID"] = $newUid; + } + } + unset($arrayWorkflowData["inputs"][$keyin]["INP_DOC_UID_OLD"]); + } + } + //Workflow files foreach ($arrayWorkflowFile as $key => $value) { $arrayFile = $value; diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/FilesManager.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/FilesManager.php index 2f744e76e..b070baf8b 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/FilesManager.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/FilesManager.php @@ -14,15 +14,16 @@ class FilesManager extends Api /** * @param string $prj_uid {@min 32} {@max 32} * @param string $path + * @param string $get_content * * @url GET /:prj_uid/file-manager */ - public function doGetProcessFilesManager($prj_uid, $path = '') + public function doGetProcessFilesManager($prj_uid, $path = '', $get_content = true) { try { $filesManager = new \ProcessMaker\BusinessModel\FilesManager(); if ($path != '') { - $arrayData = $filesManager->getProcessFilesManagerPath($prj_uid, $path); + $arrayData = $filesManager->getProcessFilesManagerPath($prj_uid, $path, $get_content); } else { $arrayData = $filesManager->getProcessFilesManager($prj_uid); }