function elasticsearch_connector_search_api_form_views_exposed_form_alter in Elasticsearch Connector 7.2
Same name and namespace in other branches
- 7.5 modules/elasticsearch_connector_search_api/elasticsearch_connector_search_api.module \elasticsearch_connector_search_api_form_views_exposed_form_alter()
- 7 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 356 - 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';
}
}
}
}
}
}