You are here

function ext_search_page_search_query in Extended search page 7

Create the search page query.

Parameters

Entity $page: The page for which a search should be executed.

$keys: The keywords to search for.

$values: Filters values.

$sort: Field or array or field to sort with.

$offset:

$limit:

$search_id Seach API ID (cache ?):

Return value

SearchApiQueryInterface An object for searching on the page.

2 calls to ext_search_page_search_query()
ext_search_node_ref_potential_references in ext_search_node_ref/ext_search_node_ref.module
Fetch an array of all candidate referenced nodes.
ext_search_page_search_execute in ./ext_search_page.module
Executes a search.

File

./ext_search_page.module, line 899
Extended search page module.

Code

function ext_search_page_search_query($page, $keys, $values, $sort = FALSE, $limit = 50, $offset = 0, $search_id = NULL) {
  if (!$search_id) {

    // needed for cache
    $search_id = 'ext_search_page:' . $page->path . ':' . md5(serialize($values));
  }
  $options = array(
    'search id' => $search_id,
    'search_api_page id' => $page->machine_name,
    'parse mode' => $page->options['mode'],
  );
  if (!empty($page->options['search_api_spellcheck'])) {
    $options['search_api_spellcheck'] = TRUE;
  }
  $query = search_api_query($page->index_id, $options)
    ->keys($keys)
    ->range($offset, $limit);

  // refactor ext>
  if (count($values)) {

    // we call add condition callback (even for hidden widgets)
    foreach (ext_search_page_get_filter_widgets($page) as $field => $widget) {

      // call add condition callback.
      $f = $widget['add_condition'];
      $f($query, $field, $widget, isset($values[$field]) ? $values[$field] : null);
    }
  }

  // <refactor ext
  if (!empty($page->options['fields'])) {
    $query
      ->fields($page->options['fields']);
  }
  if (!empty($page->options['language_filter'])) {
    $languages = array_unique(array_map('_search_api_page_map_languages', $page->options['language_filter']));
    if (count($languages) == 1) {
      $query
        ->condition('search_api_language', reset($languages));
    }
    else {
      $filter = $query
        ->createFilter('OR');
      foreach ($languages as $lang) {
        $filter
          ->condition('search_api_language', $lang);
      }
      $query
        ->filter($filter);
    }
  }
  if ($sort) {
    if (!is_array($sort)) {
      $sort = array(
        $sort,
      );
    }
    foreach ($sort as $field => $order) {
      if (!is_string($field)) {
        $field = $order;
        $order = 'ASC';
      }
      $query
        ->sort($field, $order);
    }
  }
  return $query;
}