X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContact%2FSelector.php;h=e172e4804dac33f4e109ae933847f8da2ec98431;hb=7da04cdea71382ff22ffd94e9b3ae9915c25422b;hp=fd1185a5f866dd8def3753a1bd2815b74d8cf480;hpb=f73d4b56f02e0834294e6e1e15f60dbc406acf9c;p=civicrm-core.git diff --git a/CRM/Contact/Selector.php b/CRM/Contact/Selector.php index fd1185a5f8..e172e4804d 100644 --- a/CRM/Contact/Selector.php +++ b/CRM/Contact/Selector.php @@ -1,7 +1,7 @@ _options = &$this->_query->_options; } - //end of constructor /** * This method returns the links that are given for each search row. @@ -299,15 +298,13 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se } return self::$_links; } - //end of function /** - * getter for array of the parameters required for creating pager. + * Getter for array of the parameters required for creating pager. * * @param $action - * @param $params + * @param array $params * - * @internal param $ * @access public */ function getPagerParams($action, &$params) { @@ -318,7 +315,6 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; } - //end of function /** * @param null $action @@ -333,7 +329,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se } /** - * returns the column headers as an array of tuples: + * Returns the column headers as an array of tuples: * (name, sortName (key to the sort array)) * * @param string $action the action being performed @@ -507,7 +503,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se } /** - * returns all the rows in the given offset and rowCount + * Returns all the rows in the given offset and rowCount * * @param enum $action the action being performed * @param int $offset the row number to start from @@ -825,19 +821,41 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se } /** - * @param $sort + * @param CRM_Utils_Sort $sort * * @return string */ function buildPrevNextCache($sort) { $cacheKey = 'civicrm search ' . $this->_key; - // Get current page requested + // We should clear the cache in following conditions: + // 1. when starting from scratch, i.e new search + // 2. if records are sorted + + // get current page requested $pageNum = CRM_Utils_Request::retrieve('crmPID', 'Integer', CRM_Core_DAO::$_nullObject); - // When starting from scratch, clear any old cache - if (!$pageNum) { + + // get the current sort order + $currentSortID = CRM_Utils_Request::retrieve('crmSID', 'String', CRM_Core_DAO::$_nullObject); + + $session = CRM_Core_Session::singleton(); + + // get previous sort id + $previousSortID = $session->get('previousSortID'); + + // check for current != previous to ensure cache is not reset if paging is done without changing + // sort criteria + if (!$pageNum || (!empty($currentSortID) && $currentSortID != $previousSortID) ) { CRM_Core_BAO_PrevNextCache::deleteItem(NULL, $cacheKey, 'civicrm_contact'); - $pageNum = 1; + // this means it's fresh search, so set pageNum=1 + if (!$pageNum) { + $pageNum = 1; + } + } + + // set the current sort as previous sort + if (!empty($currentSortID)) { + $session->set('previousSortID', $currentSortID); } $pageSize = CRM_Utils_Request::retrieve('crmRowCount', 'Integer', CRM_Core_DAO::$_nullObject, FALSE, 50); @@ -967,7 +985,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se } /** - * @param object $sort + * @param CRM_Utils_Sort $sort * @param string $cacheKey * @param int $start * @param int $end @@ -1029,10 +1047,9 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont * * @param int $start start for limit clause * @param int $end end for limit clause - * @param $sort + * @param CRM_Utils_Sort $sort * @param string $cacheKey cache key * - * @internal param $object $sort sort object * @return void */ function rebuildPreNextCache($start, $end, $sort, $cacheKey) { @@ -1075,7 +1092,7 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont } /** - * name of export file. + * Name of export file. * * @param string $output type of output * @@ -1086,7 +1103,7 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont } /** - * get colunmn headers for search selector + * Get colunmn headers for search selector * * * @return array $_columnHeaders @@ -1163,9 +1180,9 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont } /** - * @param $params + * @param array $params * @param $action - * @param $sortID + * @param int $sortID * @param null $displayRelationshipType * @param string $queryOperator * @@ -1238,5 +1255,4 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont return $properties; } } -//end of class