diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index 4c38068de..053a11b88 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -29,32 +29,32 @@ $affectedGroups = array(); $granularImport = false; $objectImport = array(); -if (isset($_FILES["PROCESS_FILENAME"]["name"]) && (preg_match("/^(?:pm|pmx)$/", pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION)))) { - $import = new XmlImporter(); - $data = $import->load($_FILES["PROCESS_FILENAME"]["tmp_name"]); - - if (version_compare($data['version'], '3.0', '>') && isset($_POST['objectsToImport']) && $_POST['objectsToImport'] === '') { - $objectImport = (isset($data['objects'])) ? explode('|', $data['objects']) : ""; - $ids = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); - $objectImport = $ids->getIdObjectList($objectImport); - $granularImport = true; - $result = array( - "success" => true, - "catchMessage" => '', - "ExistProcessInDatabase" => 0, - "ExistGroupsInDatabase" => 0, - "notExistProcessInDatabase" => 0, - "affectedGroups" => '', - "sNewProUid" => '', - "project_type" => 'bpmn', - "isGranularImport" => $granularImport, - "objectGranularImport" => $objectImport, - "project_type_aux" => '' - ); - echo G::json_encode($result); - exit(0); - } -} +//if (isset($_FILES["PROCESS_FILENAME"]["name"]) && (preg_match("/^(?:pm|pmx)$/", pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION)))) { +// $import = new XmlImporter(); +// $data = $import->load($_FILES["PROCESS_FILENAME"]["tmp_name"]); +// +// if (version_compare($data['version'], '3.0', '>') && isset($_POST['objectsToImport']) && $_POST['objectsToImport'] === '') { +// $objectImport = (isset($data['objects'])) ? explode('|', $data['objects']) : ""; +// $ids = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); +// $objectImport = $ids->getIdObjectList($objectImport); +// $granularImport = true; +// $result = array( +// "success" => true, +// "catchMessage" => '', +// "ExistProcessInDatabase" => 0, +// "ExistGroupsInDatabase" => 0, +// "notExistProcessInDatabase" => 0, +// "affectedGroups" => '', +// "sNewProUid" => '', +// "project_type" => 'bpmn', +// "isGranularImport" => $granularImport, +// "objectGranularImport" => $objectImport, +// "project_type_aux" => '' +// ); +// echo G::json_encode($result); +// exit(0); +// } +//} /*----------------------------------********---------------------------------*/ if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=") && isset($_FILES["PROCESS_FILENAME"]) && @@ -148,6 +148,7 @@ if (isset($_FILES["PROCESS_FILENAME"]) && $opt2 = XmlImporter::GROUP_IMPORT_OPTION_CREATE_NEW; $prjUid = ''; $proType = ''; + $granularImport = false; $objectsToImport = ''; if (isset($_POST['objectsToImport']) && sizeof(G::json_decode($_POST['objectsToImport']))){ $objectsToImport = G::json_decode($_POST['objectsToImport']); @@ -261,11 +262,49 @@ if (isset($_POST["PRO_FILENAME"]) && try { $objectsToImport = ''; + + /*if (isset($_POST['PRO_FILENAME']) && (preg_match("/^(?:pm|pmx)$/", pathinfo($_POST['PRO_FILENAME'], PATHINFO_EXTENSION)))) { + $import = new XmlImporter();*/ + $data = $importer->load(); + // only uploadFileNewProcessExist?? + if (version_compare($data['version'], '3.0', '>') && isset($_POST['objectsToImport']) && $_POST['objectsToImport'] === '' && $_POST['IMPORT_OPTION']==="1") { + $objectImport = (isset($data['objects'])) ? explode('|', $data['objects']) : ""; + $ids = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); + $objectImport = $ids->getIdObjectList($objectImport); + $granularImport = true; + $result = array( + "success" => true, + "catchMessage" => '', + "ExistProcessInDatabase" => 0, + "ExistGroupsInDatabase" => 0, + "notExistProcessInDatabase" => 0, + "affectedGroups" => '', + "sNewProUid" => '', + "project_type" => 'bpmn', + "isGranularImport" => $granularImport, + "objectGranularImport" => $objectImport, + "project_type_aux" => '' + ); + echo G::json_encode($result); + exit(0); + } +// } + + if (version_compare($data['version'], '3.0', '>') && $_POST['IMPORT_OPTION']==="3") { + $objectsToImport = []; + $objects = (isset($data['objects'])) ? explode('|', $data['objects']) : ""; + $ids = new \ProcessMaker\BusinessModel\Migrator\ExportObjects(); + $objects = $ids->getIdObjectList($objects); + foreach ($objects as $object) { + $objectsToImport[] = (object)array('id' => $object, 'action' => 'replace'); + } + } + if (isset($_POST['objectsToImport']) && sizeof(G::json_decode($_POST['objectsToImport']))){ $objectsToImport = G::json_decode($_POST['objectsToImport']); } $prjUid = $importer->import($option, $optionGroup, null, $objectsToImport); - + G::LoadClass( 'Process' ); $oProcess = new Process(); $processData = $oProcess->load( $prjUid ); diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index 1b27b2035..a075a498c 100755 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -401,11 +401,11 @@ abstract class Importer // Build BPMN project struct $project = $tables["project"][0]; $diagram = $tables["diagram"][0]; - $diagram["activities"] = $tables["activity"]; + $diagram["activities"] = (isset($tables["activity"]))? $tables["activity"] : array(); $diagram["artifacts"] = (isset($tables["artifact"]))? $tables["artifact"] : array(); - $diagram["events"] = $tables["event"]; - $diagram["flows"] = $tables["flow"]; - $diagram["gateways"] = $tables["gateway"]; + $diagram["events"] = (isset($tables["event"]))? $tables["event"] : array(); + $diagram["flows"] = (isset($tables["flow"]))? $tables["flow"] : array(); + $diagram["gateways"] = (isset($tables["gateway"]))? $tables["gateway"]: array(); $diagram["data"] = (isset($tables["data"]))? $tables["data"] : array(); $diagram["participants"] = (isset($tables["participant"]))? $tables["participant"] : array(); $diagram["laneset"] = (isset($tables["laneset"]))? $tables["laneset"] : array(); @@ -433,58 +433,62 @@ abstract class Importer public function doImport($generateUid = true) { - $arrayBpmnTables = $this->importData["tables"]["bpmn"]; - $arrayWorkflowTables = $this->importData["tables"]["workflow"]; - $arrayWorkflowFiles = $this->importData["files"]["workflow"]; + try { + $arrayBpmnTables = $this->importData["tables"]["bpmn"]; + $arrayWorkflowTables = $this->importData["tables"]["workflow"]; + $arrayWorkflowFiles = $this->importData["files"]["workflow"]; - //Import BPMN tables - $result = $this->importBpmnTables($arrayBpmnTables, $generateUid); + //Import BPMN tables + $result = $this->importBpmnTables($arrayBpmnTables, $generateUid); - $projectUidOld = $arrayBpmnTables["project"][0]["prj_uid"]; - $projectUid = ($generateUid)? $result[0]["new_uid"] : $result; + $projectUidOld = $arrayBpmnTables["project"][0]["prj_uid"]; + $projectUid = ($generateUid) ? $result[0]["new_uid"] : $result; - //Import workflow tables - if ($generateUid) { - $result[0]["object"] = "project"; - $result[0]["old_uid"] = $projectUidOld; - $result[0]["new_uid"] = $projectUid; + //Import workflow tables + if ($generateUid) { + $result[0]["object"] = "project"; + $result[0]["old_uid"] = $projectUidOld; + $result[0]["new_uid"] = $projectUid; - $workflow = new \ProcessMaker\Project\Workflow(); + $workflow = new \ProcessMaker\Project\Workflow(); - list($arrayWorkflowTables, $arrayWorkflowFiles) = $workflow->updateDataUidByArrayUid($arrayWorkflowTables, $arrayWorkflowFiles, $result); - } - - $this->importWfTables($arrayWorkflowTables); - - //Import workflow files - $this->importWfFiles($arrayWorkflowFiles); - - //Update - $workflow = \ProcessMaker\Project\Workflow::load($projectUid); - - foreach ($arrayWorkflowTables["tasks"] as $key => $value) { - $arrayTaskData = $value; - - if (!in_array($arrayTaskData["TAS_TYPE"], array("GATEWAYTOGATEWAY", "WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT", "START-TIMER-EVENT", "INTERMEDIATE-CATCH-TIMER-EVENT", "END-EMAIL-EVENT", "INTERMEDIATE-EMAIL-EVENT"))) { - $result = $workflow->updateTask($arrayTaskData["TAS_UID"], $arrayTaskData); + list($arrayWorkflowTables, $arrayWorkflowFiles) = $workflow->updateDataUidByArrayUid($arrayWorkflowTables, $arrayWorkflowFiles, $result); } + + $this->importWfTables($arrayWorkflowTables); + + //Import workflow files + $this->importWfFiles($arrayWorkflowFiles); + + //Update + $workflow = \ProcessMaker\Project\Workflow::load($projectUid); + + foreach ($arrayWorkflowTables["tasks"] as $key => $value) { + $arrayTaskData = $value; + + if (!in_array($arrayTaskData["TAS_TYPE"], array("GATEWAYTOGATEWAY", "WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT", "START-TIMER-EVENT", "INTERMEDIATE-CATCH-TIMER-EVENT", "END-EMAIL-EVENT", "INTERMEDIATE-EMAIL-EVENT"))) { + $result = $workflow->updateTask($arrayTaskData["TAS_UID"], $arrayTaskData); + } + } + + unset($arrayWorkflowTables["process"]["PRO_CREATE_USER"]); + unset($arrayWorkflowTables["process"]["PRO_CREATE_DATE"]); + unset($arrayWorkflowTables["process"]["PRO_UPDATE_DATE"]); + unset($arrayWorkflowTables["process"]["PRO_CATEGORY"]); + unset($arrayWorkflowTables["process"]["PRO_CATEGORY_LABEL"]); + + $workflow->update($arrayWorkflowTables["process"]); + + //Process-Files upgrade + $filesManager = new \ProcessMaker\BusinessModel\FilesManager(); + + $filesManager->processFilesUpgrade($projectUid); + + //Return + return $projectUid; + } catch (\Exception $e) { + throw $e; } - - unset($arrayWorkflowTables["process"]["PRO_CREATE_USER"]); - unset($arrayWorkflowTables["process"]["PRO_CREATE_DATE"]); - unset($arrayWorkflowTables["process"]["PRO_UPDATE_DATE"]); - unset($arrayWorkflowTables["process"]["PRO_CATEGORY"]); - unset($arrayWorkflowTables["process"]["PRO_CATEGORY_LABEL"]); - - $workflow->update($arrayWorkflowTables["process"]); - - //Process-Files upgrade - $filesManager = new \ProcessMaker\BusinessModel\FilesManager(); - - $filesManager->processFilesUpgrade($projectUid); - - //Return - return $projectUid; } /** diff --git a/workflow/engine/templates/processes/main.js b/workflow/engine/templates/processes/main.js index e47261649..74016bd7d 100755 --- a/workflow/engine/templates/processes/main.js +++ b/workflow/engine/templates/processes/main.js @@ -1177,8 +1177,56 @@ function exportImportProcessObjects(typeAction) } importProcessGlobal.objectsToImport = processObjectsArray; Ext.getCmp('objectsToImport').setValue(processObjectsArray); - Ext.getCmp('buttonUpload').el.dom.click(); - granularWindow.close(); + + var uploader = Ext.getCmp('formUploader'); + uploader.getForm().setValues({"objectsToImport":processObjectsArray}); + if (uploader.getForm().isValid()) { + uploader.getForm().submit({ + url : 'processes_Import_Ajax', + waitMsg : _('ID_UPLOADING_PROCESS_FILE'), + waitTitle : " ", + timeout: 3600, + success: function(o, resp) { + var resp_ = Ext.util.JSON.decode(resp.response.responseText); + var sNewProUid = resp_.sNewProUid; + if (resp_.ExistGroupsInDatabase == 0) { + if (typeof(resp_.project_type) != "undefined" && resp_.project_type == "bpmn") { + if (typeof(resp_.project_type_aux) != "undefined" && resp_.project_type_aux == "NORMAL") { + importProcessCallbackFile = false; + } + var goTo = importProcessCallbackFile ? importProcessCallbackFile : "../designer?prj_uid="; + openWindowIfIE(goTo + sNewProUid); + } else { + window.location.href = "processes_Map?PRO_UID=" + sNewProUid; + } + } + else { + affectedGroups = resp_.affectedGroups; + importProcessGlobal.proFileName = resp_.proFileName; + importProcessGlobal.groupBeforeAccion = resp_.groupBeforeAccion; + importProcessGlobal.sNewProUid = resp_.sNewProUid; + importProcessGlobal.importOption = resp_.importOption; + importProcessExistGroup(); + } + + }, + failure : function(o, resp) { + var msg = resp.result ? resp.result.msg : resp.response.responseText; + Ext.getCmp('objectsToImport').setValue(""); + w.close(); + Ext.MessageBox.show({ + title : _('ID_ERROR'), + msg : msg, + buttons : Ext.MessageBox.OK, + animEl : 'mb9', + fn : function(){}, + icon : Ext.MessageBox.ERROR + }); + } + }); + } + + } } }, { @@ -1592,25 +1640,30 @@ importProcessExistProcess = function() success: function(o, resp) { var resp_ = Ext.util.JSON.decode(resp.response.responseText); var sNewProUid = resp_.sNewProUid; - - if (resp_.ExistGroupsInDatabase == 0) { - if (typeof(resp_.project_type) != "undefined" && resp_.project_type == "bpmn") { - if (typeof(resp_.project_type_aux) != "undefined" && resp_.project_type_aux == "NORMAL") { - importProcessCallbackFile = false; + if(resp_.isGranularImport) { + importProcessGlobal.isGranularImport = resp_.isGranularImport; + importProcessGlobal.objectGranularImport = resp_.objectGranularImport; + exportImportProcessObjects('import'); + } else { + if (resp_.ExistGroupsInDatabase == 0) { + if (typeof(resp_.project_type) != "undefined" && resp_.project_type == "bpmn") { + if (typeof(resp_.project_type_aux) != "undefined" && resp_.project_type_aux == "NORMAL") { + importProcessCallbackFile = false; + } + var goTo = importProcessCallbackFile ? importProcessCallbackFile : "../designer?prj_uid="; + openWindowIfIE(goTo + sNewProUid); + } else { + window.location.href = "processes_Map?PRO_UID=" + sNewProUid; } - var goTo = importProcessCallbackFile ? importProcessCallbackFile : "../designer?prj_uid="; - openWindowIfIE(goTo + sNewProUid); - } else { - window.location.href = "processes_Map?PRO_UID=" + sNewProUid; } - } - else { - affectedGroups = resp_.affectedGroups; - importProcessGlobal.proFileName = resp_.proFileName; - importProcessGlobal.groupBeforeAccion = resp_.groupBeforeAccion; - importProcessGlobal.sNewProUid = resp_.sNewProUid; - importProcessGlobal.importOption = resp_.importOption; - importProcessExistGroup(); + else { + affectedGroups = resp_.affectedGroups; + importProcessGlobal.proFileName = resp_.proFileName; + importProcessGlobal.groupBeforeAccion = resp_.groupBeforeAccion; + importProcessGlobal.sNewProUid = resp_.sNewProUid; + importProcessGlobal.importOption = resp_.importOption; + importProcessExistGroup(); + } } }, failure : function(o, resp) {