diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index 43501ce33..619bebe1b 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -549,9 +549,17 @@ class ListInbox extends BaseListInbox $criteria->addJoin(ListInboxPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); self::loadFilters($criteria, $filters, $additionalColumns); - $sort = (!empty($filters['sort'])) ? - ListInboxPeer::TABLE_NAME.'.'.$filters['sort'] : - "LIST_INBOX.APP_UPDATE_DATE"; + //We will be defined the sort + $casesList = new \ProcessMaker\BusinessModel\Cases(); + $sort = $casesList->getSortColumn( + __CLASS__ . 'Peer', + BasePeer::TYPE_FIELDNAME, + empty($filters['sort']) ? "APP_UPDATE_DATE" : $filters['sort'], + "APP_UPDATE_DATE", + $this->additionalClassName, + $additionalColumns + ); + $dir = isset($filters['dir']) ? $filters['dir'] : "ASC"; $start = isset($filters['start']) ? $filters['start'] : "0"; $limit = isset($filters['limit']) ? $filters['limit'] : "25"; @@ -624,7 +632,6 @@ class ListInbox extends BaseListInbox * Returns the number of cases of a user * @param string $usrUid * @param array $filters - * @param string $status * @return int */ public function getCountList($usrUid, $filters = array()) diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index c5ca29955..ce7321e43 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -364,9 +364,17 @@ class ListParticipatedLast extends BaseListParticipatedLast self::loadFilters($criteria, $filters, $additionalColumns); - $sort = (!empty($filters['sort'])) ? - ListParticipatedLastPeer::TABLE_NAME.'.'.$filters['sort'] : - 'DEL_DELEGATE_DATE'; + //We will be defined the sort + $casesList = new \ProcessMaker\BusinessModel\Cases(); + $sort = $casesList->getSortColumn( + __CLASS__ . 'Peer', + BasePeer::TYPE_FIELDNAME, + empty($filters['sort']) ? "DEL_DELEGATE_DATE" : $filters['sort'], + "DEL_DELEGATE_DATE", + $this->additionalClassName, + $additionalColumns + ); + $dir = isset($filters['dir']) ? $filters['dir'] : 'ASC'; $start = isset($filters['start']) ? $filters['start'] : '0'; $limit = isset($filters['limit']) ? $filters['limit'] : '25'; diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index 8844a9363..1b885020d 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -307,7 +307,17 @@ class ListPaused extends BaseListPaused $criteria->add(ListPausedPeer::USR_UID, $usr_uid, Criteria::EQUAL); self::loadFilters($criteria, $filters, $additionalColumns); - $sort = (!empty($filters['sort'])) ? ListPausedPeer::TABLE_NAME.'.'.$filters['sort'] : "APP_PAUSED_DATE"; + //We will be defined the sort + $casesList = new \ProcessMaker\BusinessModel\Cases(); + $sort = $casesList->getSortColumn( + __CLASS__ . 'Peer', + BasePeer::TYPE_FIELDNAME, + empty($filters['sort']) ? "APP_PAUSED_DATE" : $filters['sort'], + "APP_PAUSED_DATE", + $this->additionalClassName, + $additionalColumns + ); + $dir = isset($filters['dir']) ? $filters['dir'] : "ASC"; $start = isset($filters['start']) ? $filters['start'] : "0"; $limit = isset($filters['limit']) ? $filters['limit'] : "25"; diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index f5a7836ab..26cf113eb 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -301,9 +301,18 @@ class ListUnassigned extends BaseListUnassigned //Apply some filters self::loadFilters($criteria, $filters, $additionalColumns); - $sort = (!empty($filters['sort'])) ? - ListUnassignedPeer::TABLE_NAME.'.'.$filters['sort'] : - "LIST_UNASSIGNED.DEL_DELEGATE_DATE"; + + //We will be defined the sort + $casesList = new \ProcessMaker\BusinessModel\Cases(); + $sort = $casesList->getSortColumn( + __CLASS__ . 'Peer', + BasePeer::TYPE_FIELDNAME, + empty($filters['sort']) ? "DEL_DELEGATE_DATE" : $filters['sort'], + "DEL_DELEGATE_DATE", + $this->additionalClassName, + $additionalColumns + ); + $dir = isset($filters['dir']) ? $filters['dir'] : "ASC"; $start = isset($filters['start']) ? $filters['start'] : "0"; $limit = isset($filters['limit']) ? $filters['limit'] : "25"; diff --git a/workflow/engine/methods/cases/proxyNewCasesList.php b/workflow/engine/methods/cases/proxyNewCasesList.php index cf274c0ff..f2c4eb881 100644 --- a/workflow/engine/methods/cases/proxyNewCasesList.php +++ b/workflow/engine/methods/cases/proxyNewCasesList.php @@ -24,6 +24,7 @@ try { $filters['start'] = isset($_REQUEST["start"]) ? $filter->sanitizeInputValue($_REQUEST["start"], 'nosql') : "0"; $filters['limit'] = isset($_REQUEST["limit"]) ? $filter->sanitizeInputValue($_REQUEST["limit"], 'nosql') : "25"; $filters['sort'] = (isset($_REQUEST['sort']))? (($_REQUEST['sort'] == 'APP_STATUS_LABEL')? 'APP_STATUS' : $filter->sanitizeInputValue($_REQUEST["sort"], 'nosql')) : ''; + $filters['sort'] = G::toUpper($filters['sort']); $filters['dir'] = isset($_REQUEST["dir"]) ? $filter->sanitizeInputValue($_REQUEST["dir"], 'nosql') : "DESC"; $filters['action'] = isset($_REQUEST["action"]) ? $filter->sanitizeInputValue($_REQUEST["action"], 'nosql') : ""; $filters['user'] = isset($_REQUEST["user"]) ? $filter->sanitizeInputValue($_REQUEST["user"], 'nosql') : ""; @@ -102,16 +103,26 @@ try { } else { $filters['limit'] = (int)$filters['limit']; } - - $filters['sort'] = G::toUpper($filters['sort']); - $columnsList = $listpeer::getFieldNames(BasePeer::TYPE_FIELDNAME); - - if (!(in_array($filters['sort'], $columnsList))) { - if ($filters['sort'] == 'APP_CURRENT_USER' && ($listName == 'participated' || $listName == 'participated_last')) { + + switch ($filters['sort']) { + case 'APP_CURRENT_USER': $filters['sort'] = 'DEL_CURRENT_USR_LASTNAME'; - } else { - $filters['sort'] = ''; - } + break; + case 'DEL_TASK_DUE_DATE': + $filters['sort'] = 'DEL_DUE_DATE'; + break; + case 'APP_UPDATE_DATE': + $filters['sort'] = 'DEL_DELEGATE_DATE'; + break; + case 'APP_DEL_PREVIOUS_USER': + $filters['sort'] = 'DEL_DUE_DATE'; + break; + case 'DEL_CURRENT_TAS_TITLE': + $filters['sort'] = 'APP_TAS_TITLE'; + break; + case 'APP_STATUS_LABEL': + $filters['sort'] = 'APP_STATUS'; + break; } $filters['dir'] = G::toUpper($filters['dir']); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 39cf05952..fe9a285e2 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -3329,4 +3329,42 @@ class Cases ); } } + + /** + * This function get the table.column by order by the result + * We can include the additional table related to the custom cases list + * + * @param string $listPeer, name of the list class + * @param string $field, name of the fieldName + * @param string $sort, name of column by sort + * @param string $defaultSort, name of column by sort default + * @param string $additionalClassName, name of the className of pmTable + * @param array $additionalColumns, columns related to the custom cases list with the format TABLE_NAME.COLUMN_NAME + * @return string $tableName + */ + public function getSortColumn($listPeer, $field, $sort, $defaultSort, $additionalClassName = '', $additionalColumns = array()) + { + $columnSort = $defaultSort; + $tableName = ''; + + //We will check if the column by sort is a LIST table + $columnsList = $listPeer::getFieldNames($field); + if (in_array($sort, $columnsList)) { + $columnSort = $listPeer::TABLE_NAME . '.' . $sort; + } else { + //We will sort by CUSTOM CASE LIST table + if (count($additionalColumns) > 0) { + require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $additionalClassName . '.php'); + $aTable = explode('.', current($additionalColumns)); + if (count($aTable) > 0) { + $tableName = $aTable[0]; + } + } + if (in_array($tableName . '.' . $sort, $additionalColumns)) { + $columnSort = $tableName . '.' . $sort; + } + } + + return $columnSort; + } }