diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/Exportable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/Exportable.php index ef731b196..8f258cb12 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/Exportable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/Exportable.php @@ -5,6 +5,6 @@ namespace ProcessMaker\BusinessModel\Migrator; interface Exportable { public function beforeExport(); - public function export(); + public function export($prj_uid); public function afterExport(); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php index e2bb69c0b..0017e5ead 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php @@ -1,18 +1,14 @@ factory = new MigratorFactory(); + $this->publisher = new PMXGenerator(); } public function export($objectList) @@ -29,11 +26,34 @@ class GranularExporter $migratorData = $migrator->export($data); $this->prepareData($migratorData); } - return $this->data; + return $this->publish(); + } - protected function prepareData($migratorData) + protected function beforeExport() { - $this->data = $this->data . $migratorData; + $data = array(); + $data["version"] = "3.0"; + $data["container"] = "ProcessMaker-Project"; + $data["metadata"] = $this->getMetadata(); + $data["metadata"]["workspace"] = defined("SYS_SYS") ? SYS_SYS : "Unknown"; + $data["metadata"]["name"] = $this->getProjectName(); + $data["metadata"]["uid"] = $this->getProjectUid(); + $this->data = $data; + } + + protected function addData($migratorData) + { + + + + //$this->data = $data; + } + + public function publish() + { + return $this->generator->generate( + $this->data + ); } } \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/PMXGenerator.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/PMXGenerator.php new file mode 100644 index 000000000..9c68995da --- /dev/null +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/PMXGenerator.php @@ -0,0 +1,107 @@ +domDocument = new \DOMDocument("1.0", "utf-8"); + $this->domDocument->formatOutput = true; + } + + /** + * Generates a PMX xml string based on the $data passed along. + * + * @param $data + * @return string + */ + public function generate($data) + { + $rootNode = $this->domDocument->createElement($data['container_name']); + $rootNode->setAttribute("version", $data['container_name']); + $this->domDocument->appendChild($rootNode); + + $metadata = $data["metadata"]; + $metadataNode = $this->domDocument->createElement("metadata"); + + foreach ($metadata as $key => $value) { + $metaNode = $this->domDocument->createElement("meta"); + $metaNode->setAttribute("key", $key); + $metaNode->appendChild($this->getTextNode($value)); + $metadataNode->appendChild($metaNode); + } + + $rootNode->appendChild($metadataNode); + + $dbData = array("BPMN" => $data["bpmn-definition"], "workflow" => $data["workflow-definition"]); + foreach ($dbData as $sectionName => $sectionData) { + $dataNode = $this->domDocument->createElement("definition"); + $dataNode->setAttribute("class", $sectionName); + + foreach ($sectionData as $elementName => $elementData) { + $elementNode = $this->domDocument->createElement("table"); + $elementNode->setAttribute("name", $elementName); + + foreach ($elementData as $recordData) { + $recordNode = $this->domDocument->createElement("record"); + $recordData = array_change_key_case($recordData, CASE_LOWER); + + foreach ($recordData as $key => $value) { + if(is_object($value)){ + $value = serialize($value); + } + $columnNode = $this->domDocument->createElement($key); + $columnNode->appendChild($this->getTextNode($value)); + $recordNode->appendChild($columnNode); + } + + $elementNode->appendChild($recordNode); + } + + $dataNode->appendChild($elementNode); + } + + $rootNode->appendChild($dataNode); + } + + $workflowFilesNode = $this->domDocument->createElement("workflow-files"); + + foreach ($data["workflow-files"] as $elementName => $elementData) { + foreach ($elementData as $fileData) { + $fileNode = $this->domDocument->createElement("file"); + $fileNode->setAttribute("target", strtolower($elementName)); + + $filenameNode = $this->domDocument->createElement("file_name"); + $filenameNode->appendChild($this->getTextNode($fileData["filename"])); + $fileNode->appendChild($filenameNode); + + $filepathNode = $this->domDocument->createElement("file_path"); + $filepathNode->appendChild($this->domDocument->createCDATASection($fileData["filepath"])); + $fileNode->appendChild($filepathNode); + + $fileContentNode = $this->domDocument->createElement("file_content"); + $fileContentNode->appendChild($this->domDocument->createCDATASection(base64_encode($fileData["file_content"]))); + $fileNode->appendChild($fileContentNode); + + $workflowFilesNode->appendChild($fileNode); + } + } + $rootNode->appendChild($workflowFilesNode); + return $this->domDocument->saveXML($rootNode); + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php index f9b675ce5..feb641bc5 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php @@ -9,7 +9,7 @@ namespace ProcessMaker\BusinessModel\Migrator; -class ProcessDefinitionMigrator implements Importable +class ProcessDefinitionMigrator implements Importable, Exportable { public function beforeImport($data) { @@ -26,4 +26,19 @@ class ProcessDefinitionMigrator implements Importable // TODO: Implement afterImport() method. } + public function beforeExport() + { + // TODO: Implement beforeExport() method. + } + + public function export($prj_uid) + { + + } + + public function afterExport() + { + // TODO: Implement afterExport() method. + } + } \ No newline at end of file