You are here

function ext_search_page_view in Extended search page 7

Displays a search page.

Parameters

$id: The search page's ID.

$keys: The keys to search for.

$mode : the render mode.:

1 string reference to 'ext_search_page_view'
ext_search_page_menu_alter in ./ext_search_page.module
Implements hook_menu_alter().

File

./ext_search_page.pages.inc, line 18
Front pages for Extended search page.

Code

function ext_search_page_view($id, $keys = NULL, $mode = 'default') {
  $page = search_api_page_load($id);
  if (!$page) {
    return MENU_NOT_FOUND;
  }
  if (is_string($page->ext_search_options)) {
    $page->ext_search_options = (array) unserialize($page->ext_search_options);
  }

  // Pre-process keys (unescape \ and /).
  if (isset($keys) && $keys !== '') {
    $keys = explode("\\\\", $keys);
    $keys = str_replace("\\", "/", $keys);
    $keys = implode("\\", $keys);
  }
  else {
    $keys = NULL;
  }
  $ret = array();
  $ret['#contextual_links']['search_api_page'] = array(
    'admin/config/search/search_api/page',
    array(
      $page->machine_name,
    ),
  );
  $values = ext_search_page_get_filter_values($page);
  if (!isset($page->options['result_page_search_form']) || $page->options['result_page_search_form']) {

    //$ret['form'] = drupal_get_form('search_api_page_search_form', $page, $keys);
    $ret['form'] = drupal_get_form('ext_search_page_search_form', $page, $keys, $values, $mode);
  }

  // Do a search if we have keys, or our empty behavior and facets dictate.
  if ($keys || !empty($page->options['empty_behavior'])) {

    // Override per_page setting with GET parameter.
    $limit = $page->options['per_page'];
    if (!empty($page->options['get_per_page']) && !empty($_GET['per_page']) && (int) $_GET['per_page'] > 0) {
      $limit = (int) $_GET['per_page'];
    }
    try {
      $results = ext_search_page_search_execute($page, $keys, $values, FALSE, $limit, pager_find_page() * $limit);
    } catch (SearchApiException $e) {
      drupal_set_message(t('An error occurred while executing the search. Please try again, or contact the site administrator if the problem persists.'), 'error');
      $link = l(t('search page'), $_GET['q'], array(
        'query' => drupal_get_query_parameters(),
      ));
      watchdog_exception('search_api_page', $e, '%type while executing a search: !message in %function (line %line of %file).', array(), WATCHDOG_ERROR, $link);
      return $ret;
    }
    if (!$results) {
      return $ret;
    }

    // If spellcheck results were returned then add them to the render array.
    if (isset($results['search_api_spellcheck'])) {
      $ret['results']['#spellcheck'] = array(
        '#theme' => 'search_api_spellcheck',
        '#spellcheck' => $results['search_api_spellcheck'],
        // Let the theme function know where the key is stored by passing its arg
        // number. We can work this out from the number of args in the page path.
        '#options' => array(
          'arg' => array(
            count(arg(NULL, $page->path)),
          ),
        ),
        '#prefix' => '<p class="search-api-spellcheck-suggestion">',
        '#suffix' => '</p>',
      );
    }
    $ret['results']['#theme'] = "search_api_page_results__{$page->machine_name}";
    $ret['results']['#index'] = search_api_index_load($page->index_id);
    $ret['results']['#results'] = $results;
    $ret['results']['#view_mode'] = isset($page->options['view_mode']) ? $page->options['view_mode'] : 'search_api_page_result';
    $ret['results']['#keys'] = $keys;
    $ret['results']['#page'] = $page;

    // Load pager.
    if ($results['result count'] > $limit) {
      pager_default_initialize($results['result count'], $limit);
      $ret['results']['#pager']['#theme'] = 'pager';
    }
    if (!empty($results['ignored'])) {
      drupal_set_message(t('The following search keys are too short or too common and were therefore ignored: "@list".', array(
        '@list' => implode(t('", "'), $results['ignored']),
      )), 'warning');
    }
    if (!empty($results['warnings'])) {
      foreach ($results['warnings'] as $warning) {
        drupal_set_message(check_plain($warning), 'warning');
      }
    }
  }
  return $ret;
}