You are here

function search_api_autocomplete_form_views_exposed_form_alter in Search API Autocomplete 7

Same name and namespace in other branches
  1. 8 search_api_autocomplete.module \search_api_autocomplete_form_views_exposed_form_alter()

Implements hook_form_FORM_ID_alter().

Adds autocompletion to input fields for fulltext keywords on views with exposed filters.

File

./search_api_autocomplete.search_api_views.inc, line 14
Contains code for integrating with the "Search views" module.

Code

function search_api_autocomplete_form_views_exposed_form_alter(array &$form, array &$form_state) {
  $view = $form_state['view'];
  if (substr($view->base_table, 0, 17) != 'search_api_index_') {
    return;
  }
  $search_id = 'search_api_views_' . $view->name;
  $search = search_api_autocomplete_search_load($search_id);
  if (!$search || !search_api_autocomplete_access($search)) {
    return;
  }
  $index_id = substr($view->base_table, 17);
  $index = search_api_index_load($index_id);
  if (empty($index->options['fields'])) {
    return;
  }
  $fields = $index
    ->getFulltextFields(TRUE);

  // Add the "Search: Fulltext search" filter as another text field.
  $fields[] = 'search_api_views_fulltext';
  drupal_alter('search_api_autocomplete_views_fulltext_fields', $fields, $search, $view);
  foreach ($view->filter as $filter_name => $filter) {
    if (in_array($filter->real_field, $fields)) {
      if (!empty($filter->options['expose']['identifier'])) {
        $key = $filter->options['expose']['identifier'];
        if (isset($form[$key]) && $form[$key]['#type'] == 'textfield') {
          if ($filter->real_field == 'search_api_views_fulltext') {
            $autocomplete_fields = $filter->options['fields'];
          }
          else {
            $autocomplete_fields = array(
              $filter->real_field,
            );
          }
          $search
            ->alterElement($form[$key], $autocomplete_fields);
        }
      }
    }
  }
}