diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index f41083345..ba3991ea7 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -27,6 +27,18 @@ use \ProcessMaker\Importer\XmlImporter; ini_set("max_execution_time", 0); $affectedGroups = array(); +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', '>')){ + $objectImport = (isset($data['objects'])) ? explode('|', $data['objects']) : ""; + $ids = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); + $objectImport = $ids->getIdObjectList($objectImport); + $granularImport = true; + } +} /*----------------------------------********---------------------------------*/ if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=") && isset($_FILES["PROCESS_FILENAME"]) && @@ -61,10 +73,6 @@ if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm $arrayTrigger = $data["tables"]["workflow"]["triggers"]; $projectTitle = $data["tables"]["bpmn"]["project"][0]["prj_name"]; } - if(isset($data['objects'])){ - $objectImport = $data['objects']; - $granularImport = 'YES'; - } break; } @@ -124,21 +132,25 @@ if (isset($_FILES["PROCESS_FILENAME"]) && try { $opt1 = XmlImporter::IMPORT_OPTION_CREATE_NEW; $opt2 = XmlImporter::GROUP_IMPORT_OPTION_CREATE_NEW; - if($_POST['generateUid'] === 'generate') { - $generateUid = true; - $prjUid = $importer->import($opt1,$opt2,$generateUid); - } elseif($_POST['generateUid'] === 'keep') { - $generateUid = false; - $prjUid = $importer->import($opt1,$opt2,$generateUid); - } else { - $prjUid = $importer->import(); + $prjUid = ''; + $proType = ''; + if(isset($_POST['objectsToImport']) && sizeof(G::json_decode($_POST['objectsToImport']))){ + $objectsToImport = G::json_decode($_POST['objectsToImport']); + if($_POST['generateUid'] === 'generate') { + $generateUid = true; + $prjUid = $importer->import($opt1,$opt2,$generateUid); + } elseif($_POST['generateUid'] === 'keep') { + $generateUid = false; + $prjUid = $importer->import($opt1,$opt2,$generateUid); + } else { + $prjUid = $importer->import($opt1,$opt2, null, $objectsToImport); + } + G::LoadClass( 'Process' ); + $oProcess = new Process(); + $processData = $oProcess->load( $prjUid ); + $proType = $processData["PRO_TYPE"]; } - G::LoadClass( 'Process' ); - $oProcess = new Process(); - $processData = $oProcess->load( $prjUid ); - $proType = $processData["PRO_TYPE"]; - $result = array( "success" => true, "catchMessage" => '', @@ -148,8 +160,8 @@ if (isset($_FILES["PROCESS_FILENAME"]) && "affectedGroups" => '', "sNewProUid" => $prjUid, "project_type" => 'bpmn', - "isGranularImport" => '', - "objectGranularImport" => '', + "isGranularImport" => $granularImport, + "objectGranularImport" => $objectImport, "project_type_aux" => $proType ); } catch (Exception $e) { @@ -217,25 +229,11 @@ if (isset($_POST["PRO_FILENAME"]) && break; } - //Check the Granular Import selected by User - $granularOptions = ''; - $granularImport = 'NO'; - if(isset($_POST["granularOptions"])){ - $granularImport = 'YES'; - $export = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); - $granularOptions = $export->mapObjectList($_POST["granularOptions"]); - - } - $importer = new XmlImporter(); $importer->setData("usr_uid", $_SESSION["USER_LOGGED"]); $importer->setSourceFile(PATH_DOCUMENT . "input" . PATH_SEP . $_POST["PRO_FILENAME"]); try { - if(version_compare($importer->getVersion(), '3.0', '>')){ - //To do - } - $prjUid = $importer->import($option, $optionGroup, null, $granularImport,$granularOptions); G::LoadClass( 'Process' ); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ExportObjects.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ExportObjects.php index 216b5e1f5..a8e1c8fbe 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ExportObjects.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ExportObjects.php @@ -63,5 +63,28 @@ class ExportObjects throw $e; } } + + /** + * @param $objects + * @return array + * @throws \Exception + */ + public function getIdObjectList($objects) + { + try { + $idObjectList = array(); + foreach ($this->objectsList as $key => $val) { + $key++; + foreach ($objects as $row) { + if(strtoupper(str_replace(' ', '', $this->objectsList[$key - 1])) === $row){ + array_push($idObjectList, $key); + } + } + } + return $idObjectList; + } catch (\Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index 7e0cf55cb..2ed4796c2 100755 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -77,7 +77,7 @@ abstract class Importer } } - public function import($option = self::IMPORT_OPTION_CREATE_NEW, $optionGroup = self::GROUP_IMPORT_OPTION_CREATE_NEW, $generateUidFromJs = null, $granularImporter = 'NO', $granularOptions = '') + public function import($option = self::IMPORT_OPTION_CREATE_NEW, $optionGroup = self::GROUP_IMPORT_OPTION_CREATE_NEW, $generateUidFromJs = null, $objectsToImport = '') { $this->prepare(); @@ -170,10 +170,10 @@ abstract class Importer break; case self::IMPORT_OPTION_OVERWRITE: //Shouldn't generate new UID for all objects - if($granularImporter === 'NO'){ + if($objectsToImport === ''){ $this->removeProject(); } else { - if(in_array('PROCESSDEFINITION', $granularOptions)){ + if(in_array('PROCESSDEFINITION', $objectsToImport)){ $this->removeProject(); } } @@ -213,20 +213,14 @@ abstract class Importer } //Granular Import - switch ($granularImporter) { - case '': - throw new \Exception(\G::LoadTranslation("ID_GRANULAR"),self::IMPORTED_PROJECT_DOES_NOT_EXISTS); - break; - case 'YES': - if($granularOptions === 'YES'){ - $granularObj = new \ProcessMaker\BusinessModel\Migrator\GranularImporter(); - $objectList = $granularObj->loadObjectsListSelected($this->importData, $granularOptions); - if(sizeof($objectList)>0){ - $granularObj->import($objectList); - } - return $this->importData['tables']['bpmn']["project"][0]["prj_uid"]; - } - break; + //$granularOptions merge + if($objectsToImport){ + $granularObj = new \ProcessMaker\BusinessModel\Migrator\GranularImporter(); + $objectList = $granularObj->loadObjectsListSelected($this->importData, $objectsToImport); + if(sizeof($objectList)>0){ + $granularObj->import($objectList); + } + return $this->importData['tables']['bpmn']["project"][0]["prj_uid"]; } $result = $this->doImport($generateUid); diff --git a/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php b/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php index a9fd76734..5d4c2444d 100644 --- a/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php +++ b/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php @@ -131,13 +131,13 @@ class XmlImporter extends Importer } } //Get the ProcessObject - $this->objects = (isset($this->metadata['processObject'])) ? $this->metadata['processObject'] : ''; + $this->objects = (isset($this->metadata['export_objects'])) ? $this->metadata['export_objects'] : ''; return array( "tables" => $tables, "files" => array("workflow" => $wfFiles, "bpmn" => array()), - "version" => $this->version, - "objects" => $this->objects + "version" => $this->getVersion(), + "objects" => $this->getObjects() ); }