diff --git a/workflow/engine/bin/cron.php b/workflow/engine/bin/cron.php index 4e0932e73..9ab67a4ad 100755 --- a/workflow/engine/bin/cron.php +++ b/workflow/engine/bin/cron.php @@ -5,7 +5,7 @@ */ if ( !defined('PATH_SEP') ) { - define('PATH_SEP', ( substr(PHP_OS, 0, 3) == 'WIN' ) ? '\\' : '/'); + define("PATH_SEP", (substr(PHP_OS, 0, 3) == "WIN")? "\\" : "/"); } $docuroot = explode(PATH_SEP, str_replace('engine' . PATH_SEP . 'methods' . PATH_SEP . 'services', '', dirname(__FILE__))); @@ -129,7 +129,7 @@ if ($force || !$bCronIsRunning) { $oDirectory = dir(PATH_DB); $cws = 0; - while($sObject = $oDirectory->read()) { + while (($sObject = $oDirectory->read()) !== false) { if (($sObject != ".") && ($sObject != "..")) { if (is_dir(PATH_DB . $sObject)) { if (file_exists(PATH_DB . $sObject . PATH_SEP . "db.php")) { @@ -141,6 +141,10 @@ if ($force || !$bCronIsRunning) { } } } else { + if (!is_dir(PATH_DB . $ws) || !file_exists(PATH_DB . $ws . PATH_SEP . "db.php")) { + throw new Exception("Error: The workspace \"$ws\" does not exist"); + } + $cws = 1; system("php -f \"" . dirname(__FILE__) . PATH_SEP . "cron_single.php\" $ws \"$sDate\" \"$dateSystem\" $argsx", $retval); diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php index dbe2951c0..4d7b59945 100755 --- a/workflow/engine/bin/cron_single.php +++ b/workflow/engine/bin/cron_single.php @@ -10,11 +10,6 @@ register_shutdown_function( ) ); -/** - * cron_single.php - * @package workflow-engine-bin - */ - if (!defined('SYS_LANG')) { define('SYS_LANG', 'en'); } @@ -220,9 +215,6 @@ Bootstrap::registerClass('CaseTrackerObject', PATH_HOME . "engine/classes/mod Bootstrap::registerClass('BaseCaseTrackerObjectPeer',PATH_HOME . "engine/classes/model/om/BaseCaseTrackerObjectPeer.php"); Bootstrap::registerClass('CaseTrackerObjectPeer', PATH_HOME . "engine/classes/model/CaseTrackerObjectPeer.php"); -Bootstrap::registerClass('BaseConfiguration', PATH_HOME . "engine/classes/model/om/BaseConfiguration.php"); -Bootstrap::registerClass('Configuration', PATH_HOME . "engine/classes/model/Configuration.php"); - Bootstrap::registerClass('BaseDbSource', PATH_HOME . "engine/classes/model/om/BaseDbSource.php"); Bootstrap::registerClass('DbSource', PATH_HOME . "engine/classes/model/DbSource.php"); @@ -367,7 +359,7 @@ Bootstrap::registerClass("AddonsManagerPeer", PATH_HOME . "engine" . PATH_SEP Bootstrap::registerClass('dashboards', PATH_HOME . "engine/classes/class.dashboards.php"); /*----------------------------------********---------------------------------*/ -$arrayClass = array("EmailServer", "ListInbox", "ListParticipatedHistory"); +$arrayClass = array("Configuration", "EmailServer", "ListInbox", "ListParticipatedHistory"); foreach ($arrayClass as $value) { Bootstrap::registerClass("Base" . $value, PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "om" . PATH_SEP . "Base" . $value . ".php"); diff --git a/workflow/engine/bin/messageeventcron.php b/workflow/engine/bin/messageeventcron.php index e8d1d9a50..4d884768d 100644 --- a/workflow/engine/bin/messageeventcron.php +++ b/workflow/engine/bin/messageeventcron.php @@ -114,6 +114,10 @@ try { } } } else { + if (!is_dir(PATH_DB . $workspace) || !file_exists(PATH_DB . $workspace . PATH_SEP . "db.php")) { + throw new Exception("Error: The workspace \"$workspace\" does not exist"); + } + $countw++; passthru("php -f \"$messageEventCronSinglePath\" $workspace \"" . base64_encode(PATH_HOME) . "\" \"" . base64_encode(PATH_TRUNK) . "\" \"" . base64_encode(PATH_OUTTRUNK) . "\""); diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 7e81cab80..1085bab39 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -752,14 +752,19 @@ class Derivation //$appFields['APP_PROC_CODE'] = $nextDel['TAS_DEF_PROC_CODE']; /*----------------------------------********---------------------------------*/ if ($nextDel['TAS_UID'] != '-1') { - $taskCur = TaskPeer::retrieveByPK($nextDel['TAS_UID']); - $aTask = $taskCur->toArray( BasePeer::TYPE_FIELDNAME ); + $taskNex = TaskPeer::retrieveByPK($nextDel['TAS_UID']); + $aTask = $taskNex->toArray( BasePeer::TYPE_FIELDNAME ); $arrayTaskTypeToExclude = array("WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT"); if (!in_array($aTask['TAS_TYPE'], $arrayTaskTypeToExclude)) { if (!empty($iNewDelIndex) && empty($aSP)) { $oAppDel = AppDelegationPeer::retrieveByPK( $appFields['APP_UID'], $iNewDelIndex ); $aFields = $oAppDel->toArray( BasePeer::TYPE_FIELDNAME ); $aFields['APP_STATUS'] = $currentDelegation['APP_STATUS']; + $taskCur = TaskPeer::retrieveByPK($currentDelegation['TAS_UID']); + $aTaskCur = $taskCur->toArray( BasePeer::TYPE_FIELDNAME ); + if ($aTaskCur['TAS_TYPE'] == "INTERMEDIATE-CATCH-MESSAGE-EVENT") { + $removeList = false; + } $aFields['REMOVED_LIST'] = $removeList; $inbox = new ListInbox(); $inbox->newRow($aFields, $appFields['CURRENT_USER_UID'], false, array(), ($nextDel['TAS_ASSIGN_TYPE'] == 'SELF_SERVICE' ? true : false)); diff --git a/workflow/engine/classes/class.pluginRegistry.php b/workflow/engine/classes/class.pluginRegistry.php index e6a24a476..27248d4fa 100755 --- a/workflow/engine/classes/class.pluginRegistry.php +++ b/workflow/engine/classes/class.pluginRegistry.php @@ -399,22 +399,19 @@ class PMPluginRegistry } /** - * get status plugin in the singleton + * Get status plugin in the singleton * - * @param unknown_type $sNamespace + * @param string $name Plugin name + * + * return mixed Return a string with status plugin, 0 otherwise */ - public function getStatusPlugin ($sNamespace) + public function getStatusPlugin($name) { - foreach ($this->_aPluginDetails as $namespace => $detail) { - if ($sNamespace == $namespace) { - if ($this->_aPluginDetails[$sNamespace]->enabled) { - return 'enabled'; - } else { - return 'disabled'; - } - } + try { + return (isset($this->_aPluginDetails[$name]))? (($this->_aPluginDetails[$name]->enabled)? "enabled" : "disabled") : 0; + } catch (Excepton $e) { + throw $e; } - return 0; } /** diff --git a/workflow/engine/methods/authSources/authSources_Ajax.php b/workflow/engine/methods/authSources/authSources_Ajax.php index 5e2dbb57b..edf936350 100755 --- a/workflow/engine/methods/authSources/authSources_Ajax.php +++ b/workflow/engine/methods/authSources/authSources_Ajax.php @@ -149,16 +149,30 @@ try { } break; case 'authSourcesNew': + $pluginRegistry = &PMPluginRegistry::getSingleton(); + $arr = Array (); $oDirectory = dir( PATH_RBAC . 'plugins' . PATH_SEP ); - $aAuthSourceTypes = array (); + while ($sObject = $oDirectory->read()) { if (($sObject != '.') && ($sObject != '..') && ($sObject != '.svn') && ($sObject != 'ldap')) { if (is_file( PATH_RBAC . 'plugins' . PATH_SEP . $sObject )) { - $sType = trim( str_replace( 'class.', '', str_replace( '.php', '', $sObject ) ) ); - $aAuthSourceTypes['sType'] = $sType; - $aAuthSourceTypes['sLabel'] = $sType; - $arr[] = $aAuthSourceTypes; + $sType = trim(str_replace(array("class.", ".php"), "", $sObject)); + + $statusPlugin = $pluginRegistry->getStatusPlugin($sType); + $flagAdd = false; + + if (preg_match("/^(?:enabled|disabled)$/", $statusPlugin)) { + if ($statusPlugin == "enabled") { + $flagAdd = true; + } + } else { + $flagAdd = true; + } + + if ($flagAdd) { + $arr[] = array("sType" => $sType, "sLabel" => $sType); + } } } } diff --git a/workflow/engine/methods/cases/casesListExtJs.php b/workflow/engine/methods/cases/casesListExtJs.php index 7d86cf9b0..48e7560e3 100755 --- a/workflow/engine/methods/cases/casesListExtJs.php +++ b/workflow/engine/methods/cases/casesListExtJs.php @@ -42,6 +42,12 @@ switch ($action) { $urlProxy = 'proxyCasesList'; $action = 'unassigned'; break; + case 'to_revise': + $urlProxy = 'proxyCasesList'; + break; + case 'to_reassign': + $urlProxy = 'proxyCasesList'; + break; } /*----------------------------------********---------------------------------*/ diff --git a/workflow/engine/skinEngine/neoclassic/layout.html b/workflow/engine/skinEngine/neoclassic/layout.html index a2996d5ba..3c8649a41 100644 --- a/workflow/engine/skinEngine/neoclassic/layout.html +++ b/workflow/engine/skinEngine/neoclassic/layout.html @@ -15,7 +15,7 @@ {if $user_logged neq '' or $tracker neq ''} - + {include file="$tpl_menu"} {if (count($subMenus)>0) } {include file= "$tpl_submenu"} diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 60f790ddf..56a1ac627 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -861,15 +861,33 @@ class Cases * * @access public * @param string $app_uid, Uid for case + * @param string $usr_uid, Uid user * @return array * * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia */ - public function deleteCase($app_uid) + public function deleteCase($app_uid, $usr_uid) { Validator::isString($app_uid, '$app_uid'); Validator::appUid($app_uid, '$app_uid'); + + $criteria = new \Criteria(); + $criteria->addSelectColumn( \ApplicationPeer::APP_STATUS ); + $criteria->addSelectColumn( \ApplicationPeer::APP_INIT_USER ); + $criteria->add( \ApplicationPeer::APP_UID, $app_uid, \Criteria::EQUAL ); + $dataset = \ApplicationPeer::doSelectRS($criteria); + $dataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $aRow = $dataset->getRow(); + if ($aRow['APP_STATUS'] != 'DRAFT') { + throw (new \Exception(\G::LoadTranslation("ID_DELETE_CASE_NO_STATUS"))); + } + + if ($aRow['APP_INIT_USER'] != $usr_uid) { + throw (new \Exception(\G::LoadTranslation("ID_DELETE_CASE_NO_OWNER"))); + } + $case = new \Cases(); $case->removeCase( $app_uid ); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php index cdb3a9fc8..da32040ec 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php @@ -190,12 +190,11 @@ class FilesManager break; } $content = $aData['prf_content']; - if (is_string($content)) { - if (file_exists($sDirectory)) { - $directory = $sMainDirectory. PATH_SEP . $sSubDirectory . $aData['prf_filename']; - throw new \Exception(\G::LoadTranslation("ID_EXISTS_FILE", array($directory))); - } + if (file_exists($sDirectory) ) { + $directory = $sMainDirectory. PATH_SEP . $sSubDirectory . $aData['prf_filename']; + throw new \Exception(\G::LoadTranslation("ID_EXISTS_FILE", array($directory))); } + if (!file_exists($sCheckDirectory)) { $sPkProcessFiles = \G::generateUniqueID(); $oProcessFiles = new \ProcessFiles(); @@ -555,4 +554,3 @@ class FilesManager } } } - diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index 0235e922c..cefb56f9f 100755 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -497,7 +497,10 @@ class BpmnWorkflow extends Project\Bpmn //Setting as start Task //or //Remove as start Task - $this->wp->setStartTask($arrayFlowData["FLO_ELEMENT_DEST"], $flagStartTask); + $bwp = new self; + if ($bwp->getActivity($arrayFlowData["FLO_ELEMENT_DEST"])) { + $this->wp->setStartTask($arrayFlowData["FLO_ELEMENT_DEST"], $flagStartTask); + } break; } } @@ -1384,6 +1387,10 @@ class BpmnWorkflow extends Project\Bpmn $activity = $bwp->getActivity($activityData["ACT_UID"]); + if ($activity["BOU_CONTAINER"] != $activityData["BOU_CONTAINER"]) { + $activity = null; + } + if ($forceInsert || is_null($activity)) { if ($generateUid) { //Generate and update UID diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php index 00c92a0f6..6a65fc7b4 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php @@ -809,8 +809,9 @@ class Cases extends Api public function doDeleteCase($cas_uid) { try { + $usr_uid = $this->getUserId(); $cases = new \ProcessMaker\BusinessModel\Cases(); - $cases->deleteCase($cas_uid); + $cases->deleteCase($cas_uid, $usr_uid); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html index bdc08add1..c9d76d383 100644 --- a/workflow/engine/templates/designer/index.html +++ b/workflow/engine/templates/designer/index.html @@ -79,6 +79,7 @@ +