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 @@
+
|