<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.3 |
+ | CiviCRM version 4.4 |
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC (c) 2004-2013 |
+--------------------------------------------------------------------+
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',
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',
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') {
'qs' => $qs,
'title' => $value['title'],
'ref' => $value['ref'],
+ 'class' => CRM_Utils_Array::value('class', $value),
);
}
}
* @access public
*/
function getTotalCount($action) {
- return $this->_query->searchQuery(0, 0, NULL, TRUE);
+ // 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);
+ }
+ if (empty($count)) {
+ $count = $this->_query->searchQuery(0, 0, NULL, TRUE);
+ CRM_Core_BAO_Cache::setItem($count, 'Search Results Count', $this->_key);
+ }
+ return $count;
}
/**
// note the formvalues were given by CRM_Contact_Form_Search to us
// and contain the search criteria (parameters)
// note that the default action is basic
- $result = $this->_query->searchQuery($offset, $rowCount, $sort, FALSE, $includeContactIds);
+ if ($rowCount) {
+ $cacheKey = $this->buildPrevNextCache($sort);
+ $result = $this->_query->getCachedContacts($cacheKey, $offset, $rowCount, $includeContactIds);
+ }
+ else {
+ $result = $this->_query->searchQuery($offset, $rowCount, $sort, FALSE, $includeContactIds);
+ }
// process the result of the query
$rows = array();
$groupID = CRM_Utils_Array::key('1', $this->_formValues['group']);
$pseudoconstants = array();
- if (!empty($this->_fields)) {
- // get all the pseudoconstant values
- foreach ($this->_fields as $name => $values) {
- if (isset($this->_fields[$name]['pseudoconstant'])) {
- $pseudoconstants[$name] =
- array(
- 'dbName' => $this->_fields[$name]['name'],
- 'values' => CRM_Core_PseudoConstant::get('CRM_Contact_DAO_Contact', $name),
- );
- }
- }
- }
-
// for CRM-3157 purposes
- if (in_array('country', $names)) {
- $pseudoconstants['country'] = array(
- 'dbName' => 'country_id',
- 'values' => CRM_Core_PseudoConstant::country()
- );
- }
-
- if (in_array('state_province', $names)) {
- $pseudoconstants['state_province'] = array(
- 'dbName' => 'state_province_id',
- 'values' => CRM_Core_PseudoConstant::stateProvince()
- );
- }
-
if (in_array('world_region', $names)) {
$pseudoconstants['world_region'] = array(
'dbName' => 'world_region_id',
$seenIDs = array();
while ($result->fetch()) {
$row = array();
+ $this->_query->convertToPseudoNames($result);
// the columns we are interested in
foreach ($names as $property) {
$greeting = $property . '_display';
$row[$property] = $result->$greeting;
}
+ elseif ($property == 'state_province') {
+ $row[$property] = $result->state_province_name;
+ }
elseif (isset($pseudoconstants[$property])) {
$row[$property] = CRM_Utils_Array::value(
$result->{$pseudoconstants[$property]['dbName']},
'name' => ts('View'),
'url' => 'civicrm/contact/view',
'qs' => 'reset=1&cid=%%id%%',
+ 'class' => 'no-popup',
'title' => ts('View Contact Details'),
),
array(
'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('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
}
}
- $this->buildPrevNextCache($sort);
-
return $rows;
}
function buildPrevNextCache($sort) {
- $cacheKey = CRM_Utils_Array::value('qfKey', $this->_formValues);
+ $cacheKey = 'civicrm search ' . $this->_key;
+
+ // 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) {
+ CRM_Core_BAO_PrevNextCache::deleteItem(NULL, $cacheKey, 'civicrm_contact');
+ $pageNum = 1;
+ }
- //for prev/next pagination
- $crmPID = CRM_Utils_Request::retrieve('crmPID', 'Integer', CRM_Core_DAO::$_nullObject);
+ $pageSize = CRM_Utils_Request::retrieve('crmRowCount', 'Integer', CRM_Core_DAO::$_nullObject, FALSE, 50);
+ $firstRecord = ($pageNum - 1) * $pageSize;
//for alphabetic pagination selection save
$sortByCharacter = CRM_Utils_Request::retrieve('sortByCharacter', 'String', CRM_Core_DAO::$_nullObject);
//for text field pagination selection save
- $countRow = CRM_Core_BAO_PrevNextCache::getCount("%civicrm search {$cacheKey}%", NULL, "entity_table = 'civicrm_contact'", "LIKE");
+ $countRow = CRM_Core_BAO_PrevNextCache::getCount($cacheKey, NULL, "entity_table = 'civicrm_contact'");
- if ((!$crmPID || $countRow == 0) && !$sortByCharacter) {
- $this->fillupPrevNextCache($sort);
+ // $sortByCharacter triggers a refresh in the prevNext cache
+ if ($sortByCharacter && $sortByCharacter != 'all') {
+ $cacheKey .= "_alphabet";
+ $this->fillupPrevNextCache($sort, $cacheKey);
}
- elseif ($sortByCharacter) {
- $cacheKeyCharacter = "civicrm search {$cacheKey}_alphabet";
- if ($sortByCharacter == 'all') {
- //delete the alphabet key corresponding records in prevnext_cache
- CRM_Core_BAO_PrevNextCache::deleteItem(NULL, $cacheKeyCharacter, 'civicrm_contact');
- $cacheKeyCharacter = NULL;
- }
- $this->fillupPrevNextCache($sort, $cacheKeyCharacter);
+ elseif ($firstRecord >= $countRow) {
+ $this->fillupPrevNextCache($sort, $cacheKey, $countRow, $firstRecord + 500);
}
+ return $cacheKey;
}
function addActions(&$rows) {
'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('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
}
}
- function fillupPrevNextCache($sort, $cacheKey = NULL) {
- if (!$cacheKey) {
- $cacheKey = "civicrm search {$this->_key}";
- }
-
- CRM_Core_BAO_PrevNextCache::deleteItem(NULL, $cacheKey, 'civicrm_contact');
+ /**
+ * @param object $sort
+ * @param string $cacheKey
+ * @param int $start
+ * @param int $end
+ */
+ function fillupPrevNextCache($sort, $cacheKey, $start = 0, $end = 500) {
- // lets fill up the prev next cache here, so view can scroll thru
+ // For custom searches, use the contactIDs method
if (is_a($this, 'CRM_Contact_Selector_Custom')) {
- $sql = $this->_search->contactIDs(0, 0, $sort, TRUE);
+ $sql = $this->_search->contactIDs($start, $end, $sort, TRUE);
$replaceSQL = "SELECT contact_a.id as contact_id";
}
+ // For core searches use the searchQuery method
else {
$sql = $this->_query->searchQuery(
- 0, 0, $sort,
+ $start, $end, $sort,
FALSE, FALSE,
FALSE, TRUE, TRUE, NULL
);
$sql = str_replace($replaceSQL, $insertSQL, $sql);
-
CRM_Core_Error::ignoreException();
$result = CRM_Core_DAO::executeQuery($sql);
CRM_Core_Error::setCallback();