diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index c2fbe2377..cde85e5c0 100755 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -559,5 +559,38 @@ abstract class Importer throw $e; } } -} + + public function saveAs($prj_uid, $prj_name, $prj_description, $prj_category) + { + try { + $exporter = new \ProcessMaker\Exporter\XmlExporter($prj_uid); + $getProjectName = $exporter->truncateName($exporter->getProjectName(), false); + $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; + $version = \ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx") + 1; + $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx"); + + $exporter->setMetadata("export_version", $version); + $outputFilename = $outputDir . $exporter->saveExport($outputFilename); + + $httpStream = new \ProcessMaker\Util\IO\HttpStream(); + $fileExtension = pathinfo($outputFilename, PATHINFO_EXTENSION); + + $this->setSourceFile($outputFilename); + $this->prepare(); + $this->importData["tables"]["bpmn"]["project"][0]["prj_name"] = $prj_name; + $this->importData["tables"]["bpmn"]["project"][0]["prj_description"] = $prj_description; + $this->importData["tables"]["bpmn"]["diagram"][0]["dia_name"] = $prj_name; + $this->importData["tables"]["bpmn"]["process"][0]["pro_name"] = $prj_name; + $this->importData["tables"]["workflow"]["process"][0]["PRO_TITLE"] = $prj_name; + $this->importData["tables"]["workflow"]["process"][0]["PRO_DESCRIPTION"] = $prj_description; + $this->importData["tables"]["workflow"]["process"][0]["PRO_CATEGORY"] = $prj_category; + $this->importData["tables"]["workflow"]["process"][0]["PRO_CATEGORY_LABEL"] = null; + $this->importData["tables"]["workflow"]["process"][0]["PRO_UPDATE_DATE"] = null; + $this->importData["tables"]["workflow"]["process"] = $this->importData["tables"]["workflow"]["process"][0]; + return array("prj_uid" => $this->doImport()); + } catch (\Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index f6c06907e..f610377de 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -154,6 +154,20 @@ class Project extends Api throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } + + /** + * @url POST /save-as + * + * @param string $prj_uid + * @param string $prj_name + * @param string $prj_description + * @param string $prj_category + */ + public function doSaveAs($prj_uid, $prj_name, $prj_description, $prj_category) + { + $importer = new \ProcessMaker\Importer\XmlImporter(); + return $importer->saveAs($prj_uid, $prj_name, $prj_description, $prj_category); + } /** * @url GET /:prj_uid/process diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html index 1b97131d9..ade85df35 100644 --- a/workflow/engine/templates/designer/index.html +++ b/workflow/engine/templates/designer/index.html @@ -89,7 +89,9 @@