X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContact%2FSelector.php;h=dcac1ec94758fec79aa1c25cf0f850df2f1959f1;hb=b2ac9e9ca74be7f852e37e0dfbf0e77627471c4d;hp=42d22ab7cd3478533a4e80353fe063525aac6289;hpb=55c743a80dee05709ea0f22b24b6376584be9aee;p=civicrm-core.git diff --git a/CRM/Contact/Selector.php b/CRM/Contact/Selector.php index 42d22ab7cd..dcac1ec947 100644 --- a/CRM/Contact/Selector.php +++ b/CRM/Contact/Selector.php @@ -1,9 +1,9 @@ _options = &$this->_query->_options; } - //end of constructor /** * This method returns the links that are given for each search row. @@ -223,10 +222,9 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se * - Edit * * @return array - * @access public * */ - static function &links() { + public static function &links() { list($context, $contextMenu, $key) = func_get_args(); $extraParams = ($key) ? "&key={$key}" : NULL; $searchContext = ($context) ? "&context=$context" : NULL; @@ -236,6 +234,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se CRM_Core_Action::VIEW => array( 'name' => ts('View'), 'url' => 'civicrm/contact/view', + 'class' => 'no-popup', 'qs' => "reset=1&cid=%%id%%{$searchContext}{$extraParams}", 'title' => ts('View Contact Details'), 'ref' => 'view-contact', @@ -243,6 +242,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se CRM_Core_Action::UPDATE => array( 'name' => ts('Edit'), 'url' => 'civicrm/contact/add', + 'class' => 'no-popup', 'qs' => "reset=1&action=update&cid=%%id%%{$searchContext}{$extraParams}", 'title' => ts('Edit Contact Details'), 'ref' => 'edit-contact', @@ -267,7 +267,6 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se if ($value['key'] == 'delete') { $contextVal = $searchContext; } - $url = "civicrm/contact/view/{$value['key']}"; $qs = "reset=1&action=add&cid=%%id%%{$contextVal}{$extraParams}"; if ($value['key'] == 'activity') { @@ -284,21 +283,22 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se 'qs' => $qs, 'title' => $value['title'], 'ref' => $value['ref'], + 'class' => CRM_Utils_Array::value('class', $value), ); } } } 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 array $params * - * @param - * @access public */ - function getPagerParams($action, &$params) { + public function getPagerParams($action, &$params) { $params['status'] = ts('Contact %%StatusMessage%%'); $params['csvString'] = NULL; $params['rowCount'] = CRM_Utils_Pager::ROWCOUNT; @@ -306,25 +306,29 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se $params['buttonTop'] = 'PagerTopButton'; $params['buttonBottom'] = 'PagerBottomButton'; } - //end of function - function &getColHeads($action = NULL, $output = NULL) { + /** + * @param null $action + * @param null $output + * + * @return array + */ + public function &getColHeads($action = NULL, $output = NULL) { $colHeads = self::_getColumnHeaders(); $colHeads[] = array('desc' => ts('Actions'), 'name' => ts('Action')); return $colHeads; } /** - * 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 * @param enum $output what should the result set include (web/email/csv) * * @return array the column headers that need to be displayed - * @access public */ - function &getColumnHeaders($action = NULL, $output = NULL) { + public function &getColumnHeaders($action = NULL, $output = NULL) { $headers = NULL; // unset return property elements that we don't care @@ -340,7 +344,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se } if ($output == CRM_Core_Selector_Controller::EXPORT) { - $csvHeaders = array(ts('Contact Id'), ts('Contact Type')); + $csvHeaders = array(ts('Contact ID'), ts('Contact Type')); foreach ($this->getColHeads($action, $output) as $column) { if (array_key_exists('name', $column)) { $csvHeaders[] = $column['name']; @@ -378,7 +382,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se $locationTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id'); foreach ($this->_fields as $name => $field) { - if (CRM_Utils_Array::value('in_selector', $field) && + if (!empty($field['in_selector']) && !in_array($name, $skipFields) ) { if (strpos($name, '-') !== FALSE) { @@ -474,9 +478,8 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se * @param * * @return int Total number of rows - * @access public */ - function getTotalCount($action) { + public function getTotalCount($action) { // Use count from cache during paging/sorting if (!empty($_GET['crmPID']) || !empty($_GET['crmSID'])) { $count = CRM_Core_BAO_Cache::getItem('Search Results Count', $this->_key); @@ -489,7 +492,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 @@ -499,7 +502,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se * * @return int the total number of rows for this action */ - function &getRows($action, $offset, $rowCount, $sort, $output = NULL) { + public function &getRows($action, $offset, $rowCount, $sort, $output = NULL) { $config = CRM_Core_Config::singleton(); if (($output == CRM_Core_Selector_Controller::EXPORT || @@ -545,8 +548,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se $names = array(); static $skipFields = array('group', 'tag'); foreach ($this->_fields as $key => $field) { - if ( - CRM_Utils_Array::value('in_selector', $field) && + if (!empty($field['in_selector']) && !in_array($key, $skipFields) ) { if (strpos($key, '-') !== FALSE) { @@ -713,14 +715,14 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se if ($output != CRM_Core_Selector_Controller::EXPORT) { $row['checkbox'] = CRM_Core_Form::CB_PREFIX . $result->contact_id; - if (CRM_Utils_Array::value('deleted_contacts', $this->_formValues) - && CRM_Core_Permission::check('access deleted contacts') + if (!empty($this->_formValues['deleted_contacts']) && CRM_Core_Permission::check('access deleted contacts') ) { $links = array( array( 'name' => ts('View'), 'url' => 'civicrm/contact/view', 'qs' => 'reset=1&cid=%%id%%', + 'class' => 'no-popup', 'title' => ts('View Contact Details'), ), array( @@ -738,18 +740,44 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se 'title' => ts('Permanently Delete Contact'), ); } - $row['action'] = CRM_Core_Action::formLink($links, NULL, array('id' => $result->contact_id)); + $row['action'] = CRM_Core_Action::formLink( + $links, + NULL, + array('id' => $result->contact_id), + ts('more'), + FALSE, + 'contact.selector.row', + 'Contact', + $result->contact_id + ); } elseif ((is_numeric(CRM_Utils_Array::value('geo_code_1', $row))) || - ($config->mapGeoCoding && - CRM_Utils_Array::value('city', $row) && + ($config->mapGeoCoding && !empty($row['city']) && CRM_Utils_Array::value('state_province', $row) ) ) { - $row['action'] = CRM_Core_Action::formLink($links, $mask, array('id' => $result->contact_id)); + $row['action'] = CRM_Core_Action::formLink( + $links, + $mask, + array('id' => $result->contact_id), + ts('more'), + FALSE, + 'contact.selector.row', + 'Contact', + $result->contact_id + ); } else { - $row['action'] = CRM_Core_Action::formLink($links, $mapMask, array('id' => $result->contact_id)); + $row['action'] = CRM_Core_Action::formLink( + $links, + $mapMask, + array('id' => $result->contact_id), + ts('more'), + FALSE, + 'contact.selector.row', + 'Contact', + $result->contact_id + ); } // allow components to add more actions @@ -781,15 +809,42 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se return $rows; } - function buildPrevNextCache($sort) { + /** + * @param CRM_Utils_Sort $sort + * + * @return string + */ + public 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); @@ -812,7 +867,10 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se return $cacheKey; } - function addActions(&$rows) { + /** + * @param $rows + */ + public function addActions(&$rows) { $config = CRM_Core_Config::singleton(); $permissions = array(CRM_Core_Permission::getPermission()); @@ -830,8 +888,7 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se foreach ($rows as $id => & $row) { - if (CRM_Utils_Array::value('deleted_contacts', $this->_formValues) - && CRM_Core_Permission::check('access deleted contacts') + if (!empty($this->_formValues['deleted_contacts']) && CRM_Core_Permission::check('access deleted contacts') ) { $links = array( array( @@ -856,18 +913,44 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se 'title' => ts('Permanently Delete Contact'), ); } - $row['action'] = CRM_Core_Action::formLink($links, NULL, array('id' => $row['contact_id'])); + $row['action'] = CRM_Core_Action::formLink( + $links, + null, + array('id' => $row['contact_id']), + ts('more'), + FALSE, + 'contact.selector.actions', + 'Contact', + $row['contact_id'] + ); } elseif ((is_numeric(CRM_Utils_Array::value('geo_code_1', $row))) || - ($config->mapGeoCoding && - CRM_Utils_Array::value('city', $row) && + ($config->mapGeoCoding && !empty($row['city']) && CRM_Utils_Array::value('state_province', $row) ) ) { - $row['action'] = CRM_Core_Action::formLink($links, $mask, array('id' => $row['contact_id'])); + $row['action'] = CRM_Core_Action::formLink( + $links, + $mask, + array('id' => $row['contact_id']), + ts('more'), + FALSE, + 'contact.selector.actions', + 'Contact', + $row['contact_id'] + ); } else { - $row['action'] = CRM_Core_Action::formLink($links, $mapMask, array('id' => $row['contact_id'])); + $row['action'] = CRM_Core_Action::formLink( + $links, + $mapMask, + array('id' => $row['contact_id']), + ts('more'), + FALSE, + 'contact.selector.actions', + 'Contact', + $row['contact_id'] + ); } // allow components to add more actions @@ -880,7 +963,10 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se } } - function removeActions(&$rows) { + /** + * @param $rows + */ + public function removeActions(&$rows) { foreach ($rows as $rid => & $rValue) { unset($rValue['contact_type']); unset($rValue['action']); @@ -888,12 +974,12 @@ 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 */ - function fillupPrevNextCache($sort, $cacheKey, $start = 0, $end = 500) { + public function fillupPrevNextCache($sort, $cacheKey, $start = 0, $end = 500) { $coreSearch = TRUE; // For custom searches, use the contactIDs method if (is_a($this, 'CRM_Contact_Selector_Custom')) { @@ -924,9 +1010,9 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont $sql = str_replace($replaceSQL, $insertSQL, $sql); - CRM_Core_Error::ignoreException(); + $errorScope = CRM_Core_TemporaryErrorScope::ignoreException(); $result = CRM_Core_DAO::executeQuery($sql); - CRM_Core_Error::setCallback(); + unset($errorScope); if (is_a($result, 'DB_Error')) { // check if we get error during core search @@ -950,12 +1036,12 @@ 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 $object $sort sort object + * @param CRM_Utils_Sort $sort * @param string $cacheKey cache key * * @return void */ - function rebuildPreNextCache($start, $end, $sort, $cacheKey) { + public function rebuildPreNextCache($start, $end, $sort, $cacheKey) { // generate full SQL $sql = $this->_query->searchQuery($start, $end, $sort, FALSE, $this->_query->_includeContactIds, FALSE, FALSE, TRUE); @@ -985,7 +1071,6 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont reference) $formValues submitted formValues * * @return array $qill which contains an array of strings - * @access public */ // the current internationalisation is bad, but should more or less work @@ -995,22 +1080,21 @@ 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 * * @return string name of the file */ - function getExportFileName($output = 'csv') { + public function getExportFileName($output = 'csv') { return ts('CiviCRM Contact Search'); } /** - * get colunmn headers for search selector + * Get colunmn headers for search selector * * * @return array $_columnHeaders - * @access private */ private static function &_getColumnHeaders() { if (!isset(self::$_columnHeaders)) { @@ -1052,7 +1136,7 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont ); foreach ($defaultAddress as $columnName => $column) { - if (CRM_Utils_Array::value($columnName, $addressOptions)) { + if (!empty($addressOptions[$columnName])) { self::$_columnHeaders[$columnName] = $column; } } @@ -1068,15 +1152,30 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont return self::$_columnHeaders; } - function &getQuery() { + /** + * @return CRM_Contact_BAO_Query + */ + public function &getQuery() { return $this->_query; } - function alphabetQuery() { + /** + * @return CRM_Contact_DAO_Contact + */ + public function alphabetQuery() { return $this->_query->searchQuery(NULL, NULL, NULL, FALSE, FALSE, TRUE); } - function contactIDQuery($params, $action, $sortID, $displayRelationshipType = NULL, $queryOperator = 'AND') { + /** + * @param array $params + * @param $action + * @param int $sortID + * @param null $displayRelationshipType + * @param string $queryOperator + * + * @return CRM_Contact_DAO_Contact + */ + public function contactIDQuery($params, $action, $sortID, $displayRelationshipType = NULL, $queryOperator = 'AND') { $sortOrder = &$this->getSortOrder($this->_action); $sort = new CRM_Utils_Sort($sortOrder, $sortID); @@ -1108,7 +1207,12 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont return $value; } - function &makeProperties(&$returnProperties) { + /** + * @param $returnProperties + * + * @return array + */ + public function &makeProperties(&$returnProperties) { $properties = array(); foreach ($returnProperties as $name => $value) { if ($name != 'location') { @@ -1138,5 +1242,3 @@ SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', cont return $properties; } } -//end of class -