You are here

function elasticsearch_connector_search_api_form_views_exposed_form_alter in Elasticsearch Connector 7.5

Same name and namespace in other branches
  1. 7 modules/elasticsearch_connector_search_api/elasticsearch_connector_search_api.module \elasticsearch_connector_search_api_form_views_exposed_form_alter()
  2. 7.2 modules/elasticsearch_connector_search_api/elasticsearch_connector_search_api.module \elasticsearch_connector_search_api_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

modules/elasticsearch_connector_search_api/elasticsearch_connector_search_api.module, line 365
Provides a elasticsearch-based service class for the Search API.

Code

function elasticsearch_connector_search_api_form_views_exposed_form_alter(array &$form, array &$form_state) {
  if (module_exists('search_api_autocomplete')) {
    $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';

    // We need the _entity_views_field_identifier() function to translate Search
    // API field names into Views identifiers.
    module_load_include('views.inc', 'entity', 'views/entity');
    foreach ($fields as $search_field) {
      $field = _entity_views_field_identifier($search_field, array());
      if (!empty($view->filter[$field]->options['expose']['identifier'])) {
        $key = $view->filter[$field]->options['expose']['identifier'];
        if (isset($form[$key]) && $form[$key]['#type'] == 'textfield') {
          if ($field == 'search_api_views_fulltext') {
            $fields = $view->filter[$field]->options['fields'];
          }
          else {
            $fields = array(
              $search_field,
            );
          }
          $search
            ->alterElement($form[$key], $fields);
          if (!empty($search->options['custom']['link_suggestions'])) {
            $form[$key]['#attributes']['class'] = array(
              'elasticsearch-autocomplete',
            );
            $form[$key]['#attached']['js'][] = drupal_get_path('module', 'elasticsearch_connector_search_api') . '/js/elasticsearch_connector_search_api_autocomplete.js';
          }
        }
      }
    }
  }
}