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() } } +