From b960ee742f13468e583969babb72e6326915ff8f Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 21 Apr 2017 12:04:57 -0400 Subject: [PATCH 01/30] HOR-2814 --- workflow/engine/classes/class.pmTable.php | 14 ++- workflow/engine/classes/model/ListInbox.php | 93 ++++++++++++++----- .../classes/model/ListParticipatedLast.php | 84 ++++++++++++++--- workflow/engine/classes/model/ListPaused.php | 83 ++++++++++++++--- .../engine/classes/model/ListUnassigned.php | 83 ++++++++++++++--- 5 files changed, 293 insertions(+), 64 deletions(-) diff --git a/workflow/engine/classes/class.pmTable.php b/workflow/engine/classes/class.pmTable.php index 89f836af5..b5551da15 100644 --- a/workflow/engine/classes/class.pmTable.php +++ b/workflow/engine/classes/class.pmTable.php @@ -54,6 +54,7 @@ class PmTable private $db; private $alterTable = true; private $keepData = false; + public $tableClassName = ''; public function __construct ($tableName = null) { @@ -67,7 +68,7 @@ class PmTable /** * Set oldTableName to pmTable - * + * * @param string $oldTableName */ public function setOldTableName($oldTableName) @@ -672,7 +673,7 @@ class PmTable $table = $this->oldTableName; $tableBackup = str_replace($this->tableName, $this->oldTableName, $tableBackup); $sqlTableBackup = str_replace($this->tableName, $this->oldTableName, $sqlTableBackup); - + //Delete backup if exists $rs = $stmt->executeQuery(str_replace($table, $tableBackup, $queryStack["drop"])); @@ -955,6 +956,7 @@ class PmTable $additionalTable = AdditionalTablesPeer::retrieveByPK($additionalTableUid); $tableName = $additionalTable->getAddTabName(); + $this->tableClassName = $additionalTable->getAddTabClassName(); $additionalTable = new AdditionalTables(); $tableData = $additionalTable->load($additionalTableUid, true); @@ -990,8 +992,12 @@ class PmTable $listTablePeer = 'ListInboxPeer'; break; } - - $oCriteria->addJoin($listTablePeer::APP_UID, $tableName.'.APP_UID', Criteria::LEFT_JOIN); + //Some PMtables does not have the APP NUMBER columns, but if exist we must be use + if (in_array($tableName.'.APP_NUMBER', $oCriteria->getSelectColumns())) { + $oCriteria->addJoin($listTablePeer::APP_NUMBER, $tableName.'.APP_NUMBER', Criteria::LEFT_JOIN); + } else { + $oCriteria->addJoin($listTablePeer::APP_UID, $tableName.'.APP_UID', Criteria::LEFT_JOIN); + } } return $oCriteria; } diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index 9230c2b92..3d7ffbb3f 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -16,7 +16,8 @@ require_once 'classes/model/om/BaseListInbox.php'; // @codingStandardsIgnoreStart class ListInbox extends BaseListInbox { - // @codingStandardsIgnoreEnd + private $additionalClassName = ''; + /** * Create List Inbox Table * @@ -384,7 +385,14 @@ class ListInbox extends BaseListInbox self::create($data, $isSelfService); } - public function loadFilters(&$criteria, $filters) + /** + * This function add restriction in the query related to the filters + * @param Criteria $criteria, must be contain only select of columns + * @param array $filters + * @param array $additionalColumns information about the new columns related to custom cases list + * @throws PropelException + */ + public function loadFilters(&$criteria, $filters, $additionalColumns = array()) { $action = isset($filters['action']) ? $filters['action'] : ""; $usrUid = isset($filters['usr_uid']) ? $filters['usr_uid'] : ""; @@ -463,21 +471,60 @@ class ListInbox extends BaseListInbox //Filter Search if ($search != '') { - $criteria->add( - $criteria->getNewCriterion(ListInboxPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE) + //If we have additional tables configured in the custom cases list, prepare the variables for search + if (count($additionalColumns) > 0) { + require_once(PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = ''; + $sw = 0; + } + + //We prepare the query related to the custom cases list + foreach ($additionalColumns as $key => $value) { + if ($sw === 0) { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE); + } else { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); + } + $sw = 1; + } + + if (!empty($oTmpCriteria)) { + $criteria->add( + $criteria->getNewCriterion(ListInboxPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_UID, $search, Criteria::EQUAL) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_NUMBER, $search, Criteria::EQUAL) - ) + $criteria->getNewCriterion(ListInboxPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_UID, $search, Criteria::EQUAL) + ->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_NUMBER, $search, Criteria::EQUAL) + ->addOr( + $oTmpCriteria + ) + ) + ) + ) ) - ) - ) - ); + ); + } else { + $criteria->add( + $criteria->getNewCriterion(ListInboxPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_UID, $search, Criteria::EQUAL) + ->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_NUMBER, $search, Criteria::EQUAL) + ) + ) + ) + ) + ); + } } //Filter Process Id @@ -504,16 +551,20 @@ class ListInbox extends BaseListInbox } /** - * @param $usr_uid - * @param array $filters + * This function get the information in the corresponding cases list + * @param string $usr_uid, must be show cases related to this user + * @param array $filters for apply in the result * @param null $callbackRecord - * @return array + * @return array $data * @throws PropelException */ public function loadList($usr_uid, $filters = array(), $callbackRecord = null) { $pmTable = new PmTable(); - $criteria = $pmTable->addPMFieldsToList('todo'); + $list = isset($filters['action']) ? $filters['action'] : ""; + $criteria = $pmTable->addPMFieldsToList($list); + $this->additionalClassName = $pmTable->tableClassName; + $additionalColumns = $criteria->getSelectColumns(); $filters['usr_uid'] = $usr_uid; @@ -542,7 +593,7 @@ class ListInbox extends BaseListInbox $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); $criteria->addSelectColumn(UsersPeer::USR_USERNAME); $criteria->addJoin(ListInboxPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - self::loadFilters($criteria, $filters); + self::loadFilters($criteria, $filters, $additionalColumns); $sort = (!empty($filters['sort'])) ? ListInboxPeer::TABLE_NAME.'.'.$filters['sort'] : @@ -615,7 +666,7 @@ class ListInbox extends BaseListInbox return isset($aRow[$fieldName]) ? $aRow[$fieldName] : null; } - /** + /** * Returns the number of cases of a user * @param string $usrUid * @param array $filters diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index 6407718c5..b89ecf3f5 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -14,7 +14,8 @@ require_once 'classes/model/om/BaseListParticipatedLast.php'; */ class ListParticipatedLast extends BaseListParticipatedLast { - // @codingStandardsIgnoreEnd + private $additionalClassName = ''; + /** * Create List Participated History Table. * @@ -234,7 +235,14 @@ class ListParticipatedLast extends BaseListParticipatedLast } } - public function loadFilters(&$criteria, $filters) + /** + * This function add restriction in the query related to the filters + * @param Criteria $criteria, must be contain only select of columns + * @param array $filters + * @param array $additionalColumns information about the new columns related to custom cases list + * @throws PropelException + */ + public function loadFilters(&$criteria, $filters, $additionalColumns = array()) { $filter = isset($filters['filter']) ? $filters['filter'] : ''; $search = isset($filters['search']) ? $filters['search'] : ''; @@ -271,25 +279,64 @@ class ListParticipatedLast extends BaseListParticipatedLast break; } + //Filter Search if ($search != '') { - $criteria->add( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%'.$search.'%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TAS_TITLE, '%'.$search.'%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_UID, $search, Criteria::EQUAL) + //If we have additional tables configured in the custom cases list, prepare the variables for search + if (count($additionalColumns) > 0) { + require_once(PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = ''; + $sw = 0; + } + + //We prepare the query related to the custom cases list + foreach ($additionalColumns as $key => $value) { + if ($sw === 0) { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE); + } else { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); + } + $sw = 1; + } + if (!empty($oTmpCriteria)) { + $criteria->add( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) ->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::EQUAL) + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_UID, $search, Criteria::EQUAL) + ->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::EQUAL) + ->addOr( + $oTmpCriteria + ) + ) + + ) ) - ) - ) - ); + ); + } else { + $criteria->add( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_UID, $search, Criteria::EQUAL) + ->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::EQUAL) + ) + ) + ) + ); + } } + //Filter Process Id if ($process != '') { $criteria->add(ListParticipatedLastPeer::PRO_UID, $process, Criteria::EQUAL); } + //Filter Category if ($category != '') { $criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY); $aConditions = array(); @@ -308,10 +355,21 @@ class ListParticipatedLast extends BaseListParticipatedLast } } + /** + * This function get the information in the corresponding cases list + * @param string $usr_uid, must be show cases related to this user + * @param array $filters for apply in the result + * @param null $callbackRecord + * @param string $appUid related to the specific case + * @return array $data + * @throws PropelException + */ public function loadList($usr_uid, $filters = array(), $callbackRecord = null, $appUid = '') { $pmTable = new PmTable(); $criteria = $pmTable->addPMFieldsToList('sent'); + $this->additionalClassName = $pmTable->tableClassName; + $additionalColumns = $criteria->getSelectColumns(); $criteria->addSelectColumn(ListParticipatedLastPeer::APP_UID); $criteria->addSelectColumn(ListParticipatedLastPeer::DEL_INDEX); @@ -343,7 +401,7 @@ class ListParticipatedLast extends BaseListParticipatedLast $criteria->add(ListParticipatedLastPeer::APP_UID, $appUid, Criteria::EQUAL); } - self::loadFilters($criteria, $filters); + self::loadFilters($criteria, $filters, $additionalColumns); $sort = (!empty($filters['sort'])) ? ListParticipatedLastPeer::TABLE_NAME.'.'.$filters['sort'] : diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index 939ae1c2e..f064d05c6 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -17,7 +17,8 @@ require_once 'classes/model/om/BaseListPaused.php'; // @codingStandardsIgnoreStart class ListPaused extends BaseListPaused { - // @codingStandardsIgnoreEnd + private $additionalClassName = ''; + /** * Create List Paused Table * @@ -212,7 +213,14 @@ class ListPaused extends BaseListPaused } } - public function loadFilters(&$criteria, $filters) + /** + * This function add restriction in the query related to the filters + * @param Criteria $criteria, must be contain only select of columns + * @param array $filters + * @param array $additionalColumns information about the new columns related to custom cases list + * @throws PropelException + */ + public function loadFilters(&$criteria, $filters, $additionalColumns = array()) { $filter = isset($filters['filter']) ? $filters['filter'] : ""; $search = isset($filters['search']) ? $filters['search'] : ""; @@ -230,25 +238,64 @@ class ListPaused extends BaseListPaused break; } + //Filter Search if ($search != '') { - $criteria->add( - $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_UID, $search, Criteria::EQUAL) + //If we have additional tables configured in the custom cases list, prepare the variables for search + if (count($additionalColumns) > 0) { + require_once(PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = ''; + $sw = 0; + } + + //We prepare the query related to the custom cases list + foreach ($additionalColumns as $key => $value) { + if ($sw === 0) { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE); + } else { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); + } + $sw = 1; + } + if (!empty($oTmpCriteria)) { + $criteria->add( + $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) ->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_NUMBER, $search, Criteria::EQUAL) + $criteria->getNewCriterion(ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_UID, $search, Criteria::EQUAL) + ->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_NUMBER, $search, Criteria::EQUAL) + ->addOr( + $oTmpCriteria + ) + ) + + ) ) - ) - ) - ); + ); + } else { + $criteria->add( + $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_UID, $search, Criteria::EQUAL) + ->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_NUMBER, $search, Criteria::EQUAL) + ) + ) + ) + ); + } } + //Filter Process Id if ($process != '') { $criteria->add(ListPausedPeer::PRO_UID, $process, Criteria::EQUAL); } + //Filter Category if ($category != '') { $criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY); $aConditions = array(); @@ -258,11 +305,21 @@ class ListPaused extends BaseListPaused } } + /** + * This function get the information in the corresponding cases list + * @param string $usr_uid, must be show cases related to this user + * @param array $filters for apply in the result + * @param null $callbackRecord + * @return array $data + * @throws PropelException + */ public function loadList($usr_uid, $filters = array(), $callbackRecord = null) { $resp = array(); $pmTable = new PmTable(); $criteria = $pmTable->addPMFieldsToList('paused'); + $this->additionalClassName = $pmTable->tableClassName; + $additionalColumns = $criteria->getSelectColumns(); $criteria->addSelectColumn(ListPausedPeer::APP_UID); $criteria->addSelectColumn(ListPausedPeer::USR_UID); @@ -287,7 +344,7 @@ class ListPaused extends BaseListPaused $criteria->addSelectColumn(ListPausedPeer::DEL_DUE_DATE); $criteria->addSelectColumn(ListPausedPeer::DEL_PRIORITY); $criteria->add(ListPausedPeer::USR_UID, $usr_uid, Criteria::EQUAL); - self::loadFilters($criteria, $filters); + self::loadFilters($criteria, $filters, $additionalColumns); $sort = (!empty($filters['sort'])) ? ListPausedPeer::TABLE_NAME.'.'.$filters['sort'] : "APP_PAUSED_DATE"; $dir = isset($filters['dir']) ? $filters['dir'] : "ASC"; diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index 5e20fd6e1..6b54dd9cd 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -17,8 +17,9 @@ require_once 'classes/model/om/BaseListUnassigned.php'; // @codingStandardsIgnoreStart class ListUnassigned extends BaseListUnassigned { - // @codingStandardsIgnoreEnd + private $additionalClassName = ''; private $total = 0; + /** * Create List Unassigned Table * @@ -165,7 +166,14 @@ class ListUnassigned extends BaseListUnassigned return true; } - public function loadFilters(&$criteria, $filters) + /** + * This function add restriction in the query related to the filters + * @param Criteria $criteria, must be contain only select of columns + * @param array $filters + * @param array $additionalColumns information about the new columns related to custom cases list + * @throws PropelException + */ + public function loadFilters(&$criteria, $filters, $additionalColumns = array()) { $filter = isset($filters['filter']) ? $filters['filter'] : ""; $search = isset($filters['search']) ? $filters['search'] : ""; @@ -174,25 +182,64 @@ class ListUnassigned extends BaseListUnassigned $dateFrom = isset($filters['dateFrom']) ? $filters['dateFrom'] : ""; $dateTo = isset($filters['dateTo']) ? $filters['dateTo'] : ""; + //Filter Search if ($search != '') { - $criteria->add( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_UID, $search, Criteria::EQUAL) + //If we have additional tables configured in the custom cases list, prepare the variables for search + if (count($additionalColumns) > 0) { + require_once(PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = ''; + $sw = 0; + } + + //We prepare the query related to the custom cases list + foreach ($additionalColumns as $key => $value) { + if ($sw === 0) { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE); + } else { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); + } + $sw = 1; + } + if (!empty($oTmpCriteria)) { + $criteria->add( + $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) ->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_NUMBER, $search, Criteria::EQUAL) + $criteria->getNewCriterion(ListUnassignedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_UID, $search, Criteria::EQUAL) + ->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_NUMBER, $search, Criteria::EQUAL) + ->addOr( + $oTmpCriteria + ) + ) + + ) ) - ) - ) - ); + ); + } else { + $criteria->add( + $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) + ->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_UID, $search, Criteria::EQUAL) + ->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_NUMBER, $search, Criteria::EQUAL) + ) + ) + ) + ); + } } + //Filter Process Id if ($process != '') { $criteria->add(ListUnassignedPeer::PRO_UID, $process, Criteria::EQUAL); } + //Filter Category if ($category != '') { $criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY); $aConditions = array(); @@ -202,12 +249,22 @@ class ListUnassigned extends BaseListUnassigned } } + /** + * This function get the information in the corresponding cases list + * @param string $usr_uid, must be show cases related to this user + * @param array $filters for apply in the result + * @param null $callbackRecord + * @return array $data + * @throws PropelException + */ public function loadList($usr_uid, $filters = array(), $callbackRecord = null) { $resp = array(); $pmTable = new PmTable(); $tasks = $this->getSelfServiceTasks($usr_uid); $criteria = $pmTable->addPMFieldsToList('unassigned'); + $this->additionalClassName = $pmTable->tableClassName; + $additionalColumns = $criteria->getSelectColumns(); $criteria->addSelectColumn(ListUnassignedPeer::APP_UID); $criteria->addSelectColumn(ListUnassignedPeer::DEL_INDEX); @@ -282,7 +339,7 @@ class ListUnassigned extends BaseListUnassigned } //Apply some filters - self::loadFilters($criteria, $filters); + self::loadFilters($criteria, $filters, $additionalColumns); $sort = (!empty($filters['sort'])) ? ListUnassignedPeer::TABLE_NAME.'.'.$filters['sort'] : "LIST_UNASSIGNED.DEL_DELEGATE_DATE"; From 432f69a67fac95b0f84536bd1b0e7961d9461c8a Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 27 Apr 2017 16:07:20 -0400 Subject: [PATCH 02/30] Solve PR observations --- workflow/engine/classes/class.pmTable.php | 2 +- workflow/engine/classes/model/ListInbox.php | 16 +++++----------- .../classes/model/ListParticipatedLast.php | 15 +++++---------- workflow/engine/classes/model/ListPaused.php | 15 +++++---------- workflow/engine/classes/model/ListUnassigned.php | 15 +++++---------- 5 files changed, 21 insertions(+), 42 deletions(-) diff --git a/workflow/engine/classes/class.pmTable.php b/workflow/engine/classes/class.pmTable.php index b5551da15..d7319dd07 100644 --- a/workflow/engine/classes/class.pmTable.php +++ b/workflow/engine/classes/class.pmTable.php @@ -992,7 +992,7 @@ class PmTable $listTablePeer = 'ListInboxPeer'; break; } - //Some PMtables does not have the APP NUMBER columns, but if exist we must be use + //Some PM tables don’t have the APP NUMBER column; but if exists, we must use it if (in_array($tableName.'.APP_NUMBER', $oCriteria->getSelectColumns())) { $oCriteria->addJoin($listTablePeer::APP_NUMBER, $tableName.'.APP_NUMBER', Criteria::LEFT_JOIN); } else { diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index 3d7ffbb3f..ef76146f8 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -471,22 +471,17 @@ class ListInbox extends BaseListInbox //Filter Search if ($search != '') { + $oTmpCriteria = ''; //If we have additional tables configured in the custom cases list, prepare the variables for search if (count($additionalColumns) > 0) { - require_once(PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = ''; - $sw = 0; - } + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - //We prepare the query related to the custom cases list - foreach ($additionalColumns as $key => $value) { - if ($sw === 0) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE); - } else { + //We prepare the query related to the custom cases list + foreach (array_slice($additionalColumns, 1) as $value) { $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); } - $sw = 1; } if (!empty($oTmpCriteria)) { @@ -565,7 +560,6 @@ class ListInbox extends BaseListInbox $criteria = $pmTable->addPMFieldsToList($list); $this->additionalClassName = $pmTable->tableClassName; $additionalColumns = $criteria->getSelectColumns(); - $filters['usr_uid'] = $usr_uid; $criteria->addSelectColumn(ListInboxPeer::APP_UID); diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index b89ecf3f5..03d6091ac 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -283,21 +283,16 @@ class ListParticipatedLast extends BaseListParticipatedLast if ($search != '') { //If we have additional tables configured in the custom cases list, prepare the variables for search if (count($additionalColumns) > 0) { - require_once(PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = ''; - $sw = 0; - } + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - //We prepare the query related to the custom cases list - foreach ($additionalColumns as $key => $value) { - if ($sw === 0) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE); - } else { + //We prepare the query related to the custom cases list + foreach (array_slice($additionalColumns, 1) as $value) { $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); } - $sw = 1; } + if (!empty($oTmpCriteria)) { $criteria->add( $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index f064d05c6..5125d1df2 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -242,21 +242,16 @@ class ListPaused extends BaseListPaused if ($search != '') { //If we have additional tables configured in the custom cases list, prepare the variables for search if (count($additionalColumns) > 0) { - require_once(PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = ''; - $sw = 0; - } + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - //We prepare the query related to the custom cases list - foreach ($additionalColumns as $key => $value) { - if ($sw === 0) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE); - } else { + //We prepare the query related to the custom cases list + foreach (array_slice($additionalColumns, 1) as $value) { $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); } - $sw = 1; } + if (!empty($oTmpCriteria)) { $criteria->add( $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index 6b54dd9cd..6dc504e58 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -186,21 +186,16 @@ class ListUnassigned extends BaseListUnassigned if ($search != '') { //If we have additional tables configured in the custom cases list, prepare the variables for search if (count($additionalColumns) > 0) { - require_once(PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = ''; - $sw = 0; - } + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - //We prepare the query related to the custom cases list - foreach ($additionalColumns as $key => $value) { - if ($sw === 0) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE); - } else { + //We prepare the query related to the custom cases list + foreach (array_slice($additionalColumns, 1) as $value) { $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); } - $sw = 1; } + if (!empty($oTmpCriteria)) { $criteria->add( $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) From 66dcf0432c0242762b0fb469d2831f57560abc64 Mon Sep 17 00:00:00 2001 From: qronald Date: Mon, 22 May 2017 13:27:38 -0400 Subject: [PATCH 03/30] HOR-3279 --- workflow/engine/controllers/designer.php | 8 ++++++++ .../src/ProcessMaker/BusinessModel/Light/Tracker.php | 8 ++++---- .../src/ProcessMaker/Services/Api/Light/Tracker.php | 3 +-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php index 24d370c97..10e983a9e 100644 --- a/workflow/engine/controllers/designer.php +++ b/workflow/engine/controllers/designer.php @@ -29,6 +29,14 @@ class Designer extends Controller $client = $this->getClientCredentials(); if (isset($httpData->tracker_designer) && $httpData->tracker_designer == 1) { + try { + $response = \ProcessMaker\BusinessModel\Light\Tracker::authentication($_SESSION['CASE'], $_SESSION['PIN']); + } catch (\Exception $e) { + G::header('Location: /errors/error403.php'); + die(); + } + $httpData->prj_uid = $response['process']; + $httpData->app_uid = $response['app_uid']; $client["tracker_designer"] = 1; } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light/Tracker.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light/Tracker.php index 7d5b87eed..bc6a5e4ef 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light/Tracker.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light/Tracker.php @@ -13,14 +13,14 @@ class Tracker } /** - * authenticaction for case tracker + * Authentication for case tracker * - * @param $case numbre case - * @param $pin code pin access for case tracek + * @param int $case number case + * @param int $pin code pin access for case track * @return array * @throws \Exception */ - public function authentication($case, $pin) + public static function authentication($case, $pin) { $cases = new \Cases(); $response = array(); diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Light/Tracker.php b/workflow/engine/src/ProcessMaker/Services/Api/Light/Tracker.php index 051c7d2f7..b723c2170 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Light/Tracker.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Light/Tracker.php @@ -21,8 +21,7 @@ class Tracker extends Api public function Authentication($case, $pin) { try { - $oMobile = new \ProcessMaker\BusinessModel\Light\Tracker(); - $response = $oMobile->authentication($case, $pin); + $response = \ProcessMaker\BusinessModel\Light\Tracker::authentication($case, $pin); } catch (\Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } From c0e80d1d32830ec07ec54b1ea0daf1b12bcf3d7b Mon Sep 17 00:00:00 2001 From: qronald Date: Tue, 23 May 2017 10:08:44 -0400 Subject: [PATCH 04/30] HOR-3281 --- .../engine/methods/groups/groups_Ajax.php | 23 +++++++++++-------- .../engine/templates/groups/groupsList.js | 22 +++++++++++------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/workflow/engine/methods/groups/groups_Ajax.php b/workflow/engine/methods/groups/groups_Ajax.php index b048b3162..867a575df 100644 --- a/workflow/engine/methods/groups/groups_Ajax.php +++ b/workflow/engine/methods/groups/groups_Ajax.php @@ -129,15 +129,20 @@ switch ($_POST['action']) { echo G::json_encode( $result ); break; case 'exitsGroupName': - require_once 'classes/model/Groupwf.php'; - G::LoadClass( 'Groupswf' ); - $oGroup = new Groupwf(); - $oCriteria = $oGroup->loadByGroupname( $_POST['GRP_NAME'] ); - $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next(); - $aRow = $oDataset->getRow(); - $response = ($aRow) ? 'true' : 'false'; + $groupName = strip_tags($_POST['GRP_NAME']); + if ($groupName) { + require_once 'classes/model/Groupwf.php'; + G::LoadClass('Groupswf'); + $oGroup = new Groupwf(); + $oCriteria = $oGroup->loadByGroupname($_POST['GRP_NAME']); + $oDataset = GroupwfPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $aRow = $oDataset->getRow(); + $response = ($aRow) ? \G::json_encode(['success' => true]) : \G::json_decode(['success' => false]); + } else { + $response = \G::json_encode(['success' => true, 'msg' => \G::LoadTranslation('ID_FIELD_INVALID')]); + } echo $response; break; case 'saveNewGroup': diff --git a/workflow/engine/templates/groups/groupsList.js b/workflow/engine/templates/groups/groupsList.js index c4cb48656..6833a45e8 100644 --- a/workflow/engine/templates/groups/groupsList.js +++ b/workflow/engine/templates/groups/groupsList.js @@ -182,7 +182,13 @@ Ext.onReady(function(){ text: _("ID_SAVE"), handler: function (btn, ev) { - if( newForm.getForm().findField('name').getValue().trim() == "") { + var reg = new RegExp(/(<([^>]+)>)/ig), + nameGroups = newForm.getForm().findField('name').getValue(); + if (reg.test(nameGroups)){ + Ext.Msg.alert(_('ID_WARNING'), _("ID_FIELD_INVALID", _("ID_GROUP_NAME"))); + newForm.getForm().findField('name').setValue(""); + return false; + } else if (nameGroups.trim() == "") { Ext.Msg.alert(_('ID_WARNING'), _("ID_FIELD_REQUIRED", _("ID_GROUP_NAME"))); newForm.getForm().findField('name').setValue(""); return false; @@ -434,8 +440,8 @@ CheckGroupName = function(grp_name, function_success, function_failure){ params: {action: 'exitsGroupName', GRP_NAME: grp_name}, success: function(resp, opt){ viewport.getEl().unmask(); - var checked = eval(resp.responseText); - (!checked) ? function_success() : function_failure(); + var response = JSON.parse(resp.responseText); + (!response.success) ? function_success() : function_failure(response.msg); }, failure: function(r,o) { viewport.getEl().unmask(); @@ -452,11 +458,11 @@ SaveNewGroupAction = function(){ }; //Show Duplicate Group Name Message -DuplicateGroupName = function(){ - Ext.getCmp("btnCreateSave").setDisabled(false); - Ext.getCmp("btnUpdateSave").setDisabled(false); - - PMExt.warning(_('ID_GROUPS'), _('ID_MSG_GROUP_NAME_EXISTS')); +DuplicateGroupName = function (msg) { + Ext.getCmp("btnCreateSave").setDisabled(false); + Ext.getCmp("btnUpdateSave").setDisabled(false); + newForm.getForm().findField('name').setValue(""); + PMExt.warning(_('ID_GROUPS'), msg ? msg : _('ID_MSG_GROUP_NAME_EXISTS')); }; //Save New Group From 7b8f3541994b3bad013387186bff9d33d3c74314 Mon Sep 17 00:00:00 2001 From: qronald Date: Tue, 23 May 2017 12:19:36 -0400 Subject: [PATCH 05/30] up observations --- workflow/engine/controllers/designer.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php index 10e983a9e..41259de0b 100644 --- a/workflow/engine/controllers/designer.php +++ b/workflow/engine/controllers/designer.php @@ -30,13 +30,17 @@ class Designer extends Controller if (isset($httpData->tracker_designer) && $httpData->tracker_designer == 1) { try { - $response = \ProcessMaker\BusinessModel\Light\Tracker::authentication($_SESSION['CASE'], $_SESSION['PIN']); + if(!isset($_SESSION['CASE']) && !isset($_SESSION['PIN'])){ + throw (new \Exception( + \G::LoadTranslation('ID_CASE_NOT_EXISTS') . "\n" . \G::LoadTranslation('ID_PIN_INVALID') + )); + } + \ProcessMaker\BusinessModel\Light\Tracker::authentication($_SESSION['CASE'], $_SESSION['PIN']); } catch (\Exception $e) { - G::header('Location: /errors/error403.php'); + Bootstrap::registerMonolog('CaseTracker', 400, $e->getMessage(), [], SYS_SYS, 'processmaker.log'); + \G::header('Location: /errors/error403.php'); die(); } - $httpData->prj_uid = $response['process']; - $httpData->app_uid = $response['app_uid']; $client["tracker_designer"] = 1; } From 48581193bf06fc5469590db7febebeadc5d27ba4 Mon Sep 17 00:00:00 2001 From: qronald Date: Tue, 23 May 2017 15:00:57 -0400 Subject: [PATCH 06/30] Psr-2 --- workflow/engine/controllers/designer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php index 41259de0b..f80d6c52f 100644 --- a/workflow/engine/controllers/designer.php +++ b/workflow/engine/controllers/designer.php @@ -30,7 +30,7 @@ class Designer extends Controller if (isset($httpData->tracker_designer) && $httpData->tracker_designer == 1) { try { - if(!isset($_SESSION['CASE']) && !isset($_SESSION['PIN'])){ + if (!isset($_SESSION['CASE']) && !isset($_SESSION['PIN'])) { throw (new \Exception( \G::LoadTranslation('ID_CASE_NOT_EXISTS') . "\n" . \G::LoadTranslation('ID_PIN_INVALID') )); From 2b2d27ff0a892fa4c9af4b8cefaaf07005d820e7 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 19 May 2017 16:31:27 -0400 Subject: [PATCH 07/30] HOR-3276 --- gulliver/system/class.rbac.php | 51 +++ .../engine/classes/model/ObjectPermission.php | 34 ++ workflow/engine/methods/users/users_Ajax.php | 305 +++--------------- .../BusinessModel/ProcessSupervisor.php | 33 ++ .../src/ProcessMaker/BusinessModel/User.php | 158 +++++++++ 5 files changed, 324 insertions(+), 257 deletions(-) diff --git a/gulliver/system/class.rbac.php b/gulliver/system/class.rbac.php index 257539841..a9f5719a4 100644 --- a/gulliver/system/class.rbac.php +++ b/gulliver/system/class.rbac.php @@ -70,9 +70,31 @@ class RBAC public $singleSignOn = false; private static $instance = null; + public $authorizedActions = array(); public function __construct () { + $this->authorizedActions = array( + 'users_Ajax.php' => array( + 'availableUsers' => array('PM_FACTORY'), + 'assign' => array('PM_FACTORY'), + 'ofToAssign' => array('PM_FACTORY'), + 'usersGroup' => array('PM_FACTORY'), + 'canDeleteUser' => array('PM_USERS'), + 'deleteUser' => array('PM_USERS'), + 'changeUserStatus' => array('PM_USERS'), + 'availableGroups' => array('PM_USERS'), + 'assignedGroups' => array('PM_USERS'), + 'assignGroupsToUserMultiple' => array('PM_USERS'), + 'deleteGroupsToUserMultiple' => array('PM_USERS'), + 'authSources' => array('PM_USERS'), + 'loadAuthSourceByUID' => array('PM_USERS'), + 'updateAuthServices' => array('PM_USERS'), + 'usersList' => array('PM_USERS'), + 'summaryUserData' => array('PM_USERS'), + 'verifyIfUserAssignedAsSupervisor' => array('PM_USERS'), + ) + ); } /** @@ -1443,5 +1465,34 @@ class RBAC } } } + /** + * This function verify if the user allows to the file with a specific action + * If the action is not defined in the authorizedActions we give the allow + * @param string $file + * @param string $action + * + * @return void + */ + public function allows($file, $action) + { + $access = true; + $permissions = isset($this->authorizedActions[$file][$action]) ? $this->authorizedActions[$file][$action] : array(); + $totalPermissions = count($permissions); + $countAccess = 0; + foreach ($permissions as $key => $value) { + if ($this->userCanAccess($value) == 1) { + $countAccess++; + } + } + //Check if the user has all permissions that needed + if ($countAccess !== $totalPermissions) { + $access = false; + } + + if (!$access) { + G::header('Location: /errors/error403.php'); + die(); + } + } } diff --git a/workflow/engine/classes/model/ObjectPermission.php b/workflow/engine/classes/model/ObjectPermission.php index 1319e6456..b483918db 100644 --- a/workflow/engine/classes/model/ObjectPermission.php +++ b/workflow/engine/classes/model/ObjectPermission.php @@ -409,5 +409,39 @@ class ObjectPermission extends BaseObjectPermission } return $result; } + + /** + * Verify if the user has a objectPermission for some process + * + * @param string $usrUid the uid of the user + * @param int $typeRelation + * + * @return array + */ + public function objectPermissionPerUser($usrUid, $typeRelation = 1) + { + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(ObjectPermissionPeer::USR_UID); + $criteria->addSelectColumn(ObjectPermissionPeer::PRO_UID); + $criteria->add(ObjectPermissionPeer::OP_USER_RELATION, $typeRelation, Criteria::EQUAL); + $criteria->add(ObjectPermissionPeer::USR_UID, $usrUid, Criteria::EQUAL); + $doSelectRS = ObjectPermissionPeer::doSelectRS($criteria); + $doSelectRS->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $doSelectRS->next(); + $objectPermision = $doSelectRS->getRow(); + $data = array(); + if (isset($objectPermision["USR_UID"])) { + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(ProcessPeer::PRO_TITLE); + $criteria->add(ProcessPeer::PRO_UID, $objectPermision["PRO_UID"], Criteria::EQUAL); + $doSelectRS = ProcessPeer::doSelectRS($criteria); + $doSelectRS->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $doSelectRS->next(); + $content = $doSelectRS->getRow(); + $data['PRO_TITLE'] = $content["PRO_TITLE"]; + $data['PRO_UID'] = $objectPermision["PRO_UID"]; + } + return $data; + } } diff --git a/workflow/engine/methods/users/users_Ajax.php b/workflow/engine/methods/users/users_Ajax.php index 5052db1cb..cad63cff6 100644 --- a/workflow/engine/methods/users/users_Ajax.php +++ b/workflow/engine/methods/users/users_Ajax.php @@ -1,34 +1,6 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ try { - G::LoadSystem('inputfilter'); - $filter = new InputFilter(); - $_GET = $filter->xssFilterHard($_GET); - $_POST = $filter->xssFilterHard($_POST); - $_REQUEST = $filter->xssFilterHard($_REQUEST); - global $RBAC; switch ($RBAC->userCanAccess('PM_LOGIN')) { case - 2: @@ -47,38 +19,15 @@ try { $_POST = $_POST['form']; } if (isset($_REQUEST['function'])) { - //$value= $_POST['function']; $value = get_ajax_value('function'); } else { - //$value= $_POST['functions']; $value = get_ajax_value('functions'); } + + $RBAC->allows(basename(__FILE__), $value); switch ($value) { - case 'verifyUsername': - //print_r($_POST); die; - $_POST['sOriginalUsername'] = get_ajax_value('sOriginalUsername'); - $_POST['sUsername'] = get_ajax_value('sUsername'); - if ($_POST['sOriginalUsername'] == $_POST['sUsername']) { - echo '0'; - } else { - require_once 'classes/model/Users.php'; - G::LoadClass('Users'); - $oUser = new Users(); - $oCriteria = $oUser->loadByUsername($_POST['sUsername']); - $oDataset = UsersPeer::doSelectRs($oCriteria, Propel::getDbConnection('workflow_ro')); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - //print_r($aRow); die; - //if (!$aRow) - if (!is_array($aRow)) { - echo '0'; - } else { - echo '1'; - } - } - break; case 'availableUsers': + //Classic process: list of users to assign in the task G::LoadClass('processMap'); $oProcessMap = new ProcessMap(); global $G_PUBLISH; @@ -87,6 +36,7 @@ try { G::RenderPage('publish', 'raw'); break; case 'assign': + //Classic process: assign users and groups in the task G::LoadClass('tasks'); $oTasks = new Tasks(); switch ((int) $_POST['TU_RELATION']) { @@ -103,6 +53,7 @@ try { } break; case 'ofToAssign': + //Classic process: remove users and groups related a task G::LoadClass('tasks'); $oTasks = new Tasks(); switch ((int) $_POST['TU_RELATION']) { @@ -117,36 +68,11 @@ try { } break; case 'changeView': + //Classic process: set variable for users and groups Ad hoc $_SESSION['iType'] = $_POST['TU_TYPE']; break; - case 'deleteGroup': - G::LoadClass('groups'); - $oGroup = new Groups(); - $oGroup->removeUserOfGroup($_POST['GRP_UID'], $_POST['USR_UID']); - $_GET['sUserUID'] = $_POST['USR_UID']; - $G_PUBLISH = new Publisher(); - $G_PUBLISH->AddContent('view', 'users/users_Tree'); - G::RenderPage('publish', 'raw'); - break; - case 'showUserGroupInterface': - $_GET['sUserUID'] = $_POST['sUserUID']; - $G_PUBLISH = new Publisher(); - $G_PUBLISH->AddContent('view', 'users/users_AssignGroup'); - G::RenderPage('publish', 'raw'); - break; - case 'showUserGroups': - $_GET['sUserUID'] = $_POST['sUserUID']; - $G_PUBLISH = new Publisher(); - $G_PUBLISH->AddContent('view', 'users/users_Tree'); - G::RenderPage('publish', 'raw'); - break; - case 'assignUserToGroup': - G::LoadClass('groups'); - $oGroup = new Groups(); - $oGroup->addUserToGroup($_POST['GRP_UID'], $_POST['USR_UID']); - echo '

' . G::LoadTranslation('ID_MSG_ASSIGN_DONE') . '

'; - break; case 'usersGroup': + //Classic process: list of users in a group related a task G::LoadClass('groups'); $oGroup = new Groups(); $aGroup = $oGroup->getUsersOfGroup($_POST['GRP_UID']); @@ -154,29 +80,8 @@ try { echo $aValues['USR_FIRSTNAME'] . ' ' . $aValues['USR_LASTNAME'] . '
'; } break; - - //This case is used to check if any of the user group has as role 'PROCESSMAKER_ADMIN', - case 'usersAdminGroupExtJS': - G::LoadClass('groups'); - $oGroup = new Groups(); - $aGroup = $oGroup->getUsersOfGroup($_POST['GRP_UID']); - $responseUser = 'false'; - $usersAdmin = ''; - foreach ($aGroup as $iIndex => $aValues) { - if ($aValues['USR_ROLE'] == 'PROCESSMAKER_ADMIN') { - $responseUser = 'true'; - $usersAdmin .= $aValues['USR_FIRSTNAME'] . ' ' . $aValues['USR_LASTNAME'] . ', '; - } - } - $usersAdmin = substr($usersAdmin, 0, - 2); - - $result = new stdClass(); - $result->reponse = $responseUser; - $result->users = $usersAdmin; - - echo G::json_encode($result); - break; case 'canDeleteUser': + //Check before delete a user G::LoadClass('case'); $oProcessMap = new Cases(); $USR_UID = $_POST['uUID']; @@ -198,44 +103,31 @@ try { echo $response; break; case 'deleteUser': - $UID = $_POST['USR_UID']; - - //process permissions - $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(ObjectPermissionPeer::USR_UID); - $criteria->addSelectColumn(ObjectPermissionPeer::PRO_UID); - $criteria->add(ObjectPermissionPeer::OP_USER_RELATION, 1, Criteria::EQUAL); - $criteria->add(ObjectPermissionPeer::USR_UID, $UID, Criteria::EQUAL); - $doSelectRS = DynaformPeer::doSelectRS($criteria); - $doSelectRS->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $doSelectRS->next(); - $objectPermision = $doSelectRS->getRow(); - if (isset($objectPermision["USR_UID"])) { - $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(ProcessPeer::PRO_TITLE); - $criteria->add(ProcessPeer::PRO_UID, $objectPermision["PRO_UID"], Criteria::EQUAL); - $doSelectRS = ProcessPeer::doSelectRS($criteria); - $doSelectRS->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $doSelectRS->next(); - $content = $doSelectRS->getRow(); + //Check if the user was defined in a process permissions + $oObjectPermission = new ObjectPermission(); + $aProcess = $oObjectPermission->objectPermissionPerUser($_POST['USR_UID'], 1); + if (count($aProcess) > 0) { echo G::json_encode(array( "status" => 'ERROR', - "message" => G::LoadTranslation('ID_USER_CANT_BE_DELETED_FOR_THE_PROCESS', array('processTitle' => isset($content["PRO_TITLE"]) ? $content["PRO_TITLE"] : $objectPermision['PRO_UID'])) + "message" => G::LoadTranslation('ID_USER_CANT_BE_DELETED_FOR_THE_PROCESS', array('processTitle' => isset($aProcess["PRO_TITLE"]) ? $aProcess["PRO_TITLE"] : $aProcess['PRO_UID'])) )); break; } + //Remove from tasks G::LoadClass('tasks'); $oTasks = new Tasks(); $oTasks->ofToAssignUserOfAllTasks($UID); + + //Remove from groups G::LoadClass('groups'); $oGroups = new Groups(); $oGroups->removeUserOfAllGroups($UID); - $RBAC->changeUserStatus($UID, 'CLOSED'); - $_GET['USR_USERNAME'] = ''; - $RBAC->updateUser(array('USR_UID' => $UID, 'USR_USERNAME' => $_GET['USR_USERNAME'] - ), ''); + + //Update the table Users require_once 'classes/model/Users.php'; + $RBAC->changeUserStatus($UID, 'CLOSED'); + $RBAC->updateUser(array('USR_UID' => $UID,'USR_USERNAME' => ''), ''); $oUser = new Users(); $aFields = $oUser->load($UID); $aFields['USR_STATUS'] = 'CLOSED'; @@ -252,13 +144,13 @@ try { //Delete users as supervisor $criteria = new Criteria("workflow"); - $criteria->add(ProcessUserPeer::USR_UID, $UID, Criteria::EQUAL); $criteria->add(ProcessUserPeer::PU_TYPE, "SUPERVISOR", Criteria::EQUAL); ProcessUserPeer::doDelete($criteria); G::auditLog("DeleteUser", "User Name: ". $userName." User ID: (".$UID.") "); break; case 'changeUserStatus': + //When the user change the status: ACTIVE, INACTIVE, VACATION $response = new stdclass(); if (isset($_REQUEST['USR_UID']) && isset($_REQUEST['NEW_USR_STATUS'])) { $RBAC->changeUserStatus($_REQUEST['USR_UID'], ($_REQUEST['NEW_USR_STATUS'] == 'ACTIVE' ? 1 : 0)); @@ -278,6 +170,7 @@ try { die(G::json_encode($response)); break; case 'availableGroups': + //Get the available groups for assign to user G::LoadClass('groups'); $filter = (isset($_POST['textFilter'])) ? $_POST['textFilter'] : ''; $groups = new Groups(); @@ -291,6 +184,7 @@ try { echo '{groups: ' . G::json_encode($arr) . '}'; break; case 'assignedGroups': + //Get the groups related to user G::LoadClass('groups'); $filter = (isset($_POST['textFilter'])) ? $_POST['textFilter'] : ''; $groups = new Groups(); @@ -304,6 +198,7 @@ try { echo '{groups: ' . G::json_encode($arr) . '}'; break; case 'assignGroupsToUserMultiple': + //Assign user in a group $USR_UID = $_POST['USR_UID']; $gUIDs = explode(',', $_POST['GRP_UID']); G::LoadClass('groups'); @@ -313,6 +208,7 @@ try { } break; case 'deleteGroupsToUserMultiple': + //Remove a user from a group $USR_UID = $_POST['USR_UID']; $gUIDs = explode(',', $_POST['GRP_UID']); G::LoadClass('groups'); @@ -322,6 +218,7 @@ try { } break; case 'authSources': + //Get the authentication information $criteria = $RBAC->getAllAuthSources(); $objects = AuthenticationSourcePeer::doSelectRS($criteria); $objects->setFetchmode(ResultSet::FETCHMODE_ASSOC); @@ -336,22 +233,19 @@ try { } $started = Array(); $started['AUTH_SOURCE_UID'] = '00000000000000000000000000000000'; - //$started['AUTH_SOURCE_NAME'] = 'ProcessMaker'; - //$started['AUTH_SOURCE_TYPE'] = 'MYSQL'; $started['AUTH_SOURCE_SHOW'] = 'ProcessMaker (MYSQL)'; $arr[] = $started; while ($objects->next()) { $row = $objects->getRow(); $aux = Array(); $aux['AUTH_SOURCE_UID'] = $row['AUTH_SOURCE_UID']; - //$aux['AUTH_SOURCE_NAME'] = $row['AUTH_SOURCE_NAME']; - //$aux['AUTH_SOURCE_TYPE'] = $row['AUTH_SOURCE_TYPE']; $aux['AUTH_SOURCE_SHOW'] = $row['AUTH_SOURCE_NAME'] . ' (' . $row['AUTH_SOURCE_PROVIDER'] . ')'; $arr[] = $aux; } echo '{sources: ' . G::json_encode($arr) . '}'; break; case 'loadAuthSourceByUID': + //Get the authentication source assignment require_once 'classes/model/Users.php'; $oCriteria = $RBAC->load($_POST['uUID']); $UID_AUTH = $oCriteria['UID_AUTH_SOURCE']; @@ -373,6 +267,7 @@ try { echo G::json_encode($res); break; case 'updateAuthServices': + //Update the information related to user's autentication $aData = $RBAC->load($_POST['usr_uid']); unset($aData['USR_ROLE']); $auth_uid = $_POST['auth_source']; @@ -393,127 +288,31 @@ try { $aData['USR_AUTH_USER_DN'] = $auth_dn; } $RBAC->updateUser($aData); - G::auditLog("AssignAuthenticationSource", "User Name: ".$aData['USR_USERNAME'].' User ID: ('.$aData['USR_UID'].') assign to '.$aData['USR_AUTH_TYPE']); + G::auditLog( + "AssignAuthenticationSource", + "User Name: ".$aData['USR_USERNAME'].' User ID: ('.$aData['USR_UID'].') assign to '.$aData['USR_AUTH_TYPE'] + ); echo '{success: true}'; break; case 'usersList': - require_once 'classes/model/Users.php'; - require_once 'classes/model/LoginLog.php'; - require_once 'classes/model/Department.php'; - require_once 'classes/model/AppCacheView.php'; - require_once PATH_RBAC . 'model/Roles.php'; - global $RBAC; + //Get the list of users + //Read the configurations related to enviroments G::LoadClass('configuration'); $co = new Configurations(); $config = $co->getConfiguration('usersList', 'pageSize', '', $_SESSION['USER_LOGGED']); $limit_size = isset($config['pageSize']) ? $config['pageSize'] : 20; - $start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0; $limit = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : $limit_size; + $start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0; $filter = isset($_REQUEST['textFilter']) ? $_REQUEST['textFilter'] : ''; - $auths = isset($_REQUEST['auths']) ? $_REQUEST['auths'] : ''; + $authSource = isset($_REQUEST['auths']) ? $_REQUEST['auths'] : ''; $sort = isset($_REQUEST['sort']) ? $_REQUEST['sort'] : ''; $dir = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : 'ASC'; - $aUsers = Array(); - if ($auths != '') { - $aUsers = $RBAC->getListUsersByAuthSource($auths); - } - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn('COUNT(*) AS CNT'); - if ($filter != '') { - $cc = $oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_EMAIL, '%' . $filter . '%', Criteria::LIKE)))); - $oCriteria->add($cc); - } - $oCriteria->add(UsersPeer::USR_STATUS, array('CLOSED'), Criteria::NOT_IN); - if ($auths != '') { - $totalRows = sizeof($aUsers); - } else { - $oDataset = UsersPeer::DoSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $row = $oDataset->getRow(); - $totalRows = $row['CNT']; - } - $oCriteria->clearSelectColumns(); - $oCriteria->addSelectColumn(UsersPeer::USR_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_USERNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->addSelectColumn(UsersPeer::USR_EMAIL); - $oCriteria->addSelectColumn(UsersPeer::USR_ROLE); - $oCriteria->addSelectColumn(UsersPeer::USR_DUE_DATE); - $oCriteria->addSelectColumn(UsersPeer::USR_STATUS); - $oCriteria->addSelectColumn(UsersPeer::USR_UX); - $oCriteria->addSelectColumn(UsersPeer::DEP_UID); - $oCriteria->addSelectColumn(UsersPeer::USR_LAST_LOGIN); - $oCriteria->addAsColumn('LAST_LOGIN', 0); - $oCriteria->addAsColumn('DEP_TITLE', 0); - $oCriteria->addAsColumn('TOTAL_CASES', 0); - $oCriteria->addAsColumn('DUE_DATE_OK', 1); - $sep = "'"; - $oCriteria->add(UsersPeer::USR_STATUS, array('CLOSED'), Criteria::NOT_IN); - if ($filter != '') { - $cc = $oCriteria->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE)->addOr($oCriteria->getNewCriterion(UsersPeer::USR_EMAIL, '%' . $filter . '%', Criteria::LIKE)))); - $oCriteria->add($cc); - } - if (sizeof($aUsers) > 0) { - $oCriteria->add(UsersPeer::USR_UID, $aUsers, Criteria::IN); - } elseif ($totalRows == 0 && $auths != '') { - $oCriteria->add(UsersPeer::USR_UID, '', Criteria::IN); - } - if ($sort != '') { - if ($dir == 'ASC') { - $oCriteria->addAscendingOrderByColumn($sort); - } else { - $oCriteria->addDescendingOrderByColumn($sort); - } - } - $oCriteria->setOffset($start); - $oCriteria->setLimit($limit); - $oDataset = UsersPeer::DoSelectRs($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $Department = new Department(); - $aDepart = $Department->getAllDepartmentsByUser(); - $aAuthSources = $RBAC->getAllAuthSourcesByUser(); - require_once PATH_CONTROLLERS . 'adminProxy.php'; - $uxList = adminProxy::getUxTypesList(); - - $oRoles = new Roles(); - $oParticipated = new ListParticipatedLast(); - $oAppCache = new AppCacheView(); - $rows = Array(); - $uRole = Array(); - while ($oDataset->next()) { - $row = $oDataset->getRow(); - - try { - $uRole = $oRoles->loadByCode($row['USR_ROLE']); - } catch (exception $oError) { - $uRole['ROL_NAME'] = G::loadTranslation('ID_DELETED'); - } - /*----------------------------------********---------------------------------*/ - if (true) { - $total = $oParticipated->getCountList($row['USR_UID']); - } else { - /*----------------------------------********---------------------------------*/ - $total = $oAppCache->getListCounters('sent', $row['USR_UID'], false); - /*----------------------------------********---------------------------------*/ - } - /*----------------------------------********---------------------------------*/ - $row['USR_ROLE_ID'] = $row['USR_ROLE']; - $row['USR_ROLE'] = isset($uRole['ROL_NAME']) ? ($uRole['ROL_NAME'] != '' ? $uRole['ROL_NAME'] : $uRole['ROL_CODE']) : $uRole['ROL_CODE']; - - $row['DUE_DATE_OK'] = (date('Y-m-d') > date('Y-m-d', strtotime($row['USR_DUE_DATE']))) ? 0 : 1; - $row['LAST_LOGIN'] = isset($row['USR_LAST_LOGIN']) ? \ProcessMaker\Util\DateTime::convertUtcToTimeZone($row['USR_LAST_LOGIN']) : ''; - $row['TOTAL_CASES'] = $total; - $row['DEP_TITLE'] = isset($aDepart[$row['USR_UID']]) ? $aDepart[$row['USR_UID']] : ''; - $row['USR_UX'] = isset($uxList[$row['USR_UX']]) ? $uxList[$row['USR_UX']] : $uxList['NORMAL']; - $row['USR_AUTH_SOURCE'] = isset($aAuthSources[$row['USR_UID']]) ? $aAuthSources[$row['USR_UID']] : 'ProcessMaker (MYSQL)'; - - $rows[] = $row; - } - - echo '{users: ' . G::json_encode($rows) . ', total_users: ' . $totalRows . '}'; + //Get all list of users with the additional information related to department, role, authentication, cases + $oUser = new \ProcessMaker\BusinessModel\User(); + $oDatasetUsers = $oUser->getAllUsersWithAuthSource($authSource, $filter, $sort, $start, $limit, $dir); + $rows = $oUser->getAdditionalInfoFromUsers($oDatasetUsers); + echo '{users: ' . G::json_encode($rows['data']) . ', total_users: ' . $rows['totalCount'] . '}'; break; case 'updatePageSize': G::LoadClass('configuration'); @@ -527,6 +326,7 @@ try { echo '{success: true}'; break; case 'summaryUserData': + //Get all information for the summary require_once 'classes/model/Users.php'; require_once 'classes/model/Department.php'; require_once 'classes/model/AppCacheView.php'; @@ -568,25 +368,16 @@ try { break; case "verifyIfUserAssignedAsSupervisor": + //Before delete we check if is supervisor + $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $isSupervisor = $supervisor->isUserSupervisor($_POST["supervisorUserUid"]); $supervisorUserUid = $_POST["supervisorUserUid"]; - $message = "OK"; - - $criteria = new Criteria("workflow"); - - $criteria->addSelectColumn(ProcessUserPeer::PU_UID); - $criteria->add(ProcessUserPeer::USR_UID, $supervisorUserUid, Criteria::EQUAL); - $criteria->add(ProcessUserPeer::PU_TYPE, "SUPERVISOR", Criteria::EQUAL); - - $rsCriteria = ProcessUserPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - if ($rsCriteria->next()) { - $message = "ERROR"; + $message = 'OK'; + if ($isSupervisor) { + $message = 'ERROR'; } - $response = array(); $response["result"] = $message; - echo G::json_encode($response); break; } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php index 2ed4d6d34..9d1ac7ece 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php @@ -1461,4 +1461,37 @@ class ProcessSupervisor throw $e; } } + /** + * Check if the user is supervisor for some process + * + * @param string $userUid Unique id of User + * + * @return bool Return + */ + public function isUserSupervisor($userUid) + { + //Check if the user is defined as supervisor + $criteria = new \Criteria('workflow'); + $criteria->add(\ProcessUserPeer::USR_UID, $userUid, \Criteria::EQUAL); + $criteria->add(\ProcessUserPeer::PU_TYPE, 'SUPERVISOR', \Criteria::EQUAL); + $rsCriteria = \ProcessUserPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteria->next()) { + return true; + } + //Check if the user is in a group defined as supervisor + $criteria = new \Criteria('workflow'); + $criteria->addSelectColumn(\ProcessUserPeer::USR_UID); + $criteria->addJoin(\ProcessUserPeer::USR_UID, \GroupUserPeer::GRP_UID, \Criteria::LEFT_JOIN); + $criteria->add(\ProcessUserPeer::PU_TYPE, 'GROUP_SUPERVISOR', \Criteria::EQUAL); + $criteria->add(\GroupUserPeer::USR_UID, $userUid, \Criteria::EQUAL); + $rsCriteria = \ProcessUserPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteria->next()) { + return true; + } + return false; + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/User.php b/workflow/engine/src/ProcessMaker/BusinessModel/User.php index 6fdb70486..4122751af 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/User.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/User.php @@ -1540,5 +1540,163 @@ class User throw $e; } } + /** + * This function get the list of users + * + * @param string $authSource, authentication source + * @param string $filter + * @param string $sort + * @param integer $start + * @param integer $limit + * @param string $dir related to order the column + * + * @return void + */ + public function getAllUsersWithAuthSource( + $authSource = '', + $filter = '', + $sort = '', + $start = 0, + $limit = 20, + $dir = 'ASC' + ) + { + global $RBAC; + $aUsers = array(); + if ($authSource != '') { + $aUsers = $RBAC->getListUsersByAuthSource($authSource); + } + $oCriteria = new \Criteria('workflow'); + $oCriteria->addSelectColumn('COUNT(*) AS CNT'); + if ($filter != '') { + $cc = $oCriteria->getNewCriterion(\UsersPeer::USR_USERNAME, '%' . $filter . '%', \Criteria::LIKE) + ->addOr($oCriteria->getNewCriterion(\UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', \Criteria::LIKE) + ->addOr($oCriteria->getNewCriterion(\UsersPeer::USR_LASTNAME, '%' . $filter . '%', \Criteria::LIKE) + ->addOr($oCriteria->getNewCriterion(\UsersPeer::USR_EMAIL, '%' . $filter . '%', \Criteria::LIKE)))); + $oCriteria->add($cc); + } + $oCriteria->add(\UsersPeer::USR_STATUS, array('CLOSED'), \Criteria::NOT_IN); + + if ($authSource != '') { + $totalRows = sizeof($aUsers); + } else { + $oDataset = \UsersPeer::DoSelectRs($oCriteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $row = $oDataset->getRow(); + $totalRows = $row['CNT']; + } + $oCriteria->clearSelectColumns(); + $oCriteria->addSelectColumn(\UsersPeer::USR_UID); + $oCriteria->addSelectColumn(\UsersPeer::USR_USERNAME); + $oCriteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME); + $oCriteria->addSelectColumn(\UsersPeer::USR_LASTNAME); + $oCriteria->addSelectColumn(\UsersPeer::USR_EMAIL); + $oCriteria->addSelectColumn(\UsersPeer::USR_ROLE); + $oCriteria->addSelectColumn(\UsersPeer::USR_DUE_DATE); + $oCriteria->addSelectColumn(\UsersPeer::USR_STATUS); + $oCriteria->addSelectColumn(\UsersPeer::USR_UX); + $oCriteria->addSelectColumn(\UsersPeer::DEP_UID); + $oCriteria->addSelectColumn(\UsersPeer::USR_LAST_LOGIN); + $oCriteria->addAsColumn('LAST_LOGIN', 0); + $oCriteria->addAsColumn('DEP_TITLE', 0); + $oCriteria->addAsColumn('TOTAL_CASES', 0); + $oCriteria->addAsColumn('DUE_DATE_OK', 1); + $sep = "'"; + $oCriteria->add(\UsersPeer::USR_STATUS, array('CLOSED'), \Criteria::NOT_IN); + if ($filter != '') { + $cc = $oCriteria->getNewCriterion(\UsersPeer::USR_USERNAME, '%' . $filter . '%', \Criteria::LIKE) + ->addOr($oCriteria->getNewCriterion(\UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', \Criteria::LIKE) + ->addOr($oCriteria->getNewCriterion(\UsersPeer::USR_LASTNAME, '%' . $filter . '%', \Criteria::LIKE) + ->addOr($oCriteria->getNewCriterion(\UsersPeer::USR_EMAIL, '%' . $filter . '%', \Criteria::LIKE)))); + $oCriteria->add($cc); + } + if (sizeof($aUsers) > 0) { + $oCriteria->add(\UsersPeer::USR_UID, $aUsers, \Criteria::IN); + } elseif ($totalRows == 0 && $authSource != '') { + $oCriteria->add(\UsersPeer::USR_UID, '', \Criteria::IN); + } + if ($sort != '') { + if ($dir == 'ASC') { + $oCriteria->addAscendingOrderByColumn($sort); + } else { + $oCriteria->addDescendingOrderByColumn($sort); + } + } + $oCriteria->setOffset($start); + $oCriteria->setLimit($limit); + $oDataset = \UsersPeer::DoSelectRs($oCriteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + return $oDataset; + } + /** + * This function get additional information related to the user + * Information about the department, rol, cases, authentication + * + * @param criteria $oDatasetUsers, criteria for search users + * + * @return array $dataUsers array of users with the additional information + */ + public function getAdditionalInfoFromUsers($oDatasetUsers) + { + global $RBAC; + //Get the information about the department + $Department = new \Department(); + $aDepart = $Department->getAllDepartmentsByUser(); + + //Get the authentication sources + $aAuthSources = $RBAC->getAllAuthSourcesByUser(); + + //Get roles + $oRoles = new \Roles(); + + //Get cases + $oParticipated = new \ListParticipatedLast(); + $oAppCache = new \AppCacheView(); + + $rows = array(); + $uRole = array(); + $totalRows = 0; + $dataUsers = array(); + while ($oDatasetUsers->next()) { + $totalRows++; + $row = $oDatasetUsers->getRow(); + + //Add the role information related to the user + try { + $uRole = $oRoles->loadByCode($row['USR_ROLE']); + } catch (\exception $oError) { + $uRole['ROL_NAME'] = G::loadTranslation('ID_DELETED'); + } + $row['USR_ROLE_ID'] = $row['USR_ROLE']; + $row['USR_ROLE'] = isset($uRole['ROL_NAME']) ? ($uRole['ROL_NAME'] != '' ? $uRole['ROL_NAME'] : $uRole['ROL_CODE']) : $uRole['ROL_CODE']; + + /*----------------------------------********---------------------------------*/ + if (true) { + $total = $oParticipated->getCountList($row['USR_UID']); + } else { + /*----------------------------------********---------------------------------*/ + $total = $oAppCache->getListCounters('sent', $row['USR_UID'], false); + /*----------------------------------********---------------------------------*/ + } + /*----------------------------------********---------------------------------*/ + $row['TOTAL_CASES'] = $total; + + $row['DUE_DATE_OK'] = (date('Y-m-d') > date('Y-m-d', strtotime($row['USR_DUE_DATE']))) ? 0 : 1; + $row['LAST_LOGIN'] = isset($row['USR_LAST_LOGIN']) ? \ProcessMaker\Util\DateTime::convertUtcToTimeZone($row['USR_LAST_LOGIN']) : ''; + //Add the department information related to the user + $row['DEP_TITLE'] = isset($aDepart[$row['USR_UID']]) ? $aDepart[$row['USR_UID']] : ''; + //Add the authentication information related to the user + $row['USR_AUTH_SOURCE'] = isset($aAuthSources[$row['USR_UID']]) ? $aAuthSources[$row['USR_UID']] : 'ProcessMaker (MYSQL)'; + + $rows[] = $row; + } + $dataUsers['data'] = $rows; + $dataUsers['totalCount'] = $totalRows; + + return $dataUsers; + } + } From 10638029336c03e7c124e0c93846ea15eff5da5e Mon Sep 17 00:00:00 2001 From: qronald Date: Wed, 24 May 2017 08:39:04 -0400 Subject: [PATCH 08/30] up observations --- .../engine/methods/groups/groups_Ajax.php | 25 ++++++++----------- .../engine/templates/groups/groupsList.js | 22 ++++++---------- 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/workflow/engine/methods/groups/groups_Ajax.php b/workflow/engine/methods/groups/groups_Ajax.php index 867a575df..5a671195c 100644 --- a/workflow/engine/methods/groups/groups_Ajax.php +++ b/workflow/engine/methods/groups/groups_Ajax.php @@ -125,24 +125,19 @@ switch ($_POST['action']) { $result->success = true; $result->groups = $arrData; $result->total_groups = $data['totalCount']; - + G::header('Content-Type: application/json'); echo G::json_encode( $result ); break; case 'exitsGroupName': - $groupName = strip_tags($_POST['GRP_NAME']); - if ($groupName) { - require_once 'classes/model/Groupwf.php'; - G::LoadClass('Groupswf'); - $oGroup = new Groupwf(); - $oCriteria = $oGroup->loadByGroupname($_POST['GRP_NAME']); - $oDataset = GroupwfPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - $response = ($aRow) ? \G::json_encode(['success' => true]) : \G::json_decode(['success' => false]); - } else { - $response = \G::json_encode(['success' => true, 'msg' => \G::LoadTranslation('ID_FIELD_INVALID')]); - } + require_once 'classes/model/Groupwf.php'; + G::LoadClass( 'Groupswf' ); + $oGroup = new Groupwf(); + $oCriteria = $oGroup->loadByGroupname( $_POST['GRP_NAME'] ); + $oDataset = GroupwfPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + $response = ($aRow) ? 'true' : 'false'; echo $response; break; case 'saveNewGroup': diff --git a/workflow/engine/templates/groups/groupsList.js b/workflow/engine/templates/groups/groupsList.js index 6833a45e8..c4cb48656 100644 --- a/workflow/engine/templates/groups/groupsList.js +++ b/workflow/engine/templates/groups/groupsList.js @@ -182,13 +182,7 @@ Ext.onReady(function(){ text: _("ID_SAVE"), handler: function (btn, ev) { - var reg = new RegExp(/(<([^>]+)>)/ig), - nameGroups = newForm.getForm().findField('name').getValue(); - if (reg.test(nameGroups)){ - Ext.Msg.alert(_('ID_WARNING'), _("ID_FIELD_INVALID", _("ID_GROUP_NAME"))); - newForm.getForm().findField('name').setValue(""); - return false; - } else if (nameGroups.trim() == "") { + if( newForm.getForm().findField('name').getValue().trim() == "") { Ext.Msg.alert(_('ID_WARNING'), _("ID_FIELD_REQUIRED", _("ID_GROUP_NAME"))); newForm.getForm().findField('name').setValue(""); return false; @@ -440,8 +434,8 @@ CheckGroupName = function(grp_name, function_success, function_failure){ params: {action: 'exitsGroupName', GRP_NAME: grp_name}, success: function(resp, opt){ viewport.getEl().unmask(); - var response = JSON.parse(resp.responseText); - (!response.success) ? function_success() : function_failure(response.msg); + var checked = eval(resp.responseText); + (!checked) ? function_success() : function_failure(); }, failure: function(r,o) { viewport.getEl().unmask(); @@ -458,11 +452,11 @@ SaveNewGroupAction = function(){ }; //Show Duplicate Group Name Message -DuplicateGroupName = function (msg) { - Ext.getCmp("btnCreateSave").setDisabled(false); - Ext.getCmp("btnUpdateSave").setDisabled(false); - newForm.getForm().findField('name').setValue(""); - PMExt.warning(_('ID_GROUPS'), msg ? msg : _('ID_MSG_GROUP_NAME_EXISTS')); +DuplicateGroupName = function(){ + Ext.getCmp("btnCreateSave").setDisabled(false); + Ext.getCmp("btnUpdateSave").setDisabled(false); + + PMExt.warning(_('ID_GROUPS'), _('ID_MSG_GROUP_NAME_EXISTS')); }; //Save New Group From 88da56ea9a653c8da472d788c670b3bdb7a44194 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Tue, 23 May 2017 16:12:45 -0400 Subject: [PATCH 09/30] PR observations |:wq --- gulliver/system/class.rbac.php | 26 +++++++++++-------- .../BusinessModel/ProcessSupervisor.php | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/gulliver/system/class.rbac.php b/gulliver/system/class.rbac.php index a9f5719a4..381698f5f 100644 --- a/gulliver/system/class.rbac.php +++ b/gulliver/system/class.rbac.php @@ -78,6 +78,7 @@ class RBAC 'users_Ajax.php' => array( 'availableUsers' => array('PM_FACTORY'), 'assign' => array('PM_FACTORY'), + 'changeView' => array(), 'ofToAssign' => array('PM_FACTORY'), 'usersGroup' => array('PM_FACTORY'), 'canDeleteUser' => array('PM_USERS'), @@ -91,6 +92,7 @@ class RBAC 'loadAuthSourceByUID' => array('PM_USERS'), 'updateAuthServices' => array('PM_USERS'), 'usersList' => array('PM_USERS'), + 'updatePageSize' => array(), 'summaryUserData' => array('PM_USERS'), 'verifyIfUserAssignedAsSupervisor' => array('PM_USERS'), ) @@ -1475,18 +1477,20 @@ class RBAC */ public function allows($file, $action) { - $access = true; - $permissions = isset($this->authorizedActions[$file][$action]) ? $this->authorizedActions[$file][$action] : array(); - $totalPermissions = count($permissions); - $countAccess = 0; - foreach ($permissions as $key => $value) { - if ($this->userCanAccess($value) == 1) { - $countAccess++; + $access = false; + if (isset($this->authorizedActions[$file][$action])) { + $permissions = $this->authorizedActions[$file][$action]; + $totalPermissions = count($permissions); + $countAccess = 0; + foreach ($permissions as $key => $value) { + if ($this->userCanAccess($value) == 1) { + $countAccess++; + } + } + //Check if the user has all permissions that needed + if ($countAccess == $totalPermissions) { + $access = true; } - } - //Check if the user has all permissions that needed - if ($countAccess !== $totalPermissions) { - $access = false; } if (!$access) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php index 9d1ac7ece..87503f43d 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php @@ -1478,7 +1478,7 @@ class ProcessSupervisor $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); if ($rsCriteria->next()) { - return true; + return true; } //Check if the user is in a group defined as supervisor $criteria = new \Criteria('workflow'); From f3cc8e610edcb0d12f06fc215de1ae4286ae827c Mon Sep 17 00:00:00 2001 From: qronald Date: Wed, 24 May 2017 11:01:30 -0400 Subject: [PATCH 10/30] Adding new considerations in other ajax --- workflow/engine/methods/groups/groups_Ajax.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workflow/engine/methods/groups/groups_Ajax.php b/workflow/engine/methods/groups/groups_Ajax.php index 5a671195c..fdfe52b53 100644 --- a/workflow/engine/methods/groups/groups_Ajax.php +++ b/workflow/engine/methods/groups/groups_Ajax.php @@ -253,6 +253,7 @@ switch ($_POST['action']) { while ($oDataset->next()) { $arrData[] = $oDataset->getRow(); } + G::header('Content-Type: application/json'); echo '{success: true, members: ' . G::json_encode( $arrData ) . ', total_users: ' . $totalRows . '}'; break; case 'availableMembers': @@ -321,6 +322,7 @@ switch ($_POST['action']) { while ($oDataset->next()) { $arrData[] = $oDataset->getRow(); } + G::header('Content-Type: application/json'); echo '{success: true, members: ' . G::json_encode( $arrData ) . ', total_users: ' . $totalRows . '}'; break; case 'assignUsersToGroupsMultiple': From a445056fbf3f313adc3233d2b51ba97edd6617ea Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Wed, 24 May 2017 15:19:33 -0400 Subject: [PATCH 11/30] HOR-3286 --- .../processes/processes_DownloadFile.php | 51 ++++--------------- workflow/engine/methods/setup/skin_Ajax.php | 23 ++++----- 2 files changed, 19 insertions(+), 55 deletions(-) diff --git a/workflow/engine/methods/processes/processes_DownloadFile.php b/workflow/engine/methods/processes/processes_DownloadFile.php index 7cd355876..f973b50e9 100644 --- a/workflow/engine/methods/processes/processes_DownloadFile.php +++ b/workflow/engine/methods/processes/processes_DownloadFile.php @@ -1,26 +1,5 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ +//$RBAC->allows(basename(__FILE__), 'downloadFileHash'); if (!isset($_GET["file_hash"])) { throw new Exception("Invalid Request, param 'file_hash' was not sent."); @@ -28,26 +7,16 @@ if (!isset($_GET["file_hash"])) { $httpStream = new \ProcessMaker\Util\IO\HttpStream(); $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; -$filename = urldecode(base64_decode($_GET["file_hash"])); -$fileExtension = pathinfo($outputDir . $filename, PATHINFO_EXTENSION); +$fileName = urldecode(base64_decode($_GET["file_hash"])); +$processFile = $outputDir . $fileName; -if (!file_exists($outputDir . $filename)) { - throw new Exception("Error, couldn't find request file: $filename"); +//Verify if the file related to process exist in the corresponding path +$fileInformation = pathinfo($processFile); +$processFile = $outputDir . $fileInformation['basename']; +if (!file_exists($processFile)) { + throw new Exception("Error, couldn't find request file: $fileName"); } - -$httpStream->loadFromFile($outputDir . $filename); +$fileExtension = $fileInformation['extension']; +$httpStream->loadFromFile($processFile); $httpStream->setHeader("Content-Type", "application/$fileExtension"); $httpStream->send(); - -// ************* DEPRECATED (it will be removed soon) ********************************* -//add more security, and catch any error or exception -//$sFileName = $_GET['p'] . '.pm'; -//$file = PATH_DOCUMENT . 'output' . PATH_SEP . $sFileName . 'tpm'; -//$filex = PATH_DOCUMENT . 'output' . PATH_SEP . $sFileName; -// -//if (file_exists( $file )) { -// rename( $file, $filex ); -//} -// -//$realPath = PATH_DOCUMENT . 'output' . PATH_SEP . $sFileName; -//G::streamFile( $realPath, true ); diff --git a/workflow/engine/methods/setup/skin_Ajax.php b/workflow/engine/methods/setup/skin_Ajax.php index 2f3fe89a8..fef91eeaf 100644 --- a/workflow/engine/methods/setup/skin_Ajax.php +++ b/workflow/engine/methods/setup/skin_Ajax.php @@ -1,8 +1,4 @@ xssFilterHard($_REQUEST); - if (! isset( $_REQUEST['action'] )) { $res['success'] = false; $res['error'] = $res['message'] = G::LoadTranslation('ID_REQUEST_ACTION'); @@ -17,8 +13,7 @@ if (! function_exists( $_REQUEST['action'] ) || !G::isUserFunction($_REQUEST['ac print G::json_encode( $res ); die(); } -$restrictedFunctions = array ('copy_skin_folder','addTarFolder' -); +$restrictedFunctions = array ('copy_skin_folder','addTarFolder'); if (in_array( $_REQUEST['action'], $restrictedFunctions )) { $res['success'] = false; $res['error'] = $res['message'] = G::LoadTranslation('ID_REQUEST_ACTION_NOT_EXIST'); @@ -26,9 +21,9 @@ if (in_array( $_REQUEST['action'], $restrictedFunctions )) { die(); } -$functionName = $_REQUEST['action']; +$functionName = $_REQUEST['action'];error_log($functionName); $functionParams = isset( $_REQUEST['params'] ) ? $_REQUEST['params'] : array (); - +//$RBAC->allows(basename(__FILE__), $functionName); $functionName(); function updatePageSize () @@ -166,7 +161,7 @@ function newSkin ($baseSkin = 'classic') $configFileFinal = PATH_CUSTOM_SKINS . $skinFolder . PATH_SEP . 'config.xml'; $xmlConfiguration = file_get_contents( $configFileOriginal ); - + $workspace = ($_REQUEST['workspace'] == 'global') ? '' : SYS_SYS; $xmlConfigurationObj = G::xmlParser($xmlConfiguration); @@ -356,9 +351,9 @@ function exportSkin ($skinToExport = "") $response['success'] = true; $response['message'] = $skinTar; G::auditLog("ExportSkin", "Skin Name: ".$skinName); - + $response = $filter->xssFilterHard($response); - + print_r( G::json_encode( $response ) ); } catch (Exception $e) { $response['success'] = false; @@ -374,7 +369,7 @@ function deleteSkin () $filter = new InputFilter(); try { $_REQUEST['SKIN_FOLDER_ID'] = $filter->xssFilterHard($_REQUEST['SKIN_FOLDER_ID']); - + if (! (isset( $_REQUEST['SKIN_FOLDER_ID'] ))) { throw (new Exception( G::LoadTranslation( 'ID_SKIN_FOLDER_REQUIRED' ) )); } @@ -400,9 +395,9 @@ function deleteSkin () function streamSkin () { - $skinTar = $_REQUEST['file']; + $skinTar = basename($_REQUEST['file']); $bDownload = true; - G::streamFile( $skinTar, $bDownload, basename( $skinTar ) ); + G::streamFile(PATH_CUSTOM_SKINS . $skinTar, $bDownload, $skinTar); @unlink( $fileTar ); } From 2f4c25778efd3b1983731444ca3b444e00613269 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Tue, 30 May 2017 09:59:09 -0400 Subject: [PATCH 12/30] HOR-3286 --- gulliver/system/class.rbac.php | 17 ++++++++++++++++- .../processes/processes_DownloadFile.php | 2 +- workflow/engine/methods/setup/skin_Ajax.php | 4 ++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/gulliver/system/class.rbac.php b/gulliver/system/class.rbac.php index 381698f5f..fc91bd04c 100644 --- a/gulliver/system/class.rbac.php +++ b/gulliver/system/class.rbac.php @@ -94,8 +94,23 @@ class RBAC 'usersList' => array('PM_USERS'), 'updatePageSize' => array(), 'summaryUserData' => array('PM_USERS'), - 'verifyIfUserAssignedAsSupervisor' => array('PM_USERS'), + 'verifyIfUserAssignedAsSupervisor' => array('PM_USERS') + ), + 'skin_Ajax.php' => array( + 'updatePageSize' => array(), + 'skinList' => array('PM_SETUP_SKIN'), + 'newSkin' => array('PM_SETUP_SKIN'), + 'importSkin' => array('PM_SETUP_SKIN'), + 'exportSkin' => array('PM_SETUP_SKIN'), + 'deleteSkin' => array('PM_SETUP_SKIN'), + 'addTarFolder' => array('PM_SETUP_SKIN'), + 'copy_skin_folder' => array('PM_SETUP_SKIN'), + 'deleteSkin' => array('PM_SETUP_SKIN') + ), + 'processes_DownloadFile.php' => array( + 'downloadFileHash' => array('PM_FACTORY') ) + ); } diff --git a/workflow/engine/methods/processes/processes_DownloadFile.php b/workflow/engine/methods/processes/processes_DownloadFile.php index f973b50e9..fee9c9c9b 100644 --- a/workflow/engine/methods/processes/processes_DownloadFile.php +++ b/workflow/engine/methods/processes/processes_DownloadFile.php @@ -1,5 +1,5 @@ allows(basename(__FILE__), 'downloadFileHash'); +$RBAC->allows(basename(__FILE__), 'downloadFileHash'); if (!isset($_GET["file_hash"])) { throw new Exception("Invalid Request, param 'file_hash' was not sent."); diff --git a/workflow/engine/methods/setup/skin_Ajax.php b/workflow/engine/methods/setup/skin_Ajax.php index fef91eeaf..065510958 100644 --- a/workflow/engine/methods/setup/skin_Ajax.php +++ b/workflow/engine/methods/setup/skin_Ajax.php @@ -21,9 +21,9 @@ if (in_array( $_REQUEST['action'], $restrictedFunctions )) { die(); } -$functionName = $_REQUEST['action'];error_log($functionName); +$functionName = $_REQUEST['action']; $functionParams = isset( $_REQUEST['params'] ) ? $_REQUEST['params'] : array (); -//$RBAC->allows(basename(__FILE__), $functionName); +$RBAC->allows(basename(__FILE__), $functionName); $functionName(); function updatePageSize () From 61a3b373f486d48fdcc7edf3253479204a4cca4c Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Wed, 31 May 2017 10:53:22 -0400 Subject: [PATCH 13/30] HOR-2814: Observations related to search with APP_UID --- workflow/engine/classes/model/ListInbox.php | 103 ++++++++---------- .../classes/model/ListParticipatedLast.php | 74 ++++++------- workflow/engine/classes/model/ListPaused.php | 84 +++++++------- .../engine/classes/model/ListUnassigned.php | 86 +++++++-------- 4 files changed, 155 insertions(+), 192 deletions(-) diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index ef76146f8..45b77ad51 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -394,17 +394,18 @@ class ListInbox extends BaseListInbox */ public function loadFilters(&$criteria, $filters, $additionalColumns = array()) { - $action = isset($filters['action']) ? $filters['action'] : ""; - $usrUid = isset($filters['usr_uid']) ? $filters['usr_uid'] : ""; - $filter = isset($filters['filter']) ? $filters['filter'] : ""; - $search = isset($filters['search']) ? $filters['search'] : ""; - $process = isset($filters['process']) ? $filters['process'] : ""; - $category = isset($filters['category']) ? $filters['category'] : ""; - $dateFrom = isset($filters['dateFrom']) ? $filters['dateFrom'] : ""; - $dateTo = isset($filters['dateTo']) ? $filters['dateTo'] : ""; - $filterStatus = isset($filters['filterStatus']) ? $filters['filterStatus'] : ""; - $newestthan = isset($filters['newestthan']) ? $filters['newestthan'] : ''; - $oldestthan = isset($filters['oldestthan']) ? $filters['oldestthan'] : ''; + $action = isset($filters['action']) ? $filters['action'] : ''; + $usrUid = isset($filters['usr_uid']) ? $filters['usr_uid'] : ''; + $filter = isset($filters['filter']) ? $filters['filter'] : ''; + $search = isset($filters['search']) ? $filters['search'] : ''; + $caseLink = isset($filters['caseLink']) ? $filters['caseLink'] : ''; + $process = isset($filters['process']) ? $filters['process'] : ''; + $category = isset($filters['category']) ? $filters['category'] : ''; + $dateFrom = isset($filters['dateFrom']) ? $filters['dateFrom'] : ''; + $dateTo = isset($filters['dateTo']) ? $filters['dateTo'] : ''; + $filterStatus = isset($filters['filterStatus']) ? $filters['filterStatus'] : ''; + $newestthan = isset($filters['newestthan']) ? $filters['newestthan'] : ''; + $oldestthan = isset($filters['oldestthan']) ? $filters['oldestthan'] : ''; //Check the inbox to call switch ($action) { @@ -471,54 +472,40 @@ class ListInbox extends BaseListInbox //Filter Search if ($search != '') { - $oTmpCriteria = ''; - //If we have additional tables configured in the custom cases list, prepare the variables for search - if (count($additionalColumns) > 0) { - require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); - $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - - //We prepare the query related to the custom cases list - foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); - } - } - - if (!empty($oTmpCriteria)) { - $criteria->add( - $criteria->getNewCriterion(ListInboxPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_UID, $search, Criteria::EQUAL) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_NUMBER, $search, Criteria::EQUAL) - ->addOr( - $oTmpCriteria - ) - ) - ) - ) - ) - ); + //Check if we need to search to the APP_UID + if (!empty($caseLink)) { + $criteria->add(ListInboxPeer::APP_UID, $search, Criteria::EQUAL); } else { - $criteria->add( - $criteria->getNewCriterion(ListInboxPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_UID, $search, Criteria::EQUAL) - ->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_NUMBER, $search, Criteria::EQUAL) - ) - ) - ) - ) - ); + $oTmpCriteria = ''; + //If we have additional tables configured in the custom cases list, prepare the variables for search + if (count($additionalColumns) > 0) { + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); + + //We prepare the query related to the custom cases list + foreach (array_slice($additionalColumns, 1) as $value) { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); + } + } + + if (!empty($oTmpCriteria)) { + $criteria->add( + $criteria->getNewCriterion(ListInboxPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( + $oTmpCriteria + )))) + ); + } else { + $criteria->add( + $criteria->getNewCriterion(ListInboxPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListInboxPeer::APP_NUMBER, $search, Criteria::EQUAL)))) + ); + } } } diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index 03d6091ac..5a445f72a 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -246,6 +246,7 @@ class ListParticipatedLast extends BaseListParticipatedLast { $filter = isset($filters['filter']) ? $filters['filter'] : ''; $search = isset($filters['search']) ? $filters['search'] : ''; + $caseLink = isset($filters['caseLink']) ? $filters['caseLink'] : ''; $process = isset($filters['process']) ? $filters['process'] : ''; $category = isset($filters['category']) ? $filters['category'] : ''; $dateFrom = isset($filters['dateFrom']) ? $filters['dateFrom'] : ''; @@ -281,48 +282,39 @@ class ListParticipatedLast extends BaseListParticipatedLast //Filter Search if ($search != '') { - //If we have additional tables configured in the custom cases list, prepare the variables for search - if (count($additionalColumns) > 0) { - require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); - $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - - //We prepare the query related to the custom cases list - foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); - } - } - - if (!empty($oTmpCriteria)) { - $criteria->add( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_UID, $search, Criteria::EQUAL) - ->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::EQUAL) - ->addOr( - $oTmpCriteria - ) - ) - - ) - ) - ); + //Check if we need to search to the APP_UID + if (!empty($caseLink)) { + $criteria->add(ListParticipatedLastPeer::APP_UID, $search, Criteria::EQUAL); } else { - $criteria->add( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_UID, $search, Criteria::EQUAL) - ->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::EQUAL) - ) - ) - ) - ); + //If we have additional tables configured in the custom cases list, prepare the variables for search + if (count($additionalColumns) > 0) { + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); + + //We prepare the query related to the custom cases list + foreach (array_slice($additionalColumns, 1) as $value) { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); + } + } + + if (!empty($oTmpCriteria)) { + $criteria->add( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( + $oTmpCriteria + )))) + ); + } else { + $criteria->add( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::EQUAL)))) + ); + } } } diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index 5125d1df2..b8a0b2365 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -222,11 +222,12 @@ class ListPaused extends BaseListPaused */ public function loadFilters(&$criteria, $filters, $additionalColumns = array()) { - $filter = isset($filters['filter']) ? $filters['filter'] : ""; - $search = isset($filters['search']) ? $filters['search'] : ""; - $process = isset($filters['process']) ? $filters['process'] : ""; - $category = isset($filters['category']) ? $filters['category'] : ""; - $filterStatus = isset($filters['filterStatus']) ? $filters['filterStatus'] : ""; + $filter = isset($filters['filter']) ? $filters['filter'] : ''; + $search = isset($filters['search']) ? $filters['search'] : ''; + $caseLink = isset($filters['caseLink']) ? $filters['caseLink'] : ''; + $process = isset($filters['process']) ? $filters['process'] : ''; + $category = isset($filters['category']) ? $filters['category'] : ''; + $filterStatus = isset($filters['filterStatus']) ? $filters['filterStatus'] : ''; //Filter Read Unread All switch ($filter) { @@ -240,48 +241,39 @@ class ListPaused extends BaseListPaused //Filter Search if ($search != '') { - //If we have additional tables configured in the custom cases list, prepare the variables for search - if (count($additionalColumns) > 0) { - require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); - $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - - //We prepare the query related to the custom cases list - foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); - } - } - - if (!empty($oTmpCriteria)) { - $criteria->add( - $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_UID, $search, Criteria::EQUAL) - ->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_NUMBER, $search, Criteria::EQUAL) - ->addOr( - $oTmpCriteria - ) - ) - - ) - ) - ); + //Check if we need to search to the APP_UID + if (!empty($caseLink)) { + $criteria->add(ListPausedPeer::APP_UID, $search, Criteria::EQUAL); } else { - $criteria->add( - $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_UID, $search, Criteria::EQUAL) - ->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_NUMBER, $search, Criteria::EQUAL) - ) - ) - ) - ); + //If we have additional tables configured in the custom cases list, prepare the variables for search + if (count($additionalColumns) > 0) { + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); + + //We prepare the query related to the custom cases list + foreach (array_slice($additionalColumns, 1) as $value) { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); + } + } + + if (!empty($oTmpCriteria)) { + $criteria->add( + $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( + $oTmpCriteria + )))) + ); + } else { + $criteria->add( + $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListPausedPeer::APP_NUMBER, $search, Criteria::EQUAL)))) + ); + } } } diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index 6dc504e58..8ce590486 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -175,57 +175,49 @@ class ListUnassigned extends BaseListUnassigned */ public function loadFilters(&$criteria, $filters, $additionalColumns = array()) { - $filter = isset($filters['filter']) ? $filters['filter'] : ""; - $search = isset($filters['search']) ? $filters['search'] : ""; - $process = isset($filters['process']) ? $filters['process'] : ""; - $category = isset($filters['category']) ? $filters['category'] : ""; - $dateFrom = isset($filters['dateFrom']) ? $filters['dateFrom'] : ""; - $dateTo = isset($filters['dateTo']) ? $filters['dateTo'] : ""; + $filter = isset($filters['filter']) ? $filters['filter'] : ''; + $search = isset($filters['search']) ? $filters['search'] : ''; + $caseLink = isset($filters['caseLink']) ? $filters['caseLink'] : ''; + $process = isset($filters['process']) ? $filters['process'] : ''; + $category = isset($filters['category']) ? $filters['category'] : ''; + $dateFrom = isset($filters['dateFrom']) ? $filters['dateFrom'] : ''; + $dateTo = isset($filters['dateTo']) ? $filters['dateTo'] : ''; //Filter Search if ($search != '') { - //If we have additional tables configured in the custom cases list, prepare the variables for search - if (count($additionalColumns) > 0) { - require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); - $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - - //We prepare the query related to the custom cases list - foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); - } - } - - if (!empty($oTmpCriteria)) { - $criteria->add( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_UID, $search, Criteria::EQUAL) - ->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_NUMBER, $search, Criteria::EQUAL) - ->addOr( - $oTmpCriteria - ) - ) - - ) - ) - ); + //Check if we need to search to the APP_UID + if (!empty($caseLink)) { + $criteria->add(ListUnassignedPeer::APP_UID, $search, Criteria::EQUAL); } else { - $criteria->add( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE) - ->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_UID, $search, Criteria::EQUAL) - ->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_NUMBER, $search, Criteria::EQUAL) - ) - ) - ) - ); + //If we have additional tables configured in the custom cases list, prepare the variables for search + if (count($additionalColumns) > 0) { + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); + + //We prepare the query related to the custom cases list + foreach (array_slice($additionalColumns, 1) as $value) { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); + } + } + + if (!empty($oTmpCriteria)) { + $criteria->add( + $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( + $oTmpCriteria + )))) + ); + } else { + $criteria->add( + $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion(ListUnassignedPeer::APP_NUMBER, $search, Criteria::EQUAL)))) + ); + } } } From 16f3afc6e7cb8d16dfb0cd0255615748832cae0e Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Wed, 31 May 2017 12:11:58 -0400 Subject: [PATCH 14/30] HOR-3313 --- .../translations/english/processmaker.en.po | 6 ++++++ workflow/engine/controllers/installer.php | 14 +++++++++++--- workflow/engine/data/mysql/insert.sql | 1 + workflow/engine/templates/installer/stopInstall.js | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 775a07bcb..51842f83f 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -15163,6 +15163,12 @@ msgstr "SYSTEM INSTALLATION FAILED" msgid "A problem occurred during the installation of the system. Please, uninstall the partial installation and try again." msgstr "A problem occurred during the installation of the system. Please, uninstall the partial installation and try again." +# TRANSLATION +# LABEL/ID_PROCESSMAKER_ALREADY_INSTALLED +#: LABEL/ID_PROCESSMAKER_ALREADY_INSTALLED +msgid "ProcessMaker is already installed." +msgstr "ProcessMaker is already installed." + # TRANSLATION # LABEL/ID_LICENSE_EMPTY #: LABEL/ID_LICENSE_EMPTY diff --git a/workflow/engine/controllers/installer.php b/workflow/engine/controllers/installer.php index dbe1b0572..36a2ebe3b 100644 --- a/workflow/engine/controllers/installer.php +++ b/workflow/engine/controllers/installer.php @@ -38,10 +38,18 @@ class Installer extends Controller public function index ($httpData) { + if (file_exists(FILE_PATHS_INSTALLED)) { + $this->setJSVar('messageError', G::LoadTranslation('ID_PROCESSMAKER_ALREADY_INSTALLED')); + $this->includeExtJS('installer/stopInstall'); + $this->setView('installer/mainStopInstall'); + G::RenderPage('publish', 'extJs'); + return; + } if ((strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') && (file_exists($this->path_shared . 'partner.info'))) { - $this->includeExtJS( 'installer/stopInstall'); - $this->setView( 'installer/mainStopInstall' ); - G::RenderPage( 'publish', 'extJs' ); + $this->setJSVar('messageError', G::LoadTranslation('ID_NO_INSTALL')); + $this->includeExtJS('installer/stopInstall'); + $this->setView('installer/mainStopInstall'); + G::RenderPage('publish', 'extJs'); return; } diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 43d8e21e7..2c3020c3c 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -4022,6 +4022,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_ROLE_NAME_NOT_EMPTY','en','The ''Name'' field can not be empty.','2014-01-15') , ( 'LABEL','ID_TITLE_NO_INSTALL','en','SYSTEM INSTALLATION FAILED','2014-01-15') , ( 'LABEL','ID_NO_INSTALL','en','A problem occurred during the installation of the system. Please, uninstall the partial installation and try again.','2014-01-15') , +( 'LABEL','ID_PROCESSMAKER_ALREADY_INSTALLED','en','ProcessMaker is already installed.','2017-05-31') , ( 'LABEL','ID_LICENSE_EMPTY','en','Can not find any license','2014-01-15') , ( 'LABEL','ID_ADD_LICENSE','en','Please add a new license','2014-01-15') , ( 'LABEL','ID_DEFAULT_CALENDAR','en','Default Calendar','2014-01-15') , diff --git a/workflow/engine/templates/installer/stopInstall.js b/workflow/engine/templates/installer/stopInstall.js index ff743d8a6..536fd07c3 100644 --- a/workflow/engine/templates/installer/stopInstall.js +++ b/workflow/engine/templates/installer/stopInstall.js @@ -9,7 +9,7 @@ Ext.onReady(function() { title : _('ID_TITLE_NO_INSTALL'), items:[ - {html: _('ID_NO_INSTALL')} + {html: messageError} ] }); }); From 939910fd971ae444888c09de19fbdb1a7b04217e Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 1 Jun 2017 15:42:50 -0400 Subject: [PATCH 15/30] HOR-3311 --- workflow/engine/classes/class.pmDynaform.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php index 5d750fc6d..5bbf1466d 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -1357,7 +1357,7 @@ class pmDynaform "var sysLang = '" . SYS_LANG . "';\n" . "var isRTL = " . $this->isRTL . ";\n" . "var pathRTLCss = '" . $this->pathRTLCss . "';\n" . - "var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? $this->fields["DEL_INDEX"] : "0") . ";\n" . + "var delIndex = " . (isset($this->fields["DEL_INDEX"]) ? G::decrypt($this->fields["DEL_INDEX"], URL_KEY) : "0") . ";\n" . "var leaveCaseWarning = " . $this->getLeaveCaseWarning() . ";\n" . "\n" . "\n" . From 55400368dc672e995b4ddf0e363cf8cdc14b95f4 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 2 Jun 2017 12:26:03 -0400 Subject: [PATCH 16/30] Observations in the PR --- workflow/engine/classes/model/ListInbox.php | 31 +------------ .../classes/model/ListParticipatedLast.php | 30 +----------- workflow/engine/classes/model/ListPaused.php | 30 +----------- .../engine/classes/model/ListUnassigned.php | 30 +----------- .../src/ProcessMaker/BusinessModel/Cases.php | 46 +++++++++++++++++++ 5 files changed, 54 insertions(+), 113 deletions(-) diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index 45b77ad51..e43f4ea88 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -476,36 +476,9 @@ class ListInbox extends BaseListInbox if (!empty($caseLink)) { $criteria->add(ListInboxPeer::APP_UID, $search, Criteria::EQUAL); } else { - $oTmpCriteria = ''; //If we have additional tables configured in the custom cases list, prepare the variables for search - if (count($additionalColumns) > 0) { - require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); - $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - - //We prepare the query related to the custom cases list - foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); - } - } - - if (!empty($oTmpCriteria)) { - $criteria->add( - $criteria->getNewCriterion(ListInboxPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( - $oTmpCriteria - )))) - ); - } else { - $criteria->add( - $criteria->getNewCriterion(ListInboxPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListInboxPeer::APP_NUMBER, $search, Criteria::EQUAL)))) - ); - } + $casesList = new \ProcessMaker\BusinessModel\Cases(); + $casesList->getSearchCriteriaListCases($criteria, 'ListInboxPeer', $search, $this->additionalClassName, $additionalColumns); } } diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index 5a445f72a..c9209aeda 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -287,34 +287,8 @@ class ListParticipatedLast extends BaseListParticipatedLast $criteria->add(ListParticipatedLastPeer::APP_UID, $search, Criteria::EQUAL); } else { //If we have additional tables configured in the custom cases list, prepare the variables for search - if (count($additionalColumns) > 0) { - require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); - $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - - //We prepare the query related to the custom cases list - foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); - } - } - - if (!empty($oTmpCriteria)) { - $criteria->add( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( - $oTmpCriteria - )))) - ); - } else { - $criteria->add( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::EQUAL)))) - ); - } + $casesList = new \ProcessMaker\BusinessModel\Cases(); + $casesList->getSearchCriteriaListCases($criteria, 'ListParticipatedLastPeer', $search, $this->additionalClassName, $additionalColumns); } } diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index b8a0b2365..dd3d58586 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -246,34 +246,8 @@ class ListPaused extends BaseListPaused $criteria->add(ListPausedPeer::APP_UID, $search, Criteria::EQUAL); } else { //If we have additional tables configured in the custom cases list, prepare the variables for search - if (count($additionalColumns) > 0) { - require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); - $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - - //We prepare the query related to the custom cases list - foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); - } - } - - if (!empty($oTmpCriteria)) { - $criteria->add( - $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( - $oTmpCriteria - )))) - ); - } else { - $criteria->add( - $criteria->getNewCriterion(ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListPausedPeer::APP_NUMBER, $search, Criteria::EQUAL)))) - ); - } + $casesList = new \ProcessMaker\BusinessModel\Cases(); + $casesList->getSearchCriteriaListCases($criteria, 'ListPausedPeer', $search, $this->additionalClassName, $additionalColumns); } } diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index 8ce590486..eb2cfdbdf 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -190,34 +190,8 @@ class ListUnassigned extends BaseListUnassigned $criteria->add(ListUnassignedPeer::APP_UID, $search, Criteria::EQUAL); } else { //If we have additional tables configured in the custom cases list, prepare the variables for search - if (count($additionalColumns) > 0) { - require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $this->additionalClassName . '.php'); - $oNewCriteria = new Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", Criteria::LIKE); - - //We prepare the query related to the custom cases list - foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", Criteria::LIKE)->addOr($oTmpCriteria); - } - } - - if (!empty($oTmpCriteria)) { - $criteria->add( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( - $oTmpCriteria - )))) - ); - } else { - $criteria->add( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_PRO_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( - $criteria->getNewCriterion(ListUnassignedPeer::APP_NUMBER, $search, Criteria::EQUAL)))) - ); - } + $casesList = new \ProcessMaker\BusinessModel\Cases(); + $casesList->getSearchCriteriaListCases($criteria, 'ListUnassignedPeer', $search, $this->additionalClassName, $additionalColumns); } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index ba1cbc5e8..39cf05952 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -3283,4 +3283,50 @@ class Cases } return $delIndex; } + /** + * This function will be return the criteria for the search filter + * + * We considered in the search criteria the custom cases list, + * the titles related to: caseTitle taskTitle processTitle and + * the case number + * @param Criteria $criteria, must be contain the initial criteria for search + * @param string $listPeer, name of the list class + * @param string $search, the parameter for search in the table + * @param string $additionalClassName, name of the className of pmtable + * @param array $additionalColumns, columns related to the custom cases list + * @throws PropelException + */ + public function getSearchCriteriaListCases(&$criteria, $listPeer ,$search, $additionalClassName = '', $additionalColumns = array() ) + { + $oTmpCriteria = ''; + //If we have additional tables configured in the custom cases list, prepare the variables for search + if (count($additionalColumns) > 0) { + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $additionalClassName . '.php'); + $oNewCriteria = new \Criteria("workflow"); + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", \Criteria::LIKE); + + //We prepare the query related to the custom cases list + foreach (array_slice($additionalColumns, 1) as $value) { + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", \Criteria::LIKE)->addOr($oTmpCriteria); + } + } + + if (!empty($oTmpCriteria)) { + $criteria->add( + $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, \Criteria::EQUAL)->addOr( + $oTmpCriteria + )))) + ); + } else { + $criteria->add( + $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, \Criteria::EQUAL)))) + ); + } + } } From cc33e1d428b672e0d906e6c6a7f9a8a481466518 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 2 Jun 2017 12:29:07 -0400 Subject: [PATCH 17/30] CS --- workflow/engine/classes/model/ListInbox.php | 2 +- workflow/engine/classes/model/ListParticipatedLast.php | 2 +- workflow/engine/classes/model/ListPaused.php | 2 +- workflow/engine/classes/model/ListUnassigned.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index e43f4ea88..ae77c4c0f 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -519,7 +519,7 @@ class ListInbox extends BaseListInbox $list = isset($filters['action']) ? $filters['action'] : ""; $criteria = $pmTable->addPMFieldsToList($list); $this->additionalClassName = $pmTable->tableClassName; - $additionalColumns = $criteria->getSelectColumns(); + $additionalColumns = $criteria->getSelectColumns(); $filters['usr_uid'] = $usr_uid; $criteria->addSelectColumn(ListInboxPeer::APP_UID); diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index c9209aeda..c0c4d1e09 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -330,7 +330,7 @@ class ListParticipatedLast extends BaseListParticipatedLast $pmTable = new PmTable(); $criteria = $pmTable->addPMFieldsToList('sent'); $this->additionalClassName = $pmTable->tableClassName; - $additionalColumns = $criteria->getSelectColumns(); + $additionalColumns = $criteria->getSelectColumns(); $criteria->addSelectColumn(ListParticipatedLastPeer::APP_UID); $criteria->addSelectColumn(ListParticipatedLastPeer::DEL_INDEX); diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index dd3d58586..7dec41dcb 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -280,7 +280,7 @@ class ListPaused extends BaseListPaused $pmTable = new PmTable(); $criteria = $pmTable->addPMFieldsToList('paused'); $this->additionalClassName = $pmTable->tableClassName; - $additionalColumns = $criteria->getSelectColumns(); + $additionalColumns = $criteria->getSelectColumns(); $criteria->addSelectColumn(ListPausedPeer::APP_UID); $criteria->addSelectColumn(ListPausedPeer::USR_UID); diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index eb2cfdbdf..3db83de86 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -225,7 +225,7 @@ class ListUnassigned extends BaseListUnassigned $tasks = $this->getSelfServiceTasks($usr_uid); $criteria = $pmTable->addPMFieldsToList('unassigned'); $this->additionalClassName = $pmTable->tableClassName; - $additionalColumns = $criteria->getSelectColumns(); + $additionalColumns = $criteria->getSelectColumns(); $criteria->addSelectColumn(ListUnassignedPeer::APP_UID); $criteria->addSelectColumn(ListUnassignedPeer::DEL_INDEX); From 3a26dce3a0b70af3a2e008eea1cb51761a0646ec Mon Sep 17 00:00:00 2001 From: qronald Date: Wed, 31 May 2017 14:28:37 -0400 Subject: [PATCH 18/30] HOR-3284 --- workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php index 910c28eb0..6031bd8e8 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php @@ -152,7 +152,7 @@ class FilesManager { try { $aData['prf_path'] = rtrim($aData['prf_path'], '/') . '/'; - if (!$aData['prf_filename']) { + if (!$aData['prf_filename'] || strpbrk($aData['prf_filename'], "\\/?%*:|\"<>") !== false) { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('prf_filename'))); } $extention = strstr($aData['prf_filename'], '.'); From 97c9ef6b795958f4d95ac064354fa27b4a5177d3 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 5 Jun 2017 10:33:42 -0400 Subject: [PATCH 19/30] CLASS PR obervations --- workflow/engine/classes/model/ListInbox.php | 2 +- workflow/engine/classes/model/ListParticipatedLast.php | 2 +- workflow/engine/classes/model/ListPaused.php | 2 +- workflow/engine/classes/model/ListUnassigned.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index ae77c4c0f..43501ce33 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -478,7 +478,7 @@ class ListInbox extends BaseListInbox } else { //If we have additional tables configured in the custom cases list, prepare the variables for search $casesList = new \ProcessMaker\BusinessModel\Cases(); - $casesList->getSearchCriteriaListCases($criteria, 'ListInboxPeer', $search, $this->additionalClassName, $additionalColumns); + $casesList->getSearchCriteriaListCases($criteria, __CLASS__ . 'Peer', $search, $this->additionalClassName, $additionalColumns); } } diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index c0c4d1e09..c5ca29955 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -288,7 +288,7 @@ class ListParticipatedLast extends BaseListParticipatedLast } else { //If we have additional tables configured in the custom cases list, prepare the variables for search $casesList = new \ProcessMaker\BusinessModel\Cases(); - $casesList->getSearchCriteriaListCases($criteria, 'ListParticipatedLastPeer', $search, $this->additionalClassName, $additionalColumns); + $casesList->getSearchCriteriaListCases($criteria, __CLASS__ . 'Peer', $search, $this->additionalClassName, $additionalColumns); } } diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index 7dec41dcb..8844a9363 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -247,7 +247,7 @@ class ListPaused extends BaseListPaused } else { //If we have additional tables configured in the custom cases list, prepare the variables for search $casesList = new \ProcessMaker\BusinessModel\Cases(); - $casesList->getSearchCriteriaListCases($criteria, 'ListPausedPeer', $search, $this->additionalClassName, $additionalColumns); + $casesList->getSearchCriteriaListCases($criteria, __CLASS__ . 'Peer', $search, $this->additionalClassName, $additionalColumns); } } diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index 3db83de86..f5a7836ab 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -191,7 +191,7 @@ class ListUnassigned extends BaseListUnassigned } else { //If we have additional tables configured in the custom cases list, prepare the variables for search $casesList = new \ProcessMaker\BusinessModel\Cases(); - $casesList->getSearchCriteriaListCases($criteria, 'ListUnassignedPeer', $search, $this->additionalClassName, $additionalColumns); + $casesList->getSearchCriteriaListCases($criteria, __CLASS__ . 'Peer', $search, $this->additionalClassName, $additionalColumns); } } From 51a7dc327db93495ca8f1d1eee30e09ecaf5394f Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 5 Jun 2017 11:48:49 -0400 Subject: [PATCH 20/30] HOR-3072 --- .../engine/content/translations/english/processmaker.en.po | 4 ++-- workflow/engine/data/mysql/insert.sql | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index c6f0c90f5..e2dc8c93d 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -4042,8 +4042,8 @@ msgstr "Invalid syntax" # TRANSLATION # LABEL/ID_NO_PERMISSION_NO_PARTICIPATED #: LABEL/ID_NO_PERMISSION_NO_PARTICIPATED -msgid "You do not have permission to see this case or you have not participated in it." -msgstr "You do not have permission to see this case or you have not participated in it." +msgid "You cannot open this case because on the reason below:
You do not have permission to see this case.
You have not participated in this case.
Case is already claimed." +msgstr "You cannot open this case because on the reason below:
You do not have permission to see this case.
You have not participated in this case.
Case is already claimed." # TRANSLATION # JAVASCRIPT/ID_EMPTY_NODENAME diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 2f96e7128..6cede1d6e 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -2122,7 +2122,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_UNASSIGNED','en','Unassigned','2014-01-15') , ( 'LABEL','ID_CLAIM','en','Claim','2014-01-15') , ( 'LABEL','ID_TABLE_INVALID_SYNTAX','en','Invalid syntax','2014-01-15') , -( 'LABEL','ID_NO_PERMISSION_NO_PARTICIPATED','en','You do not have permission to see this case or you have not participated in it.','2014-01-15') , +( 'LABEL','ID_NO_PERMISSION_NO_PARTICIPATED','en','You cannot open this case because on the reason below:
You do not have permission to see this case.
You have not participated in this case.
Case is already claimed.','2017-06-05') , ( 'JAVASCRIPT','ID_EMPTY_NODENAME','en','The field name contains spaces or it''s empty!','2014-01-15') , ( 'JAVASCRIPT','ID_SUGGEST_NEW_ENTRIES_ALERT','en','You should set all options for new entries.','2014-01-15') , ( 'LABEL','ID_ISNT_LICENSE','en','This isn''t the correct license.','2014-01-15') , From 97c25a320efc6ec05909ddbcac04618e5df18bf6 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Tue, 6 Jun 2017 15:21:42 -0400 Subject: [PATCH 21/30] HOR-3351 --- .../engine/methods/processes/processes_Export.php | 6 +++++- .../BusinessModel/Migrator/GranularExporter.php | 12 +++++++++++- .../engine/src/ProcessMaker/Services/Api/Project.php | 5 +++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/workflow/engine/methods/processes/processes_Export.php b/workflow/engine/methods/processes/processes_Export.php index 039087510..59d20790d 100644 --- a/workflow/engine/methods/processes/processes_Export.php +++ b/workflow/engine/methods/processes/processes_Export.php @@ -39,7 +39,8 @@ try { if (sizeof($_GET['objects']) == 0) { /*----------------------------------********---------------------------------*/ $exporter = new ProcessMaker\Exporter\XmlExporter($_GET["pro_uid"]); - $getProjectName = $exporter->truncateName($exporter->getProjectName(), false); + $projectName = $exporter->getProjectName(); + $getProjectName = $exporter->truncateName($projectName, false); $version = ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx") + 1; $outputFilename = sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx"); @@ -48,8 +49,10 @@ try { }else{ $granularExporter = new \ProcessMaker\BusinessModel\Migrator\GranularExporter($_GET['pro_uid']); $outputFilename = $granularExporter->export($_GET['objects']); + $projectName = $granularExporter->getProjectName(); } /*----------------------------------********---------------------------------*/ + G::auditLog('ExportProcess','Export process "' . $projectName . '"'); } else { $oProcess = new Processes(); $proFields = $oProcess->serializeProcess($_GET["pro_uid"]); @@ -57,6 +60,7 @@ try { $outputFilename = $result["FILENAME"]; rename($outputDir . $outputFilename . "tpm", $outputDir . $outputFilename); + G::auditLog('ExportProcess','Export process "' . $result["PRO_TITLE"] . '"'); } $response->file_hash = base64_encode($outputFilename); $response->success = true; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php index 8d67b5b2f..4d0e96064 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php @@ -12,6 +12,7 @@ class GranularExporter protected $generator; protected $data; protected $prjuid; + protected $prjName = ''; /** * GranularExporter constructor. */ @@ -60,6 +61,7 @@ class GranularExporter $objectList = func_get_args()[0]; $bpmnProject = Project\Bpmn::load($this->prjuid); $projectData = $bpmnProject->getProject(); + $this->prjName = $projectData['PRJ_NAME']; $getProjectName = $this->publisher->truncateName($projectData['PRJ_NAME'], false); $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; $version = \ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx2") + 1; @@ -172,7 +174,7 @@ class GranularExporter } } } - return $migratorData; + return $migratorData; } public function publish() @@ -184,4 +186,12 @@ class GranularExporter ) ); } + /** + * Get the project name + */ + public function getProjectName() + { + return $this->prjName; + } + } \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index 57603085d..0496db5b0 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -163,6 +163,9 @@ class Project extends Api PATH_SEP . $outputFilename; $httpStream = new HttpStream(); $fileExtension = pathinfo($outputFilename, PATHINFO_EXTENSION); + + \G::auditLog('ExportProcess','Export process "' . $granularExporter->getProjectName() . '"'); + $httpStream->loadFromFile($outputFilename); $httpStream->setHeader("Content-Type", "application/xml; charset=UTF-8"); $httpStream->send(); @@ -188,6 +191,8 @@ class Project extends Api $httpStream = new \ProcessMaker\Util\IO\HttpStream(); $fileExtension = pathinfo($outputFilename, PATHINFO_EXTENSION); + \G::auditLog('ExportProcess','Export process "' . $exporter->getProjectName() . '"'); + $httpStream->loadFromFile($outputFilename); $httpStream->setHeader("Content-Type", "application/xml; charset=UTF-8"); $httpStream->send(); From f510177896ac1d7f0328181c7b93579df7cd57d6 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 8 Jun 2017 15:47:37 -0400 Subject: [PATCH 22/30] HOR-3350 --- workflow/engine/methods/cases/cases_Ajax.php | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/workflow/engine/methods/cases/cases_Ajax.php b/workflow/engine/methods/cases/cases_Ajax.php index bda0b9a30..b56cef529 100644 --- a/workflow/engine/methods/cases/cases_Ajax.php +++ b/workflow/engine/methods/cases/cases_Ajax.php @@ -560,7 +560,14 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { $oCase = new Cases(); $aProcesses = Array(); $G_PUBLISH = new Publisher(); - $criteria = $oCase->getAllUploadedDocumentsCriteria($_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['CURRENT_TASK'], $_SESSION['USER_LOGGED'], $_SESSION['INDEX']); + $tasUid = isset($_SESSION['CURRENT_TASK']) ? $_SESSION['CURRENT_TASK'] : $_SESSION['TASK']; + $criteria = $oCase->getAllUploadedDocumentsCriteria( + $_SESSION['PROCESS'], + $_SESSION['APPLICATION'], + $tasUid, + $_SESSION['USER_LOGGED'], + $_SESSION['INDEX'] + ); if ($criteria->getDbName() == 'dbarray') { $rs = ArrayBasePeer::doSelectRs($criteria); } else { @@ -601,8 +608,14 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { $oCase = new Cases(); $aProcesses = Array (); $G_PUBLISH = new Publisher(); - $c = $oCase->getAllGeneratedDocumentsCriteria($_SESSION['PROCESS'], $_SESSION['APPLICATION'], - $_SESSION['CURRENT_TASK'], $_SESSION['USER_LOGGED'], $_SESSION['INDEX']); + $tasUid = isset($_SESSION['CURRENT_TASK']) ? $_SESSION['CURRENT_TASK'] : $_SESSION['TASK']; + $c = $oCase->getAllGeneratedDocumentsCriteria( + $_SESSION['PROCESS'], + $_SESSION['APPLICATION'], + $tasUid, + $_SESSION['USER_LOGGED'], + $_SESSION['INDEX'] + ); if ($c->getDbName() == 'dbarray') { $rs = ArrayBasePeer::doSelectRs( $c ); From e6211f3fe71826695dba02c19d2ed17c90ce6c8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 9 Jun 2017 11:31:55 -0400 Subject: [PATCH 23/30] HOR-3375 --- workflow/engine/classes/class.case.php | 3 ++- workflow/engine/src/ProcessMaker/BusinessModel/Light.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 516874d4e..529f875a1 100644 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -3363,12 +3363,13 @@ class Cases //if the user is not in the task, we need to return a valid del index, so we are returning the latest delindex $oCriteria = new Criteria(); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); $oCriteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_DELEGATE_DATE); $oApplication = AppDelegationPeer::doSelectOne($oCriteria); if (!is_null($oApplication)) { return $oApplication->getDelIndex(); } - throw ( new Exception('this case has 0 delegations') ); + throw ( new Exception('This case has 0 current delegations') ); } /* diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php index e21c32d6e..a18404603 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php @@ -1017,7 +1017,7 @@ class Light { $response = array("status" => "fail"); $oCase = new \Cases(); - $iDelIndex = $oCase->getCurrentDelegation( $sAppUid, $userUid ); + $iDelIndex = $oCase->getCurrentDelegation( $sAppUid, '' ); $oAppDelegation = new \AppDelegation(); $aDelegation = $oAppDelegation->load( $sAppUid, $iDelIndex ); From 440c2e5f229f9de34eea1678e2783011c565036a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 12 Jun 2017 16:41:09 -0400 Subject: [PATCH 24/30] HOR-3388 --- workflow/engine/classes/class.case.php | 6 ++++-- workflow/engine/src/ProcessMaker/BusinessModel/Light.php | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 529f875a1..e1a5bc940 100644 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -3348,7 +3348,7 @@ class Cases * @return integer */ - public function getCurrentDelegation($sApplicationUID = '', $sUserUID = '') + public function getCurrentDelegation($sApplicationUID = '', $sUserUID = '', $onlyOpenThreads = false) { $oCriteria = new Criteria(); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); @@ -3363,7 +3363,9 @@ class Cases //if the user is not in the task, we need to return a valid del index, so we are returning the latest delindex $oCriteria = new Criteria(); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); + if ($onlyOpenThreads) { + $oCriteria->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); + } $oCriteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_DELEGATE_DATE); $oApplication = AppDelegationPeer::doSelectOne($oCriteria); if (!is_null($oApplication)) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php index a18404603..670a04427 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php @@ -1017,7 +1017,7 @@ class Light { $response = array("status" => "fail"); $oCase = new \Cases(); - $iDelIndex = $oCase->getCurrentDelegation( $sAppUid, '' ); + $iDelIndex = $oCase->getCurrentDelegation( $sAppUid, '', true ); $oAppDelegation = new \AppDelegation(); $aDelegation = $oAppDelegation->load( $sAppUid, $iDelIndex ); From 83dab41b537fb56d665b29012722e69d8fd4fcea Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 13 Jun 2017 10:42:09 -0400 Subject: [PATCH 25/30] HOR-3379 --- workflow/engine/classes/class.case.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index e1a5bc940..741e76b9c 100644 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -1152,7 +1152,9 @@ class Cases //Logger deleteCase $nameFiles = ''; foreach (debug_backtrace() as $node) { - $nameFiles .= $node['file'] . ":" . $node['function'] . "(" . $node['line'] . ")\n"; + if (isset($node['file']) && isset($node['function']) && isset($node['line'])) { + $nameFiles .= $node['file'] . ":" . $node['function'] . "(" . $node['line'] . ")\n"; + } } $dataLog = \Bootstrap::getDefaultContextLog(); $dataLog['usrUid'] = isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : G::LoadTranslation('UID_UNDEFINED_USER'); From 42ac32149587a07e38db729122441ba11d33af84 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 1 Jun 2017 13:53:49 -0400 Subject: [PATCH 26/30] HOR-3327 --- gulliver/system/class.rbac.php | 18 +++++++ workflow/engine/controllers/processProxy.php | 53 +++----------------- 2 files changed, 24 insertions(+), 47 deletions(-) diff --git a/gulliver/system/class.rbac.php b/gulliver/system/class.rbac.php index 35356b3ac..b24f0104f 100644 --- a/gulliver/system/class.rbac.php +++ b/gulliver/system/class.rbac.php @@ -109,6 +109,24 @@ class RBAC ), 'processes_DownloadFile.php' => array( 'downloadFileHash' => array('PM_FACTORY') + ), + 'processProxy.php' => array( + 'categoriesList' => array(), + 'getCategoriesList' => array(), + 'saveProcess' => array('PM_FACTORY'), + 'changeStatus' => array(), + 'changeDebugMode' => array(), + 'getUsers' => array(), + 'getGroups' => array(), + 'assignActorsTask' => array(), + 'removeActorsTask' => array(), + 'getActorsTask' => array(), + 'getProcessDetail' => array(), + 'getProperties' => array(), + 'saveProperties' => array(), + 'getCaledarList' => array(), + 'getPMVariables' => array(), + 'generateBpmn' => array() ) ); diff --git a/workflow/engine/controllers/processProxy.php b/workflow/engine/controllers/processProxy.php index 3e3607644..90cf66bd9 100644 --- a/workflow/engine/controllers/processProxy.php +++ b/workflow/engine/controllers/processProxy.php @@ -3,6 +3,12 @@ class ProcessProxy extends HttpProxyController { + public function call ($name) + { + global $RBAC; + $RBAC->allows(basename(__FILE__), $name); + parent::call($name); + } /** * get Process Categories List with defailt value (empty option) and -All- aoption */ @@ -50,53 +56,6 @@ class ProcessProxy extends HttpProxyController } $sProUid = $project->getUid(); - - -// require_once 'classes/model/Task.php'; -// G::LoadClass( 'processMap' ); -// $oProcessMap = new ProcessMap(); -// -// $httpData->PRO_TITLE = trim( $httpData->PRO_TITLE ); -// -// try { -// if (! isset( $httpData->PRO_UID )) { -// if (Process::existsByProTitle( $httpData->PRO_TITLE )) { -// $result = array ('success' => false,'msg' => G::LoadTranslation( 'ID_SAVE_PROCESS_ERROR' ),'errors' => array ('PRO_TITLE' => G::LoadTranslation( 'ID_PROCESSTITLE_ALREADY_EXISTS', SYS_LANG, Array ('PRO_TITLE' => $httpData->PRO_TITLE -// ) ) -// ) -// ); -// print G::json_encode( $result ); -// exit( 0 ); -// } -// -// $processData['USR_UID'] = $_SESSION['USER_LOGGED']; -// $processData['PRO_TITLE'] = $httpData->PRO_TITLE; -// $processData['PRO_DESCRIPTION'] = $httpData->PRO_DESCRIPTION; -// $processData['PRO_CATEGORY'] = $httpData->PRO_CATEGORY; -// -// $sProUid = $oProcessMap->createProcess( $processData ); -// -// //call pluginsx -// $oData['PRO_UID'] = $sProUid; -// $oData['PRO_TEMPLATE'] = isset( $httpData->PRO_TEMPLATE ) && $httpData->PRO_TEMPLATE != '' ? $httpData->PRO_TEMPLATE : ''; -// $oData['PROCESSMAP'] = $oProcessMap; -// -// $oPluginRegistry = & PMPluginRegistry::getSingleton(); -// $oPluginRegistry->executeTriggers( PM_NEW_PROCESS_SAVE, $oData ); -// -// } else { -// //$oProcessMap->updateProcess($_POST['form']); -// $sProUid = $httpData->PRO_UID; -// } -// -// //Save Calendar ID for this process -// if (isset( $httpData->PRO_CALENDAR )) { -// G::LoadClass( "calendar" ); -// $calendarObj = new Calendar(); -// $calendarObj->assignCalendarTo( $sProUid, $httpData->PRO_CALENDAR, 'PROCESS' ); -// } -// - $this->success = true; $this->PRO_UID = $sProUid; $this->msg = G::LoadTranslation( 'ID_CREATE_PROCESS_SUCCESS' ); From e3c910637517c82eea35540d35821a8fef4f468c Mon Sep 17 00:00:00 2001 From: qronald Date: Wed, 14 Jun 2017 14:26:07 -0400 Subject: [PATCH 27/30] HOR-3403 --- gulliver/system/class.menu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulliver/system/class.menu.php b/gulliver/system/class.menu.php index 82ce5fa03..e539f2417 100644 --- a/gulliver/system/class.menu.php +++ b/gulliver/system/class.menu.php @@ -283,7 +283,7 @@ class Menu */ public function DisableOptionId($id) { - if (array_search($id, $this->Id)) { + if (array_search($id, $this->Id) !== FALSE) { $this->Enabled[array_search($id, $this->Id)] = 0; } } From b141ccbad722c557e3b716bbc76c4bd214ecf739 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 20 Jun 2017 11:51:35 -0400 Subject: [PATCH 28/30] HOR-3379 improvement in class.AppSolr.php --- workflow/engine/classes/class.AppSolr.php | 27 ++++++++++++----------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/workflow/engine/classes/class.AppSolr.php b/workflow/engine/classes/class.AppSolr.php index 42f273cc3..bd24f6daa 100644 --- a/workflow/engine/classes/class.AppSolr.php +++ b/workflow/engine/classes/class.AppSolr.php @@ -2912,20 +2912,21 @@ class AppSolr $oAppSolrQueue->createUpdate ($AppUid, $traceData, $updated); } - private function getCurrentTraceInfo() - { - $resultTraceString = ""; - - // - $traceData = debug_backtrace(); - foreach ($traceData as $key => $value) { - if($value['function'] != 'getCurrentTraceInfo' && $value['function'] != 'require_once') - $resultTraceString .= $value['file'] . " (" . $value['line'] . ") " . $value['function'] . "\n"; + private function getCurrentTraceInfo() + { + $resultTraceString = ""; + $traceData = debug_backtrace(); + foreach ($traceData as $key => $value) { + if ($value['function'] != 'getCurrentTraceInfo' && $value['function'] != 'require_once') { + if (isset($value['file']) && isset($value['line']) && isset($value['function'])) { + $resultTraceString .= $value['file'] . " (" . $value['line'] . ") " . $value['function'] . "\n"; + } + } + } + return $resultTraceString; } - return $resultTraceString; - } - - /** + + /** * Update application records in Solr that are stored in APP_SOLR_QUEUE table */ public function synchronizePendingApplications() From 4f6483a5423de24c295e8d059c0366d8d24bccc4 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 20 Jun 2017 11:53:18 -0400 Subject: [PATCH 29/30] HOR-3379 improvement in class.AppSolr.php --- workflow/engine/classes/class.AppSolr.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.AppSolr.php b/workflow/engine/classes/class.AppSolr.php index bd24f6daa..37312e958 100644 --- a/workflow/engine/classes/class.AppSolr.php +++ b/workflow/engine/classes/class.AppSolr.php @@ -2926,7 +2926,7 @@ class AppSolr return $resultTraceString; } - /** + /** * Update application records in Solr that are stored in APP_SOLR_QUEUE table */ public function synchronizePendingApplications() From 1abbe6337ed8e5262595e323c076174b962200a5 Mon Sep 17 00:00:00 2001 From: Rodrigo Quelca Date: Thu, 22 Jun 2017 13:59:44 -0400 Subject: [PATCH 30/30] FBI-1901: Javascript error when exporting a process --- workflow/engine/templates/processes/main.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/workflow/engine/templates/processes/main.js b/workflow/engine/templates/processes/main.js index a869ee41d..741a51c7b 100644 --- a/workflow/engine/templates/processes/main.js +++ b/workflow/engine/templates/processes/main.js @@ -408,9 +408,8 @@ Ext.onReady(function(){ processesGrid = new Ext.grid.GridPanel( { region: 'center', layout: 'fit', - id: 'processesGrid', - height:500, - //autoWidth : true, + id: 'granularGridPanel', + height: 500, width:'', title : '', stateful : true, @@ -421,13 +420,6 @@ Ext.onReady(function(){ plugins: expander, cls : 'grid_with_checkbox', columnLines: true, - - - /*view: new Ext.grid.GroupingView({ - //forceFit:true, - //groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})' - groupTextTpl: '{text}' - }),*/ viewConfig: { forceFit:true, cls:"x-grid-empty",