diff --git a/workflow/engine/classes/ListAdditionalColumnsInterface.php b/workflow/engine/classes/ListAdditionalColumnsInterface.php new file mode 100644 index 000000000..8844f0e67 --- /dev/null +++ b/workflow/engine/classes/ListAdditionalColumnsInterface.php @@ -0,0 +1,24 @@ +additionalClassName; + } + + /** + * Set the value of $additionalClassName. + * + * @param string $v new value + * @return void + */ + public function setAdditionalClassName($v) + { + $this->additionalClassName = $v; + } + + /** + * Get the $userDisplayFormat value. + * + * @return string + */ + public function getUserDisplayFormat() + { + return $this->userDisplayFormat; + } + + /** + * Set the value of $userDisplayFormat. + * + * @param string $v new value + * @return void + */ + public function setUserDisplayFormat($v) + { + $this->userDisplayFormat = $v; + } + + /** + * Returns the number of cases by class and user. + * + * @param type $peerClass + * @param type $usrUid + * @param type $filters + * + * @return type + */ + protected function getCountListFromPeer($peerClass, $usrUid, $filters = []) + { + $criteria = new Criteria(); + $criteria->addSelectColumn('COUNT(*) AS TOTAL'); + $criteria->add($peerClass::USR_UID, $usrUid, Criteria::EQUAL); + if (count($filters)) { + self::loadFilters($criteria, $filters); + } + $dataset = $peerClass::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $row = $dataset->getRow(); + return (int) $row['TOTAL']; + } +} diff --git a/workflow/engine/classes/model/ListCanceled.php b/workflow/engine/classes/model/ListCanceled.php index c01224f16..317f6feb8 100644 --- a/workflow/engine/classes/model/ListCanceled.php +++ b/workflow/engine/classes/model/ListCanceled.php @@ -15,8 +15,10 @@ require_once 'classes/model/om/BaseListCanceled.php'; * @package classes.model */ // @codingStandardsIgnoreStart -class ListCanceled extends BaseListCanceled +class ListCanceled extends BaseListCanceled implements ListInterface { + use ListBaseTrait; + // @codingStandardsIgnoreEnd /** * Create List Canceled Table @@ -283,7 +285,7 @@ class ListCanceled extends BaseListCanceled } } - public function loadList($usr_uid, $filters = array(), $callbackRecord = null) + public function loadList($usr_uid, $filters = array(), callable $callbackRecord = null) { $resp = array(); $criteria = new Criteria(); @@ -346,16 +348,7 @@ class ListCanceled extends BaseListCanceled */ public function getCountList($usrUid, $filters = array()) { - $criteria = new Criteria(); - $criteria->addSelectColumn('COUNT(*) AS TOTAL'); - $criteria->add(ListCanceledPeer::USR_UID, $usrUid, Criteria::EQUAL); - if (count($filters)) { - self::loadFilters($criteria, $filters); - } - $dataset = ListCanceledPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $aRow = $dataset->getRow(); - return (int)$aRow['TOTAL']; + return $this->getCountListFromPeer + (ListCanceledPeer::class, $usrUid, $filters); } } // ListCanceled diff --git a/workflow/engine/classes/model/ListCompleted.php b/workflow/engine/classes/model/ListCompleted.php index 1b31f63ac..d7c145657 100644 --- a/workflow/engine/classes/model/ListCompleted.php +++ b/workflow/engine/classes/model/ListCompleted.php @@ -15,8 +15,10 @@ require_once 'classes/model/om/BaseListCompleted.php'; * @package classes.model */ // @codingStandardsIgnoreStart -class ListCompleted extends BaseListCompleted +class ListCompleted extends BaseListCompleted implements ListInterface { + use ListBaseTrait; + // @codingStandardsIgnoreEnd /** * Create List Completed Table @@ -271,7 +273,7 @@ class ListCompleted extends BaseListCompleted } } - public function loadList($usr_uid, $filters = array(), $callbackRecord = null) + public function loadList($usr_uid, $filters = array(), callable $callbackRecord = null) { $resp = array(); $criteria = new Criteria(); @@ -324,23 +326,16 @@ class ListCompleted extends BaseListCompleted } /** - * Returns the number of cases of a user + * Returns the number of cases of a user. + * * @param $usrUid * @param array $filters + * * @return int */ public function getCountList($usrUid, $filters = array()) { - $criteria = new Criteria(); - $criteria->addSelectColumn('COUNT(*) AS TOTAL'); - $criteria->add(ListCompletedPeer::USR_UID, $usrUid, Criteria::EQUAL); - if (count($filters)) { - self::loadFilters($criteria, $filters); - } - $dataset = ListCompletedPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $aRow = $dataset->getRow(); - return (int)$aRow['TOTAL']; + return $this->getCountListFromPeer + (ListCompletedPeer::class, $usrUid, $filters); } } // ListCompleted diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index 47362ea9f..cc1e0bbff 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -15,52 +15,9 @@ use ProcessMaker\BusinessModel\Cases as BmCases; * @package classes.model */ -class ListInbox extends BaseListInbox +class ListInbox extends BaseListInbox implements ListInterface { - private $additionalClassName = ''; - private $userDisplayFormat = ''; - - /** - * Get the $additionalClassName value. - * - * @return string - */ - public function getAdditionalClassName() - { - return $this->additionalClassName; - } - - /** - * Set the value of $additionalClassName. - * - * @param string $v new value - * @return void - */ - public function setAdditionalClassName($v) - { - $this->additionalClassName = $v; - } - - /** - * Get the $userDisplayFormat value. - * - * @return string - */ - public function getUserDisplayFormat() - { - return $this->userDisplayFormat; - } - - /** - * Set the value of $userDisplayFormat. - * - * @param string $v new value - * @return void - */ - public function setUserDisplayFormat($v) - { - $this->userDisplayFormat = $v; - } + use ListBaseTrait; /** * Create List Inbox Table @@ -569,7 +526,7 @@ class ListInbox extends BaseListInbox * @return array $data * @throws PropelException */ - public function loadList($usr_uid, $filters = array(), $callbackRecord = null) + public function loadList($usr_uid, $filters = array(), callable $callbackRecord = null) { $pmTable = new PmTable(); $list = isset($filters['action']) ? $filters['action'] : ""; @@ -713,7 +670,7 @@ class ListInbox extends BaseListInbox $dataset = ListInboxPeer::doSelectRS($criteria); $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); - $aRow = $dataset->getRow(); - return (int)$aRow['TOTAL']; + $row = $dataset->getRow(); + return (int) $row['TOTAL']; } } diff --git a/workflow/engine/classes/model/ListMyInbox.php b/workflow/engine/classes/model/ListMyInbox.php index 6a29e6c48..eb33112a8 100644 --- a/workflow/engine/classes/model/ListMyInbox.php +++ b/workflow/engine/classes/model/ListMyInbox.php @@ -15,8 +15,10 @@ require_once 'classes/model/om/BaseListMyInbox.php'; * @package classes.model */ // @codingStandardsIgnoreStart -class ListMyInbox extends BaseListMyInbox +class ListMyInbox extends BaseListMyInbox implements ListInterface { + use ListBaseTrait; + // @codingStandardsIgnoreEnd /** * Create List My Inbox Table @@ -248,7 +250,7 @@ class ListMyInbox extends BaseListMyInbox } } - public function loadList($usr_uid, $filters = array(), $callbackRecord = null) + public function loadList($usr_uid, $filters = array(), callable $callbackRecord = null) { $criteria = new Criteria(); diff --git a/workflow/engine/classes/model/ListParticipatedHistory.php b/workflow/engine/classes/model/ListParticipatedHistory.php index 804ee66d5..896c0927b 100644 --- a/workflow/engine/classes/model/ListParticipatedHistory.php +++ b/workflow/engine/classes/model/ListParticipatedHistory.php @@ -15,8 +15,10 @@ require_once 'classes/model/om/BaseListParticipatedHistory.php'; * @package classes.model */ // @codingStandardsIgnoreStart -class ListParticipatedHistory extends BaseListParticipatedHistory +class ListParticipatedHistory extends BaseListParticipatedHistory implements ListInterface { + use ListBaseTrait; + // @codingStandardsIgnoreEnd /** * Create List Participated History Table @@ -203,7 +205,7 @@ class ListParticipatedHistory extends BaseListParticipatedHistory } } - public function loadList($usr_uid, $filters = array(), $callbackRecord = null) + public function loadList($usr_uid, $filters = array(), callable $callbackRecord = null) { $criteria = new Criteria(); diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index 81d3ed331..587d4a21a 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -12,52 +12,9 @@ use ProcessMaker\BusinessModel\Cases as BmCases; * application requirements. This class will only be generated as * long as it does not already exist in the output directory. */ -class ListParticipatedLast extends BaseListParticipatedLast +class ListParticipatedLast extends BaseListParticipatedLast implements ListInterface { - private $additionalClassName = ''; - private $userDisplayFormat = ''; - - /** - * Get the $additionalClassName value. - * - * @return string - */ - public function getAdditionalClassName() - { - return $this->additionalClassName; - } - - /** - * Set the value of $additionalClassName. - * - * @param string $v new value - * @return void - */ - public function setAdditionalClassName($v) - { - $this->additionalClassName = $v; - } - - /** - * Get the $userDisplayFormat value. - * - * @return string - */ - public function getUserDisplayFormat() - { - return $this->userDisplayFormat; - } - - /** - * Set the value of $userDisplayFormat. - * - * @param string $v new value - * @return void - */ - public function setUserDisplayFormat($v) - { - $this->userDisplayFormat = $v; - } + use ListBaseTrait; /** * Create List Participated History Table. @@ -410,7 +367,7 @@ class ListParticipatedLast extends BaseListParticipatedLast * @return array $data * @throws PropelException */ - public function loadList($usr_uid, $filters = array(), $callbackRecord = null, $appUid = '') + public function loadList($usr_uid, $filters = array(), callable $callbackRecord = null, $appUid = '') { $pmTable = new PmTable(); $criteria = $pmTable->addPMFieldsToList('sent'); @@ -554,18 +511,8 @@ class ListParticipatedLast extends BaseListParticipatedLast */ public function getCountList($usrUid, $filters = array()) { - $criteria = new Criteria(); - $criteria->addSelectColumn('COUNT(*) AS TOTAL'); - $criteria->add(ListParticipatedLastPeer::USR_UID, $usrUid, Criteria::EQUAL); - if (count($filters)) { - self::loadFilters($criteria, $filters); - } - $dataset = ListParticipatedLastPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $aRow = $dataset->getRow(); - - return (int) $aRow['TOTAL']; + return $this->getCountListFromPeer + (ListParticipatedLastPeer::class, $usrUid, $filters); } /** diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index edaf5336c..d61b3963f 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -15,52 +15,9 @@ use ProcessMaker\BusinessModel\Cases as BmCases; * @package classes.model */ -class ListPaused extends BaseListPaused +class ListPaused extends BaseListPaused implements ListInterface { - private $additionalClassName = ''; - private $userDisplayFormat = ''; - - /** - * Get the $additionalClassName value. - * - * @return string - */ - public function getAdditionalClassName() - { - return $this->additionalClassName; - } - - /** - * Set the value of $additionalClassName. - * - * @param string $v new value - * @return void - */ - public function setAdditionalClassName($v) - { - $this->additionalClassName = $v; - } - - /** - * Get the $userDisplayFormat value. - * - * @return string - */ - public function getUserDisplayFormat() - { - return $this->userDisplayFormat; - } - - /** - * Set the value of $userDisplayFormat. - * - * @param string $v new value - * @return void - */ - public function setUserDisplayFormat($v) - { - $this->userDisplayFormat = $v; - } + use ListBaseTrait; /** * Create List Paused Table @@ -326,7 +283,7 @@ class ListPaused extends BaseListPaused * @return array $data * @throws PropelException */ - public function loadList($usr_uid, $filters = array(), $callbackRecord = null) + public function loadList($usr_uid, $filters = array(), callable $callbackRecord = null) { $resp = array(); $pmTable = new PmTable(); @@ -417,16 +374,7 @@ class ListPaused extends BaseListPaused */ public function getCountList($usrUid, $filters = array()) { - $criteria = new Criteria(); - $criteria->addSelectColumn('COUNT(*) AS TOTAL'); - $criteria->add(ListPausedPeer::USR_UID, $usrUid, Criteria::EQUAL); - if (count($filters)) { - self::loadFilters($criteria, $filters); - } - $dataset = ListPausedPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $aRow = $dataset->getRow(); - return (int)$aRow['TOTAL']; + return $this->getCountListFromPeer + (ListPausedPeer::class, $usrUid, $filters); } } // ListPaused diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index abfe3284b..f34ebc9a8 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -15,9 +15,10 @@ require_once 'classes/model/om/BaseListUnassigned.php'; * @package classes.model */ // @codingStandardsIgnoreStart -class ListUnassigned extends BaseListUnassigned +class ListUnassigned extends BaseListUnassigned implements ListInterface { - private $additionalClassName = ''; + use ListBaseTrait; + private $total = 0; /** @@ -192,7 +193,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, __CLASS__ . 'Peer', $search, $this->additionalClassName, $additionalColumns); + $casesList->getSearchCriteriaListCases($criteria, __CLASS__ . 'Peer', $search, $this->getAdditionalClassName(), $additionalColumns); } } @@ -228,7 +229,7 @@ class ListUnassigned extends BaseListUnassigned { $pmTable = new PmTable(); $criteria = $pmTable->addPMFieldsToList('unassigned'); - $this->additionalClassName = $pmTable->tableClassName; + $this->setAdditionalClassName($pmTable->tableClassName); $additionalColumns = $criteria->getSelectColumns(); $criteria->addSelectColumn(ListUnassignedPeer::APP_UID); @@ -260,8 +261,9 @@ class ListUnassigned extends BaseListUnassigned BasePeer::TYPE_FIELDNAME, empty($filters['sort']) ? "DEL_DELEGATE_DATE" : $filters['sort'], "DEL_DELEGATE_DATE", - $this->additionalClassName, - $additionalColumns + $this->getAdditionalClassName(), + $additionalColumns, + $this->getUserDisplayFormat() ); $dir = isset($filters['dir']) ? $filters['dir'] : "ASC"; @@ -269,10 +271,20 @@ class ListUnassigned extends BaseListUnassigned $limit = isset($filters['limit']) ? $filters['limit'] : "25"; $paged = isset($filters['paged']) ? $filters['paged'] : 1; $count = isset($filters['count']) ? $filters['count'] : 1; - if ($dir == "DESC") { - $criteria->addDescendingOrderByColumn($sort); + if (is_array($sort) && count($sort) > 0) { + foreach ($sort as $key) { + if ($dir == 'DESC') { + $criteria->addDescendingOrderByColumn($key); + } else { + $criteria->addAscendingOrderByColumn($key); + } + } } else { - $criteria->addAscendingOrderByColumn($sort); + if ($dir == 'DESC') { + $criteria->addDescendingOrderByColumn($sort); + } else { + $criteria->addAscendingOrderByColumn($sort); + } } $this->total = ListUnassignedPeer::doCount($criteria); if ($paged == 1) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 6ffbfffe6..f2a9759d4 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -3582,6 +3582,9 @@ class Cases break; case 'USR_UID': $columnSort = $this->buildOrderFieldFormatted($columnsList, $userDisplayFormat, 'DEL_CURRENT_'); + if (empty($columnSort)) { + $columnSort = $this->buildOrderFieldFormatted($columnsList, $userDisplayFormat, '', false); + } break; default: $columnSort = $listPeer::TABLE_NAME . '.' . $sort; @@ -3612,13 +3615,13 @@ class Cases * * @return array $columnSort, columns by apply the sql command ORDER BY */ - public function buildOrderFieldFormatted($columnsList, $format, $prefix = 'DEL_PREVIOUS_') + public function buildOrderFieldFormatted($columnsList, $format, $prefix = 'DEL_PREVIOUS_', $validate = true) { $columnSort = []; - if (in_array($prefix . 'USR_FIRSTNAME', $columnsList) && + if (!$validate || (in_array($prefix . 'USR_FIRSTNAME', $columnsList) && in_array($prefix . 'USR_LASTNAME', $columnsList) && - in_array($prefix . 'USR_USERNAME', $columnsList) + in_array($prefix . 'USR_USERNAME', $columnsList)) ) { switch ($format) { case '@firstName @lastName':