From 49438f021191140c8c23b3eabf84dfb22d2bb238 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 29 Jan 2015 10:59:45 -0400 Subject: [PATCH 1/3] PM-1429 --- workflow/engine/classes/model/Process.php | 45 +++++ workflow/engine/controllers/designer.php | 2 + .../processes/processes_Import_Ajax.php | 39 ++++ workflow/engine/templates/designer/index.html | 2 +- workflow/engine/templates/processes/main.js | 174 ++++++++++++++++++ 5 files changed, 261 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index af2643395..c942eee14 100755 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -586,6 +586,51 @@ class Process extends BaseProcess return ((int)($aRow["NUM_REC"]) > 0)? true : false; } + public static function getByProTitle($PRO_TITLE) { + $oCriteria = new Criteria("workflow"); + + $oCriteria->addSelectColumn(ContentPeer::CON_ID); + + $oCriteria->add(ContentPeer::CON_CATEGORY, 'PRO_TITLE'); + $oCriteria->add(ContentPeer::CON_LANG, SYS_LANG); + $oCriteria->add(ContentPeer::CON_VALUE, $PRO_TITLE); + $oDataset = ContentPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro')); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $oDataset->next(); + $aRow = $oDataset->getRow(); + $oProcess = new Process(); + return $oProcess->load($aRow["CON_ID"]); + } + + public static function getNextTitle($PRO_TITLE) { + $oCriteria = new Criteria('workflow'); + + $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); + + $oCriteria->add(ContentPeer::CON_CATEGORY, 'PRO_TITLE'); + $oCriteria->add(ContentPeer::CON_LANG, SYS_LANG); + $oCriteria->add(ContentPeer::CON_VALUE, $PRO_TITLE . '-%', Criteria::LIKE); + $oCriteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE); + + $oDataset = ContentPeer::doSelectRS($oCriteria, Propel::getDbConnection('workflow_ro')); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $data = array(); + $may = 0; + while ($oDataset->next()) { + $row = $oDataset->getRow(); + $number = explode("-", $row["CON_VALUE"]); + $number = $number[count($number) - 1] + 0; + if ($number > $may) { + $may = $number; + } + $row["CON_VALUE"] = $number; + $data[] = $row; + } + return $PRO_TITLE . "-" . ($may + 1); + } + public function getAllProcessesCount () { $c = $this->tmpCriteria; diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php index f76fbb5e2..a861a3bb5 100644 --- a/workflow/engine/controllers/designer.php +++ b/workflow/engine/controllers/designer.php @@ -26,6 +26,7 @@ class Designer extends Controller $proUid = isset($httpData->prj_uid) ? $httpData->prj_uid : ''; $appUid = isset($httpData->app_uid) ? $httpData->app_uid : ''; $proReadOnly = isset($httpData->prj_readonly) ? $httpData->prj_readonly : 'false'; + $stringBpmn = isset($httpData->stringBpmn) ? '' : ''; $client = $this->getClientCredentials(); $authCode = $this->getAuthorizationCode($client); $debug = false; //System::isDebugMode(); @@ -56,6 +57,7 @@ class Designer extends Controller $this->setVar('prj_uid', $proUid); $this->setVar('app_uid', $appUid); + $this->setVar('stringBpmn', $stringBpmn); $this->setVar('prj_readonly', $proReadOnly); $this->setVar('credentials', base64_encode(json_encode($clientToken))); $this->setVar('isDebugMode', $debug); diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index b5e6bb253..a47dd05c3 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -184,6 +184,45 @@ if (isset($_POST["PRO_FILENAME"]) && exit(0); } +if (isset($_FILES["PROCESS_FILENAME"]) && + pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_EXTENSION) == "bpmn" +) { + $createMode = $_REQUEST["createMode"]; + $name = pathinfo($_FILES["PROCESS_FILENAME"]["name"], PATHINFO_FILENAME); + $data = array( + "type" => "bpmnProject", + "PRO_TITLE" => $name, + "PRO_DESCRIPTION" => "", + "PRO_CATEGORY" => "", + "PRO_CREATE_USER" => $_SESSION['USER_LOGGED'] + ); + $stringBpmn = base64_encode(file_get_contents($_FILES["PROCESS_FILENAME"]["tmp_name"])); + try { + if ($createMode === "overwrite") { + $process = Process::getByProTitle($data["PRO_TITLE"]); + $oProcess = new Process(); + $oProcess->remove($process["PRO_UID"]); + } + if ($createMode === "rename") { + $data["PRO_TITLE"] = Process::getNextTitle($data["PRO_TITLE"]); + } + $project = new \ProcessMaker\Project\Adapter\WorkflowBpmn($data); + $result = array( + "success" => true, + "catchMessage" => "", + "prj_uid" => $project->getUid(), + "stringBpmn" => $stringBpmn + ); + } catch (Exception $e) { + $result = array( + "success" => true, + "catchMessage" => $e->getMessage() + ); + } + echo G::json_encode($result); + exit(0); +} + $action = isset( $_REQUEST['ajaxAction'] ) ? $_REQUEST['ajaxAction'] : null; $importer = new XmlImporter(); diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html index 61424ceee..b38e943b2 100644 --- a/workflow/engine/templates/designer/index.html +++ b/workflow/engine/templates/designer/index.html @@ -76,7 +76,7 @@ - +{$stringBpmn}