From e5fc7fe5f2169c2cd8c143986a1a234cc9c92666 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Wed, 30 Apr 2014 12:00:22 -0400 Subject: [PATCH] ProcessMaker-BE "BPMN Import" - Se an realizado todas las modificaciones requeridas para lograr la importacion de un archivo "pmx", tomando en cuenta la generacion de nuevos UIDs, los mismos que deberian ser reflejados en las tablas "workflow" y en los files (archivos xml de los DynaForms) - Se a completado la importacion de las tablas "workflow" - Se a completado la importacion de los datos del proceso y tareas --- workflow/engine/classes/class.processes.php | 98 ++++++++++--- .../processes/processes_Import_Ajax.php | 21 ++- .../ProcessMaker/BusinessModel/WebEntry.php | 10 +- .../src/ProcessMaker/Importer/Importer.php | 133 +++++++++++++++--- .../src/ProcessMaker/Importer/XmlImporter.php | 5 +- .../Project/Adapter/BpmnWorkflow.php | 94 ++++++++++--- workflow/engine/templates/processes/main.js | 14 +- 7 files changed, 306 insertions(+), 69 deletions(-) diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 067277576..8f2a8059d 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -753,10 +753,18 @@ class Processes { $map = array (); foreach ($oData->tasks as $key => $val) { - $newGuid = $this->getUnusedTaskGUID(); - $map[$val['TAS_UID']] = $newGuid; - $oData->tasks[$key]['TAS_UID'] = $newGuid; + if (!isset($val["TAS_UID_OLD"])) { + $uidNew = $this->getUnusedTaskGUID(); + $map[$val["TAS_UID"]] = $uidNew; + + $oData->tasks[$key]["TAS_UID"] = $uidNew; + } else { + $map[$val["TAS_UID_OLD"]] = $val["TAS_UID"]; + } } + + $oData->uid["TASK"] = $map; + if (isset( $oData->routes ) && is_array( $oData->routes )) { foreach ($oData->routes as $key => $val) { $newGuid = $map[$val['TAS_UID']]; @@ -845,6 +853,8 @@ class Processes $oData->dynaforms[$key]['DYN_UID'] = $newGuid; } + $oData->uid["DYNAFORM"] = $map; + if (isset( $oData->process['PRO_DYNAFORMS'] ) && ! is_array( $oData->process['PRO_DYNAFORMS'] )) { $oData->process['PRO_DYNAFORMS'] = @unserialize( $oData->process['PRO_DYNAFORMS'] ); } @@ -889,9 +899,12 @@ class Processes $oData->stepSupervisor[$key]['STEP_UID_OBJ'] = $newGuid; } } - foreach ($oData->dynaformFiles as $key => $val) { - $newGuid = $map[$key]; - $oData->dynaformFiles[$key] = $newGuid; + + if (isset($oData->dynaformFiles)) { + foreach ($oData->dynaformFiles as $key => $value) { + $newGuid = $map[$key]; + $oData->dynaformFiles[$key] = $newGuid; + } } } if (isset( $oData->gridFiles )) { @@ -1550,6 +1563,9 @@ class Processes $map[$val['INP_DOC_UID']] = $newGuid; $oData->inputs[$key]['INP_DOC_UID'] = $newGuid; } + + $oData->uid["INPUT_DOCUMENT"] = $map; + foreach ($oData->steps as $key => $val) { if (isset( $val['STEP_TYPE_OBJ'] )) { if ($val['STEP_TYPE_OBJ'] == 'INPUT_DOCUMENT') { @@ -1646,6 +1662,9 @@ class Processes $map[$val['OUT_DOC_UID']] = $newGuid; $oData->outputs[$key]['OUT_DOC_UID'] = $newGuid; } + + $oData->uid["OUTPUT_DOCUMENT"] = $map; + foreach ($oData->steps as $key => $val) { if (isset( $val['STEP_TYPE_OBJ'] )) { if ($val['STEP_TYPE_OBJ'] == 'OUTPUT_DOCUMENT') { @@ -1688,6 +1707,9 @@ class Processes $map[$val['TRI_UID']] = $newGuid; $oData->triggers[$key]['TRI_UID'] = $newGuid; } + + $oData->uid["TRIGGER"] = $map; + foreach ($oData->steptriggers as $key => $val) { if (isset( $map[$val['TRI_UID']] )) { $newGuid = $map[$val['TRI_UID']]; @@ -1696,6 +1718,13 @@ class Processes $oData->steptriggers[$key]['TRI_UID'] = $this->getUnusedTriggerGUID(); } } + + if (isset($oData->process["PRO_TRI_DELETED"])) { + $oData->process["PRO_TRI_DELETED"] = $map[$oData->process["PRO_TRI_DELETED"]]; + $oData->process["PRO_TRI_CANCELED"] = $map[$oData->process["PRO_TRI_CANCELED"]]; + $oData->process["PRO_TRI_PAUSED"] = $map[$oData->process["PRO_TRI_PAUSED"]]; + $oData->process["PRO_TRI_REASSIGNED"] = $map[$oData->process["PRO_TRI_REASSIGNED"]]; + } } /** @@ -1712,6 +1741,8 @@ class Processes $map[$val['SP_UID']] = $newGuid; $oData->subProcess[$key]['SP_UID'] = $newGuid; } + + $oData->uid["SUB_PROCESS"] = $map; } /** @@ -1728,6 +1759,8 @@ class Processes $map[$val['CTO_UID']] = $newGuid; $oData->caseTrackerObject[$key]['CTO_UID'] = $newGuid; } + + $oData->uid["CASE_TRACKER_OBJECT"] = $map; } /** @@ -1745,6 +1778,9 @@ class Processes $map[$val['DBS_UID']] = $newGuid; $oData->dbconnections[$key]['DBS_UID'] = $newGuid; } + + $oData->uid["DB_SOURCE"] = $map; + $oData->sqlConnections = $map; } @@ -1762,6 +1798,8 @@ class Processes $map[$val['OP_UID']] = $newGuid; $oData->objectPermissions[$key]['OP_UID'] = $newGuid; } + + $oData->uid["OBJECT_PERMISSION"] = $map; } /** @@ -1780,6 +1818,8 @@ class Processes $oData->routes[$key]['ROU_UID'] = $newGuid; } } + + $oData->uid["ROUTE"] = $map; } /** @@ -1796,6 +1836,9 @@ class Processes $map[$val['STG_UID']] = $newGuid; $oData->stage[$key]['STG_UID'] = $newGuid; } + + $oData->uid["STAGE"] = $map; + foreach ($oData->tasks as $key => $val) { if (isset( $map[$val['STG_UID']] )) { $newGuid = $map[$val['STG_UID']]; @@ -1818,6 +1861,8 @@ class Processes $map[$val['SWI_UID']] = $newGuid; $oData->lanes[$key]['SWI_UID'] = $newGuid; } + + $oData->uid["SWIMLANE_ELEMENT"] = $map; } /** @@ -1834,6 +1879,9 @@ class Processes $map[$val['REP_TAB_UID']] = $newGuid; $oData->reportTables[$key]['REP_TAB_UID'] = $newGuid; } + + $oData->uid["REPORT_TABLE"] = $map; + foreach ($oData->reportTablesVars as $key => $val) { if (isset( $map[$val['REP_TAB_UID']] )) { /*TODO: Why this can be not defined?? The scenario was when @@ -1859,6 +1907,8 @@ class Processes $map[$val['REP_VAR_UID']] = $newGuid; $oData->reportTablesVars[$key]['REP_VAR_UID'] = $newGuid; } + + $oData->uid["REPORT_VAR"] = $map; } /** @@ -1875,6 +1925,8 @@ class Processes $map[$val['FCD_UID']] = $newGuid; $oData->fieldCondition[$key]['FCD_UID'] = $newGuid; } + + $oData->uid["FIELD_CONDITION"] = $map; } /** @@ -1891,6 +1943,8 @@ class Processes $map[$val['EVN_UID']] = $newGuid; $oData->event[$key]['EVN_UID'] = $newGuid; } + + $oData->uid["EVENT"] = $map; } /** @@ -1907,6 +1961,8 @@ class Processes $map[$val['SCH_UID']] = $newGuid; $oData->caseScheduler[$key]['SCH_UID'] = $newGuid; } + + $oData->uid["CASE_SCHEDULER"] = $map; } /** @@ -1917,6 +1973,8 @@ class Processes */ public function renewAll (&$oData) { + $oData->uid = array(); + $this->renewAllTaskGuid( $oData ); $this->renewAllDynaformGuid( $oData ); $this->renewAllInputGuid( $oData ); @@ -2017,6 +2075,9 @@ class Processes $oData->steps[$key]['STEP_UID'] = $newGuid; } } + + $oData->uid["STEP"] = $map; + foreach ($oData->steptriggers as $key => $val) { if ($val['STEP_UID'] > 0) { if (isset( $map[$val['STEP_UID']] )) { @@ -2589,7 +2650,7 @@ class Processes } public function getWorkflowData($sProUid = '') - { + { $oProcess = new Process(); $oData = new StdClass(); $oData->process = $this->getProcessRow( $sProUid, false ); @@ -2618,7 +2679,7 @@ class Processes $oData->event = $this->getEventRow( $sProUid ); $oData->caseScheduler = $this->getCaseSchedulerRow( $sProUid ); $oData->processCategory = $this->getProcessCategoryRow( $sProUid ); - $oData->taskExtraProperties = $this->getTaskExtraPropertiesRows( $sProUid ); + $oData->taskExtraProperties = $this->getTaskExtraPropertiesRows( $sProUid ); $this->getGroupwfSupervisor( $sProUid, $oData); //krumo ($oData);die; @@ -3220,8 +3281,8 @@ class Processes } /** - * The current method is for filter every row that exist in - * the Configuration table + * The current method is for filter every row that exist in + * the Configuration table * * @param array $aTaskExtraProperties * @return void @@ -3231,15 +3292,18 @@ class Processes if (count($aTaskExtraProperties) > 0) { $oConfig = new Configuration(); foreach ($aTaskExtraProperties as $key => $row) { - if ($oConfig->exists( $row['CFG_UID'], $row['OBJ_UID'], $row['PRO_UID'], $row['USR_UID'], $row['APP_UID']) ) { + if ($oConfig->exists( $row['CFG_UID'], $row['OBJ_UID'], $row['PRO_UID'], $row['USR_UID'], $row['APP_UID']) ) { $oConfig->remove( $row['CFG_UID'], $row['OBJ_UID'], $row['PRO_UID'], $row['USR_UID'], $row['APP_UID'] ); $oConfig->setDeleted(false); } $res = $oConfig->create( $row ); $oConfig->setNew(true); - $oConfig->setProperties(); + + if (method_exists($oConfig, "setProperties")) { + $oConfig->setProperties(); + } } - } + } return; } @@ -3559,7 +3623,7 @@ class Processes $this->createProcessCategoryRow( isset( $oData->processCategory ) ? $oData->processCategory : null ); // create the process -// $this->createProcessRow( $oData->process ); + //$this->createProcessRow( $oData->process ); $this->createTaskRows( $oData->tasks ); //it was commented becuase it seems to be working fine //$this->createEventRows(isset($oData->event) ? $oData->event : array()); @@ -3949,7 +4013,7 @@ class Processes if (defined('PARTNER_FLAG')) { @copy( PATH_TPL . "mails" . PATH_SEP . "unassignedMessagePartner.html", $dir . G::LoadTranslation('ID_UNASSIGNED_MESSAGE')); } else { - @copy( PATH_TPL . "mails" . PATH_SEP . "unassignedMessage.html", $dir . G::LoadTranslation('ID_UNASSIGNED_MESSAGE')); + @copy( PATH_TPL . "mails" . PATH_SEP . "unassignedMessage.html", $dir . G::LoadTranslation('ID_UNASSIGNED_MESSAGE')); } } @@ -3974,7 +4038,7 @@ class Processes public function getTaskExtraPropertiesRows( $proId ) { try { - + $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn( ConfigurationPeer::CFG_UID ); $oCriteria->addSelectColumn( ConfigurationPeer::OBJ_UID ); @@ -3988,7 +4052,7 @@ class Processes $oDataset = ConfigurationPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); - + $aConfRows = array(); while ($aRow = $oDataset->getRow()) { $aConfRows[] = $aRow; diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index d2694b62e..7e52dd886 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -62,12 +62,11 @@ if (isset($_FILES["PROCESS_FILENAME"])) { echo json_encode($result); exit(0); } -} elseif (isset($_POST["PRO_FILENAME"]) && file_exists(PATH_DOCUMENT . 'input' . PATH_SEP . $_POST["PRO_FILENAME"])) { - +} elseif (isset($_POST["PRO_FILENAME"]) && file_exists(PATH_DOCUMENT . "input" . PATH_SEP . $_POST["PRO_FILENAME"]) && pathinfo(PATH_DOCUMENT . "input" . PATH_SEP . $_POST["PRO_FILENAME"], PATHINFO_EXTENSION) == "pmx") { switch ($_POST["IMPORT_OPTION"]) { case 1: $option = XmlImporter::IMPORT_OPTION_OVERWRITE; break; case 2: $option = XmlImporter::IMPORT_OPTION_DISABLE_AND_CREATE_NEW; break; - case 3: $option = XmlImporter::IMPORT_OPTION_CREATE_NEW; break; + case 3: $option = XmlImporter::IMPORT_OPTION_KEEP_WITHOUT_CHANGING_AND_CREATE_NEW; break; } $importer = new XmlImporter(); @@ -75,7 +74,16 @@ if (isset($_FILES["PROCESS_FILENAME"])) { $importer->setSourceFile(PATH_DOCUMENT . 'input' . PATH_SEP . $_POST["PRO_FILENAME"]); try { - $res = $importer->import($option); + $prjUid = $importer->import($option); + + $result = array( + "success" => true, + "catchMessage" => "", + "ExistProcessInDatabase" => 0, + "ExistGroupsInDatabase" => 0, + "sNewProUid" => $prjUid, + "project_type" => "bpmn" + ); } catch (\Exception $e) { $result = array( "success" => true, @@ -89,6 +97,7 @@ if (isset($_FILES["PROCESS_FILENAME"])) { ); } + echo G::json_encode($result); exit(0); } @@ -325,7 +334,7 @@ if ($action == "uploadFileNewProcessExist") { if ($option == 2) { $oProcess->disablePreviousProcesses( $sProUid ); $sNewProUid = $oProcess->getUnusedProcessGUID(); - $oProcess->setProcessGuid( $oData, $sNewProUid ); + $oProcess->setProcessGUID($oData, $sNewProUid); $oProcess->setProcessParent( $oData, $sProUid ); $oData->process['PRO_TITLE'] = "New - " . $oData->process['PRO_TITLE'] . ' - ' . date( 'M d, H:i' ); $oProcess->renewAll( $oData ); @@ -339,7 +348,7 @@ if ($action == "uploadFileNewProcessExist") { if ($option == 3) { //krumo ($oData); die; $sNewProUid = $oProcess->getUnusedProcessGUID(); - $oProcess->setProcessGuid( $oData, $sNewProUid ); + $oProcess->setProcessGUID($oData, $sNewProUid); $oData->process['PRO_TITLE'] = G::LoadTranslation('ID_COPY_OF'). ' - ' . $oData->process['PRO_TITLE'] . ' - ' . date( 'M d, H:i' ); $oProcess->renewAll( $oData ); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php index 345782ef6..c7ee12ecf 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php @@ -105,14 +105,8 @@ class WebEntry { $name = trim($name); - $arraySpecialCharSearch = array( - "/", "\\", - " " - ); - $arraySpecialCharReplace = array( - "_", "_", - "_" - ); + $arraySpecialCharSearch = array("/", "\\", " ", "#"); + $arraySpecialCharReplace = array("_", "_", "_", ""); $newName = str_replace($arraySpecialCharSearch, $arraySpecialCharReplace, $name); diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index 21e3d2814..935783b58 100644 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -2,6 +2,7 @@ namespace ProcessMaker\Importer; use ProcessMaker\Util; +use ProcessMaker\Project; use ProcessMaker\Project\Adapter; abstract class Importer @@ -14,6 +15,7 @@ abstract class Importer const IMPORT_OPTION_OVERWRITE = "project.import.override"; const IMPORT_OPTION_DISABLE_AND_CREATE_NEW = "project.import.disable_and_create_new"; + const IMPORT_OPTION_KEEP_WITHOUT_CHANGING_AND_CREATE_NEW = "project.import.keep_without_changing_and_create_new"; const IMPORT_OPTION_CREATE_NEW = "project.import.create_new"; /** @@ -35,6 +37,8 @@ abstract class Importer { $this->prepare(); + $name = $this->importData["tables"]["bpmn"]["project"][0]["prj_name"]; + switch ($option) { case self::IMPORT_OPTION_CREATE_NEW: if ($this->targetExists()) { @@ -45,22 +49,40 @@ abstract class Importer ), self::IMPORT_STAT_TARGET_ALREADY_EXISTS); } $generateUid = false; - $result = $this->doImport($generateUid); + break; + case self::IMPORT_OPTION_OVERWRITE: + $this->removeProject(); + // this option shouldn't generate new uid for all objects + $generateUid = false; break; case self::IMPORT_OPTION_DISABLE_AND_CREATE_NEW: $this->disableProject(); // this option should generate new uid for all objects $generateUid = true; - $result = $this->doImport($generateUid); + $name = "New - " . $name . " - " . date("M d, H:i"); break; - case self::IMPORT_OPTION_OVERWRITE: - // this option shouldn't generate new uid for all objects - $generateUid = false; - $this->removeProject(); - $result = $this->doImport($generateUid); + case self::IMPORT_OPTION_KEEP_WITHOUT_CHANGING_AND_CREATE_NEW: + // this option should generate new uid for all objects + $generateUid = true; + $name = \G::LoadTranslation("ID_COPY_OF") . " - " . $name . " - " . date("M d, H:i"); break; } + $this->importData["tables"]["bpmn"]["project"][0]["prj_name"] = $name; + $this->importData["tables"]["bpmn"]["diagram"][0]["dia_name"] = $name; + $this->importData["tables"]["bpmn"]["process"][0]["pro_name"] = $name; + $this->importData["tables"]["workflow"]["process"][0]["PRO_TITLE"] = $name; + + if ($this->importData["tables"]["workflow"]["process"][0]["PRO_UPDATE_DATE"] . "" == "") { + $this->importData["tables"]["workflow"]["process"][0]["PRO_UPDATE_DATE"] = null; + } + + $this->importData["tables"]["workflow"]["process"] = $this->importData["tables"]["workflow"]["process"][0]; + + //Import + $result = $this->doImport($generateUid); + + //Return return $result; } @@ -220,6 +242,7 @@ abstract class Importer $tables = (object) $tables; $processes = new \Processes(); + $processes->createProcessPropertiesFromData($tables); } @@ -258,17 +281,95 @@ abstract class Importer public function doImport($generateUid = true) { - $tables = $this->importData["tables"]; - $files = $this->importData["files"]; + $arrayBpmnTables = $this->importData["tables"]["bpmn"]; + $arrayWorkflowTables = $this->importData["tables"]["workflow"]; + $arrayWorkflowFiles = $this->importData["files"]["workflow"]; - $result = $this->importBpmnTables($tables["bpmn"], $generateUid); - $this->importWfTables($tables["workflow"]); - $this->importWfFiles($files["workflow"]); + //Import BPMN tables + $result = $this->importBpmnTables($arrayBpmnTables, $generateUid); + $projectUidOld = $arrayBpmnTables["project"][0]["prj_uid"]; + $projectUid = ($generateUid)? $result[0]["new_uid"] : $result; + + //Import workflow tables if ($generateUid) { - return $result[0]["new_uid"]; - } else { - return $result; + //Update TAS_UID + foreach ($arrayWorkflowTables["tasks"] as $key1 => $value1) { + $taskUid = $arrayWorkflowTables["tasks"][$key1]["TAS_UID"]; + + foreach ($result as $value2) { + $arrayItem = $value2; + + if ($arrayItem["old_uid"] == $taskUid) { + $arrayWorkflowTables["tasks"][$key1]["TAS_UID_OLD"] = $taskUid; + $arrayWorkflowTables["tasks"][$key1]["TAS_UID"] = $arrayItem["new_uid"]; + break; + } + } + } + + //Workflow tables + $workflowTables = (object)($arrayWorkflowTables); + + $processes = new \Processes(); + $processes->setProcessGUID($workflowTables, $projectUid); + $processes->renewAll($workflowTables); + + $arrayWorkflowTables = (array)($workflowTables); + + //Workflow files + foreach ($arrayWorkflowFiles as $key1 => $value1) { + $arrayFiles = $value1; + + foreach ($arrayFiles as $key2 => $value2) { + $file = $value2; + + $arrayWorkflowFiles[$key1][$key2]["file_path"] = str_replace($projectUidOld, $projectUid, $file["file_path"]); + $arrayWorkflowFiles[$key1][$key2]["file_content"] = str_replace($projectUidOld, $projectUid, $file["file_content"]); + } + } + + if (isset($arrayWorkflowTables["uid"])) { + foreach ($arrayWorkflowTables["uid"] as $key1 => $value1) { + $arrayT = $value1; + + foreach ($arrayT as $key2 => $value2) { + $uidOld = $key2; + $uid = $value2; + + foreach ($arrayWorkflowFiles as $key3 => $value3) { + $arrayFiles = $value3; + + foreach ($arrayFiles as $key4 => $value4) { + $file = $value4; + + $arrayWorkflowFiles[$key3][$key4]["file_path"] = str_replace($uidOld, $uid, $file["file_path"]); + $arrayWorkflowFiles[$key3][$key4]["file_content"] = str_replace($uidOld, $uid, $file["file_content"]); + } + } + } + } + } } + + $this->importWfTables($arrayWorkflowTables); + + //Import workflow files + $this->importWfFiles($arrayWorkflowFiles); + + //Update + $workflow = Project\Workflow::load($projectUid); + + foreach ($arrayWorkflowTables["tasks"] as $key => $value) { + $arrayTaskData = $value; + + $result = $workflow->updateTask($arrayTaskData["TAS_UID"], $arrayTaskData); + } + + $workflow->update($arrayWorkflowTables["process"]); + + //Return + return $projectUid; } -} \ No newline at end of file +} + diff --git a/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php b/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php index 30d1099f8..29f9d74cd 100644 --- a/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php +++ b/workflow/engine/src/ProcessMaker/Importer/XmlImporter.php @@ -76,7 +76,7 @@ class XmlImporter extends Importer $tablesNodeList = $definition->getElementsByTagName("table"); foreach ($tablesNodeList as $tableNode) { - $tableName = strtolower($tableNode->getAttribute("name")); + $tableName = ($defClass == "workflow")? $tableNode->getAttribute("name") : strtolower($tableNode->getAttribute("name")); $tables[$defClass][$tableName] = array(); /** @var \DOMElement[] $recordsNodeList */ $recordsNodeList = $tableNode->getElementsByTagName("record"); @@ -136,4 +136,5 @@ class XmlImporter extends Importer return (string) simplexml_import_dom($node->parentNode); } } -} \ No newline at end of file +} + diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index eee0bf7b2..bc7810d00 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -497,6 +497,7 @@ class BpmnWorkflow extends Project\Bpmn if (array_key_exists("diagrams", $projectData) && is_array($projectData["diagrams"]) && count($projectData["diagrams"]) > 0) { $diagramData = array_change_key_case($projectData["diagrams"][0], CASE_UPPER); + if ($generateUid) { $result[1]["old_uid"] = $diagramData["DIA_UID"]; $diagramData["DIA_UID"] = Util\Common::generateUID(); @@ -519,7 +520,7 @@ class BpmnWorkflow extends Project\Bpmn $bwp->addProcess($processData); - $mappedUid = array_merge($result, self::updateFromStruct($bwp->prjUid, $projectData, $generateUid)); + $mappedUid = array_merge($result, self::updateFromStruct($bwp->prjUid, $projectData, true, $generateUid)); return $generateUid ? $mappedUid : $bwp->getUid(); } @@ -618,10 +619,11 @@ class BpmnWorkflow extends Project\Bpmn * @param $projectData * @return array */ - public static function updateFromStruct($prjUid, $projectData, $generateUid = true) + public static function updateFromStruct($prjUid, $projectData, $flagInsert = false, $generateUid = true) { $diagram = isset($projectData["diagrams"]) && isset($projectData["diagrams"][0]) ? $projectData["diagrams"][0] : array(); $result = array(); + $bwp = BpmnWorkflow::load($prjUid); $projectRecord = array_change_key_case($projectData, CASE_UPPER); $bwp->update($projectRecord); @@ -636,12 +638,32 @@ class BpmnWorkflow extends Project\Bpmn $activityData = Util\ArrayUtil::boolToIntValues($activityData); $activity = $bwp->getActivity($activityData["ACT_UID"]); - if (is_null($activity)) { + + if ($flagInsert || is_null($activity)) { if ($generateUid) { - $oldActUid = $activityData["ACT_UID"]; + //Activity + $uidOld = $activityData["ACT_UID"]; $activityData["ACT_UID"] = Util\Common::generateUID(); - $result[] = array("object" => "activity", "new_uid" => $activityData["ACT_UID"], "old_uid" => $oldActUid); + + $result[] = array( + "object" => "activity", + "old_uid" => $uidOld, + "new_uid" => $activityData["ACT_UID"] + ); + + //Bound + if (isset($activityData["BOU_UID"])) { + $uidOld = $activityData["BOU_UID"]; + $activityData["BOU_UID"] = Util\Common::generateUID(); + + $result[] = array( + "object" => "bound", + "old_uid" => $uidOld, + "new_uid" => $activityData["BOU_UID"] + ); + } } + $bwp->addActivity($activityData); } elseif (! $bwp->isEquals($activity, $activityData)) { $bwp->updateActivity($activityData["ACT_UID"], $activityData); @@ -669,9 +691,10 @@ class BpmnWorkflow extends Project\Bpmn foreach ($diagram["artifacts"] as $i => $artifactData) { $artifactData = array_change_key_case($artifactData, CASE_UPPER); unset($artifactData["_EXTENDED"]); + $artifact = $bwp->getArtifact($artifactData["ART_UID"]); - if (is_null($artifact)) { + if ($flagInsert || is_null($artifact)) { if ($generateUid) { $oldArtUid = $artifactData["ART_UID"]; @@ -683,7 +706,7 @@ class BpmnWorkflow extends Project\Bpmn } elseif (! $bwp->isEquals($artifact, $artifactData)) { $bwp->updateArtifact($artifactData["ART_UID"], $artifactData); } else { - Util\Logger::log("Update Artifact ({$artifactData["GAT_UID"]}) Skipped - No changes required"); + Util\Logger::log("Update Artifact ({$artifactData["ART_UID"]}) Skipped - No changes required"); } $diagram["artifacts"][$i] = $artifactData; @@ -707,11 +730,30 @@ class BpmnWorkflow extends Project\Bpmn unset($gatewayData["_EXTENDED"]); $gateway = $bwp->getGateway($gatewayData["GAT_UID"]); - if (is_null($gateway)) { + + if ($flagInsert || is_null($gateway)) { if ($generateUid) { - $oldActUid = $gatewayData["GAT_UID"]; + //Gateway + $uidOld = $gatewayData["GAT_UID"]; $gatewayData["GAT_UID"] = Util\Common::generateUID(); - $result[] = array("object" => "gateway", "new_uid" => $gatewayData["GAT_UID"], "old_uid" => $oldActUid); + + $result[] = array( + "object" => "gateway", + "old_uid" => $uidOld, + "new_uid" => $gatewayData["GAT_UID"] + ); + + //Bound + if (isset($gatewayData["BOU_UID"])) { + $uidOld = $gatewayData["BOU_UID"]; + $gatewayData["BOU_UID"] = Util\Common::generateUID(); + + $result[] = array( + "object" => "bound", + "old_uid" => $uidOld, + "new_uid" => $gatewayData["BOU_UID"] + ); + } } $bwp->addGateway($gatewayData); @@ -749,11 +791,30 @@ class BpmnWorkflow extends Project\Bpmn } $event = $bwp->getEvent($eventData["EVN_UID"]); - if (is_null($event)) { + + if ($flagInsert || is_null($event)) { if ($generateUid) { - $oldActUid = $eventData["EVN_UID"]; + //Event + $uidOld = $eventData["EVN_UID"]; $eventData["EVN_UID"] = Util\Common::generateUID(); - $result[] = array("object" => "event", "new_uid" => $eventData["EVN_UID"], "old_uid" => $oldActUid); + + $result[] = array( + "object" => "event", + "old_uid" => $uidOld, + "new_uid" => $eventData["EVN_UID"] + ); + + //Bound + if (isset($eventData["BOU_UID"])) { + $uidOld = $eventData["BOU_UID"]; + $eventData["BOU_UID"] = Util\Common::generateUID(); + + $result[] = array( + "object" => "bound", + "old_uid" => $uidOld, + "new_uid" => $eventData["BOU_UID"] + ); + } } $bwp->addEvent($eventData); @@ -787,7 +848,7 @@ class BpmnWorkflow extends Project\Bpmn $flowData = array_change_key_case($flowData, CASE_UPPER); // if it is a new flow record - if ($generateUid && ! \BpmnFlow::exists($flowData["FLO_UID"])) { + if ($flagInsert || ($generateUid && !\BpmnFlow::exists($flowData["FLO_UID"]))) { $oldFloUid = $flowData["FLO_UID"]; $flowData["FLO_UID"] = Util\Common::generateUID(); $result[] = array("object" => "flow", "new_uid" => $flowData["FLO_UID"], "old_uid" => $oldFloUid); @@ -809,8 +870,8 @@ class BpmnWorkflow extends Project\Bpmn foreach ($diagram["flows"] as $flowData) { $flow = $bwp->getFlow($flowData["FLO_UID"]); - if (is_null($flow)) { - $bwp->addFlow($flowData, $diagram["flows"]); + if ($flagInsert || is_null($flow)) { + $bwp->addFlow($flowData); } elseif (! $bwp->isEquals($flow, $flowData)) { $bwp->updateFlow($flowData["FLO_UID"], $flowData, $diagram["flows"]); } else { @@ -849,3 +910,4 @@ class BpmnWorkflow extends Project\Bpmn $this->wp->setDisabled($value); } } + diff --git a/workflow/engine/templates/processes/main.js b/workflow/engine/templates/processes/main.js index db9d00673..a776cb1b7 100755 --- a/workflow/engine/templates/processes/main.js +++ b/workflow/engine/templates/processes/main.js @@ -276,8 +276,7 @@ Ext.onReady(function(){ disabled:true },{ text: _('ID_DELETE'), - iconCls: 'button_menu_ext ss_sprite ss_delete', - //icon: '/images/delete-16x16.gif', + iconCls: "button_menu_ext ss_sprite ss_cross", handler:deleteProcess },{ xtype: 'tbseparator' @@ -435,7 +434,7 @@ Ext.onReady(function(){ handler: enableDisableDebug }, { text: _('ID_DELETE'), - icon: '/images/delete.png', + iconCls: "button_menu_ext ss_sprite ss_cross", handler: deleteProcess }, { text: _("ID_EXPORT"), @@ -976,8 +975,14 @@ importProcessExistProcess = function() success: function(o, resp) { var resp_ = Ext.util.JSON.decode(resp.response.responseText); var sNewProUid = resp_.sNewProUid; + var projectType = (typeof(resp_.project_type) != "undefined")? resp_.project_type : "classicProject"; + if (resp_.ExistGroupsInDatabase == 0) { - window.location.href = "processes_Map?PRO_UID=" + sNewProUid; + if (projectType == "classicProject") { + window.location.href = "processes_Map?PRO_UID=" + sNewProUid; + } else { + window.location.href = "../designer?prj_uid=" + sNewProUid; + } } else { importProcessGlobal.proFileName = resp_.fileName; @@ -1217,3 +1222,4 @@ function enableDisableDebug() } } +