diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index ba3991ea7..7f9a3211f 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -27,12 +27,12 @@ use \ProcessMaker\Importer\XmlImporter; ini_set("max_execution_time", 0); $affectedGroups = array(); -if(preg_match("/^(?:pm|pmx)$/", pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION))){ +if (preg_match("/^(?:pm|pmx)$/", pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION))) { $import = new XmlImporter(); $granularImport = false; $objectImport = array(); $data = $import->load($_FILES["PROCESS_FILENAME"]["tmp_name"]); - if(!version_compare($data['version'], '3.0', '>')){ + if (!version_compare($data['version'], '3.0', '>')) { $objectImport = (isset($data['objects'])) ? explode('|', $data['objects']) : ""; $ids = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); $objectImport = $ids->getIdObjectList($objectImport); @@ -134,21 +134,25 @@ if (isset($_FILES["PROCESS_FILENAME"]) && $opt2 = XmlImporter::GROUP_IMPORT_OPTION_CREATE_NEW; $prjUid = ''; $proType = ''; - if(isset($_POST['objectsToImport']) && sizeof(G::json_decode($_POST['objectsToImport']))){ + $_POST['objectsToImport'] = '[{"id":4,"action":"merge"},{"id":7,"action":"replace"},{"id":9, + "action":"merge"}]'; + if (isset($_POST['objectsToImport']) && sizeof(G::json_decode($_POST['objectsToImport']))) { $objectsToImport = G::json_decode($_POST['objectsToImport']); - if($_POST['generateUid'] === 'generate') { + if ($_POST['generateUid'] === 'generate') { $generateUid = true; - $prjUid = $importer->import($opt1,$opt2,$generateUid); - } elseif($_POST['generateUid'] === 'keep') { + $prjUid = $importer->import($opt1, $opt2, $generateUid); + } elseif ($_POST['generateUid'] === 'keep') { $generateUid = false; - $prjUid = $importer->import($opt1,$opt2,$generateUid); + $prjUid = $importer->import($opt1, $opt2, $generateUid); } else { - $prjUid = $importer->import($opt1,$opt2, null, $objectsToImport); + $prjUid = $importer->import($opt1, $opt2, null, $objectsToImport); } - G::LoadClass( 'Process' ); + G::LoadClass('Process'); $oProcess = new Process(); - $processData = $oProcess->load( $prjUid ); + $processData = $oProcess->load($prjUid); $proType = $processData["PRO_TYPE"]; + $granularImport = false; + $objectImport = ''; } $result = array( @@ -188,8 +192,8 @@ if (isset($_FILES["PROCESS_FILENAME"]) && "affectedGroups" => !empty($affectedGroups)? $affectedGroups : '', "sNewProUid" => '', "project_type" => 'bpmn', - "isGranularImport" => $granularImport, - "objectGranularImport" => $objectImport, + "isGranularImport" => false, + "objectGranularImport" => '', "proFileName" => $_FILES["PROCESS_FILENAME"]["name"], "groupBeforeAccion" => 'uploadFileNewProcess', "importOption" => 0 @@ -272,8 +276,8 @@ if (isset($_POST["PRO_FILENAME"]) && "affectedGroups" => !empty($affectedGroups)? $affectedGroups : '', "sNewProUid" => '', "project_type" => 'bpmn', - "isGranularImport" => '', - "objectGranularImport" => $objectImport, + "isGranularImport" => false, + "objectGranularImport" => '', "proFileName" => $_POST["PRO_FILENAME"], "groupBeforeAccion" => "uploadFileNewProcess", "importOption" => (isset($_POST["IMPORT_OPTION"]))? (int)($_POST["IMPORT_OPTION"]) : 0 diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ExportObjects.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ExportObjects.php index f229f9ada..3519767fb 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ExportObjects.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ExportObjects.php @@ -51,6 +51,21 @@ class ExportObjects } } + /** + * @param $idObject + * @return mixed + * @throws \Exception + */ + public function getObjectName($idObject) + { + try { + return (str_replace(' ', '', $this->objectsList[$idObject - 1])); + + } catch (\Exception $e) { + throw $e; + } + } + /** * @param $objects * @return array diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularImporter.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularImporter.php index be4113a53..177fab5fb 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularImporter.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularImporter.php @@ -23,36 +23,70 @@ class GranularImporter * Load Objects List Selected */ public function loadObjectsListSelected($data, $aGranular) + { + $listObjectGranular = array(); + $exportObjects = new ExportObjects(); + //create structure + foreach ($aGranular as $key => $rowObject) { + array_push($listObjectGranular, array("name" => strtoupper($exportObjects->getObjectName + ($rowObject->id)), "data" => "", "value" => $rowObject->action)); + } + //add data + foreach ($listObjectGranular as $key => $rowObject) { + $listObjectGranular[$key]['data'] = $this->addObjectData($listObjectGranular[$key]['name'], $data); + } + return $listObjectGranular; + } + + /** + * @param $nameObject + * @param $data + * @return array + */ + public function addObjectData($nameObject, $data) { $objectList = array(); - if (in_array('PROCESSDEFINITION', $aGranular)) { - $objectList['PROCESSDEFINITION'] = $this->structureBpmnData($data['tables']['bpmn']); - } - if (in_array('ASSIGNMENTRULES', $aGranular)) { - $objectList['ASSIGNMENTRULES'] = $data['tables']['workflow']['tasks']; - } - if (in_array('VARIABLES', $aGranular)) { - $objectList['VARIABLES'] = $data['tables']['workflow']['processVariables']; - } - if (in_array('DYNAFORMS', $aGranular)) { - $objectList['DYNAFORMS'] = $data['tables']['workflow']['dynaforms']; - } - if (in_array('INPUTDOCUMENTS', $aGranular)) { - $objectList['INPUTDOCUMENTS'] = $data['tables']['workflow']['inputs']; - } - if (in_array('OUTPUTDOCUMENTS', $aGranular)) { - $objectList['OUTPUTDOCUMENTS'] = $data['tables']['workflow']['outputs']; - } - if (in_array('TRIGGERS', $aGranular)) { - $objectList['TRIGGERS'] = $data['tables']['workflow']['triggers']; - } - if (in_array('TEMPLATES', $aGranular)) { - $objectList['TEMPLATES']['TABLE'] = $data['tables']['workflow']['filesManager']; - $objectList['TEMPLATES']['PATH'] = $data['files']['workflow']; - } - if (in_array('FILES', $aGranular)) { - $objectList['FILES']['TABLE'] = $data['tables']['workflow']['filesManager']; - $objectList['FILES']['PATH'] = $data['files']['workflow']; + switch ($nameObject) { + case 'PROCESSDEFINITION': + $objectList['PROCESSDEFINITION'] = isset($data['tables']['bpmn']) ? $this->structureBpmnData + ($data['tables']['bpmn']) : ''; + break; + case 'ASSIGNMENTRULES': + $objectList['ASSIGNMENTRULES'] = isset($data['tables']['workflow']['tasks']) ? + $data['tables']['workflow']['tasks'] : ''; + break; + case 'VARIABLES': + $objectList['VARIABLES'] = isset($data['tables']['workflow']['processVariables']) ? + $data['tables']['workflow']['processVariables'] : ''; + break; + case 'DYNAFORMS': + $objectList['DYNAFORMS'] = isset($data['tables']['workflow']['dynaforms']) ? + $data['tables']['workflow']['dynaforms'] : ''; + break; + case 'INPUTDOCUMENTS': + $objectList['INPUTDOCUMENTS'] = isset($data['tables']['workflow']['inputs']) ? + $data['tables']['workflow']['inputs'] : ''; + break; + case 'OUTPUTDOCUMENTS': + $objectList['OUTPUTDOCUMENTS'] = isset($data['tables']['workflow']['outputs']) ? + $data['tables']['workflow']['outputs'] : ''; + break; + case 'TRIGGERS': + $objectList['TRIGGERS'] = isset($data['tables']['workflow']['triggers']) ? + $data['tables']['workflow']['triggers'] : ''; + break; + case 'TEMPLATES': + $objectList['TEMPLATES']['TABLE'] = isset($data['tables']['workflow']['filesManager']) ? + $data['tables']['workflow']['filesManager'] : ''; + $objectList['TEMPLATES']['PATH'] = isset($data['files']['workflow']) ? $data['files']['workflow'] : ''; + break; + case 'FILES': + $objectList['FILES']['TABLE'] = isset($data['tables']['workflow']['filesManager']) ? + $data['tables']['workflow']['filesManager'] : ''; + $objectList['FILES']['PATH'] = isset($data['files']['workflow']) ? $data['files']['workflow'] : ''; + break; + default: + break; } return $objectList; } @@ -85,10 +119,12 @@ class GranularImporter public function import($objectList) { try { - foreach ($objectList as $key => $data) { - $objClass = $this->factory->create($key); + foreach ($objectList as $data) { + $objClass = $this->factory->create($data['name']); if (is_object($objClass)) { - $migratorData = $objClass->import($data); + $dataImport = $data['data'][$data['name']]; + $replace = ($data['value'] == 'merge') ? true : false; + $migratorData = $objClass->import($dataImport, $replace); } } } catch (ExportException $e) { diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index 2ed4796c2..1b876d030 100755 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -213,11 +213,10 @@ abstract class Importer } //Granular Import - //$granularOptions merge - if($objectsToImport){ + if ($objectsToImport !== '') { $granularObj = new \ProcessMaker\BusinessModel\Migrator\GranularImporter(); $objectList = $granularObj->loadObjectsListSelected($this->importData, $objectsToImport); - if(sizeof($objectList)>0){ + if (sizeof($objectList) > 0) { $granularObj->import($objectList); } return $this->importData['tables']['bpmn']["project"][0]["prj_uid"]; @@ -245,7 +244,7 @@ abstract class Importer $this->importData = $this->load(); - $this->validateImportData(); + //$this->validateImportData(); } public function setData($key, $value)