You are here

function search_api_sorts_search_api_query_alter in Search API sorts 7

Implements hook_search_api_query_alter().

1 string reference to 'search_api_sorts_search_api_query_alter'
search_api_sorts_block_search_sorts_view in ./search_api_sorts.module
View the "Search sorts" block.

File

./search_api_sorts.module, line 327
Create sort options for search queries executed via the Search API.

Code

function search_api_sorts_search_api_query_alter(SearchApiQueryInterface $query) {
  if (!user_access('use search_api_sorts')) {
    return;
  }

  // There's already an existing sort, so abort!
  $existing = $query
    ->getSort();
  if (!empty($existing)) {
    return;
  }
  $search_sorts = search_api_sorts_search_sorts($query
    ->getIndex()->machine_name);
  if (empty($search_sorts)) {
    return;
  }
  $default_sort = _search_api_sorts_get_default_sort($search_sorts, $query
    ->getKeys());

  // Alter sort field and sort order.
  $sort = $default_sort->field;
  $params = drupal_get_query_parameters($_GET, array(
    'q',
    'page',
  ));
  if (isset($params['sort']) && !empty($params['sort'])) {
    $sort = $params['sort'];
  }
  $order = $default_sort->default_order;
  if (isset($params['order']) && !empty($params['order'])) {
    $order = $params['order'];
  }
  if (!empty($order) && !empty($sort)) {
    $query
      ->sort($sort, $order);
  }

  // Static save current search query.
  $_query =& drupal_static(__FUNCTION__, array());
  $_query = $query;
}