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.case.php b/workflow/engine/classes/class.case.php index 87839c453..4f27344f9 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -4100,6 +4100,7 @@ class Cases $oApplication = new Application(); $aFields = $oApplication->load($sApplicationUID); + $appStatusCurrent = $aFields['APP_STATUS']; $oCriteria = new Criteria('workflow'); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); @@ -4168,9 +4169,10 @@ class Cases } /*----------------------------------********---------------------------------*/ $data = array ( - 'APP_UID' => $sApplicationUID, - 'DEL_INDEX' => $iIndex, - 'USR_UID' => $user_logged + 'APP_UID' => $sApplicationUID, + 'DEL_INDEX' => $iIndex, + 'USR_UID' => $user_logged, + 'APP_STATUS_CURRENT' => $appStatusCurrent ); $data = array_merge($aFields, $data); $oListCanceled = new ListCanceled(); 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/classes/model/ListCanceled.php b/workflow/engine/classes/model/ListCanceled.php index a81944440..f5d740bc4 100644 --- a/workflow/engine/classes/model/ListCanceled.php +++ b/workflow/engine/classes/model/ListCanceled.php @@ -104,9 +104,21 @@ class ListCanceled extends BaseListCanceled { $oListInbox->removeAll($data['APP_UID']); $users = new Users(); - $users->refreshTotal($data['USR_UID'], 'removed', 'inbox'); + if (!empty($data['APP_STATUS_CURRENT']) && $data['APP_STATUS_CURRENT'] == 'DRAFT') { + $users->refreshTotal($data['USR_UID'], 'removed', 'draft'); + } else { + $users->refreshTotal($data['USR_UID'], 'removed', 'inbox'); + } $users->refreshTotal($data['USR_UID'], 'add', 'canceled'); + //Update - WHERE + $criteriaWhere = new Criteria("workflow"); + $criteriaWhere->add(ListParticipatedLastPeer::APP_UID, $data["APP_UID"], Criteria::EQUAL); + //Update - SET + $criteriaSet = new Criteria("workflow"); + $criteriaSet->add(ListParticipatedLastPeer::APP_STATUS, 'CANCELLED'); + BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); + $con = Propel::getConnection( ListCanceledPeer::DATABASE_NAME ); try { $this->fromArray( $data, BasePeer::TYPE_FIELDNAME ); diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 33e776ae9..52a0cb4eb 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2,6 +2,7 @@ # This is a fix for InnoDB in MySQL >= 4.1.x # It "suspends judgement" for fkey relationships until are tables are set. SET FOREIGN_KEY_CHECKS = 0; +SET @@global.sql_mode='MYSQL40'; #----------------------------------------------------------------------------- #-- APPLICATION 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/departments/departmentList.js b/workflow/engine/templates/departments/departmentList.js index 1d39938e4..a1e21b5ea 100755 --- a/workflow/engine/templates/departments/departmentList.js +++ b/workflow/engine/templates/departments/departmentList.js @@ -317,6 +317,11 @@ CloseWindow = function(){ Ext.getCmp('w').hide(); }; SaveNewDepartment = function(){ + if( newForm.getForm().findField('dep_name').getValue().trim() == "") { + Ext.Msg.alert(_('ID_WARNING'), _("ID_FIELD_REQUIRED", _("ID_DEPARTMENT_NAME"))); + newForm.getForm().findField('dep_name').setValue(""); + return false; + } waitLoading.show(); var dep_node = Ext.getCmp('treePanel').getSelectionModel().getSelectedNode(); if (dep_node) dep_node.unselect(); 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 @@ +