diff --git a/composer.json b/composer.json index 31373274b..2c86e6700 100644 --- a/composer.json +++ b/composer.json @@ -7,36 +7,17 @@ "repositories": [ { - "type": "package", - "package": { - "name": "jquery/jquery", - "version": "1.10.2", - "dist": { - "url": "http://code.jquery.com/jquery-1.10.2.min.js", - "type": "file" - } - } + "packagist": false }, { - "type": "package", - "package": { - "name": "underscore/underscore", - "version": "1.5.2", - "dist": { - "url": "http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js", - "type": "file" - } - } + "type": "composer", + "url": "http://composer-public.colosa.net/" }, { - "type": "vcs", - "url": "git@bitbucket.org:colosa/pmUI.git" - }, - { - "type": "vcs", - "url": "git@bitbucket.org:colosa/MichelangeloFE.git" + "type": "composer", + "url": "http://composer.colosa.net/" } - ], + ], "minimum-stability": "stable", "prefer-stable": true, diff --git a/framework/src/Maveriks/WebApplication.php b/framework/src/Maveriks/WebApplication.php index 71c9e8910..5112cf87b 100644 --- a/framework/src/Maveriks/WebApplication.php +++ b/framework/src/Maveriks/WebApplication.php @@ -69,7 +69,9 @@ class WebApplication } else { return self::RUNNING_DEFAULT; } - } elseif (substr($this->requestUri, 1, 3) === "api") { + } elseif (substr($this->requestUri, 1, 3) === "api" + && count(explode("/", $this->requestUri)) >= 4 // url api pattern: /api/1.0// + ) { return self::RUNNING_API; } else { return self::RUNNING_WORKFLOW; diff --git a/workflow/engine/bin/tasks/cliFlushCache.php b/workflow/engine/bin/tasks/cliFlushCache.php new file mode 100644 index 000000000..543b68932 --- /dev/null +++ b/workflow/engine/bin/tasks/cliFlushCache.php @@ -0,0 +1,63 @@ +. + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * Coral Gables, FL, 33134, USA, or email info@colosa.com. + * + * @package workflow-engine-bin-tasks + */ +G::LoadSystem("g"); + +CLI::taskName('flush-cache'); +CLI::taskDescription(<<setRootDir($rootDir); + $loadConstants = false; + $workspaces = get_workspaces_from_args($args); + + if (! defined("PATH_C")) { + die("ERROR: seems processmaker is not properly installed (System constants are missing).".PHP_EOL); + } + + CLI::logging("Flush ".pakeColor::colorize("system", "INFO")." cache ... "); + G::rm_dir(PATH_C); + G::mk_dir(PATH_C, 0777); + echo "DONE" . PHP_EOL; + + foreach ($workspaces as $workspace) { + echo "Flush workspace " . pakeColor::colorize($workspace->name, "INFO") . " cache ... "; + + G::rm_dir($workspace->path . "/cache"); + G::mk_dir($workspace->path . "/cache", 0777); + G::rm_dir($workspace->path . "/cachefiles"); + G::mk_dir($workspace->path . "/cachefiles", 0777); + echo "DONE" . PHP_EOL; + } +} diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index adb842dc7..7a53721e1 100644 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -58,7 +58,7 @@ G::LoadClass( 'pmFunctions' ); //call plugin if (class_exists( 'folderData' )) { //$folderData = new folderData($sProUid, $proFields['PRO_TITLE'], $sAppUid, $Fields['APP_TITLE'], $sUsrUid); - $oPluginRegistry = PMPluginRegistry::getSingleton(); + $oPluginRegistry = &PMPluginRegistry::getSingleton(); $aAvailablePmFunctions = $oPluginRegistry->getPmFunctions(); foreach ($aAvailablePmFunctions as $key => $class) { $filePlugin = PATH_PLUGINS . $class . PATH_SEP . 'classes' . PATH_SEP . 'class.pmFunctions.php'; @@ -165,7 +165,7 @@ class PMScript foreach ($tokens as $token) { if (is_string($token)) { - $result = $result . $token; + $result .= $token; } else { list($id, $text) = $token; @@ -175,18 +175,18 @@ class PMScript case T_COMMENT: case T_ML_COMMENT: //we've defined this case T_DOC_COMMENT: //and this + if ($text != 'sScript = $sScript; + $this->sScript = trim($result); } /** diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index 59f09b020..18e060ba3 100755 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -808,6 +808,19 @@ class Process extends BaseProcess return $aProcesses; } + public function getCasesCountForProcess($pro_uid) + { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( 'COUNT(*) AS TOTAL_CASES' ); + $oCriteria->add( ApplicationPeer::PRO_UID, $pro_uid ); + $oDataset = ApplicationPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + + $oDataset->next(); + $cases = $oDataset->getRow(); + return (int)$cases['TOTAL_CASES']; + } + public function getAllProcessesByCategory () { $oCriteria = new Criteria( 'workflow' ); diff --git a/workflow/engine/src/ProcessMaker/Project/Bpmn.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php index 69b077306..4e132094a 100644 --- a/workflow/engine/src/ProcessMaker/Project/Bpmn.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -158,6 +158,9 @@ class Bpmn extends Handler foreach ($this->getFlows() as $flow) { $this->removeFlow($flow["FLO_UID"]); } + foreach ($this->getArtifacts() as $artifacts) { + $this->removeArtifact($artifacts["ART_UID"]); + } if ($process = $this->getProcess("object")) { $process->delete(); @@ -213,9 +216,12 @@ class Bpmn extends Handler public function canRemove() { - // TODO this must validate if the project can be deleted or not. - // TODO the project can be deleted only if it has not any started cases - return true; + $totalCases = \Process::getCasesCountForProcess($this->prjUid); + if ($totalCases == 0) { + return true; + } else { + return false; + } } /* diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index 4ae9f55c8..f8105f5f5 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -54,28 +54,35 @@ class Project extends Api public function post($request_data) { try { - //TODO - } catch (\Exception $e) { - // TODO in case that $process->createProcess($userUid, $data); fails maybe the BPMN project was created successfully - // so, we need remove it or change the creation order. - - throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); - } - } - - public function put($prjUid, $request_data) - { - try { - return Adapter\BpmnWorkflow::updateFromStruct($prjUid, $request_data); + return Adapter\BpmnWorkflow::createFromStruct($request_data); } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } - public function delete($prjUid) + /** + * @url PUT /:prj_uid + * + * @param string $prj_uid {@min 32}{@max 32} + */ + public function doPutProject($prj_uid, $request_data) { try { - // TODO + return Adapter\BpmnWorkflow::updateFromStruct($prj_uid, $request_data); + } catch (\Exception $e) { + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + } + + /** + * @param string $prj_uid {@min 1}{@max 32} + * @url DELETE /:prj_uid + */ + public function delete($prj_uid) + { + try { + $oBpmnWf = Adapter\BpmnWorkflow::load($prj_uid); + $oBpmnWf->remove(); } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); }