Merge branch 'master' of bitbucket.org:colosa/processmaker

This commit is contained in:
Daniel Rojas
2014-04-30 16:22:38 -04:00
7 changed files with 306 additions and 69 deletions

View File

@@ -105,14 +105,8 @@ class WebEntry
{
$name = trim($name);
$arraySpecialCharSearch = array(
"/", "\\",
" "
);
$arraySpecialCharReplace = array(
"_", "_",
"_"
);
$arraySpecialCharSearch = array("/", "\\", " ", "#");
$arraySpecialCharReplace = array("_", "_", "_", "");
$newName = str_replace($arraySpecialCharSearch, $arraySpecialCharReplace, $name);

View File

@@ -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;
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -491,6 +491,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();
@@ -513,7 +514,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();
}
@@ -612,10 +613,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);
@@ -630,12 +632,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);
@@ -663,9 +685,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"];
@@ -677,7 +700,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;
@@ -701,11 +724,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);
@@ -743,11 +785,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);
@@ -781,7 +842,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);
@@ -803,8 +864,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 {
@@ -843,3 +904,4 @@ class BpmnWorkflow extends Project\Bpmn
$this->wp->setDisabled($value);
}
}