diff --git a/contrib/search_api_views/search_api_views.views.inc b/contrib/search_api_views/search_api_views.views.inc index b55a85a..a021186 100644 --- a/contrib/search_api_views/search_api_views.views.inc +++ b/contrib/search_api_views/search_api_views.views.inc @@ -194,11 +194,7 @@ function _search_api_views_add_handlers($id, array $field, EntityMetadataWrapper } $info = $wrapper->info(); - if (isset($info['options list']) && is_callable($info['options list'])) { - $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterOptions'; - $table[$id]['filter']['multi-valued'] = search_api_is_list_type($type); - } - elseif ($inner_type == 'boolean') { + if ($inner_type == 'boolean') { $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterBoolean'; } elseif ($inner_type == 'date') { @@ -209,7 +205,6 @@ function _search_api_views_add_handlers($id, array $field, EntityMetadataWrapper } elseif (isset($field['entity_type']) && $field['entity_type'] === 'taxonomy_term') { $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterTaxonomyTerm'; - $info = $wrapper->info(); $field_info = field_info_field($info['name']); // For the "Parent terms" and "All parent terms" properties, we can // extrapolate the vocabulary from the parent in the selector. (E.g., @@ -221,9 +216,20 @@ function _search_api_views_add_handlers($id, array $field, EntityMetadataWrapper $field_info = field_info_field($parts[count($parts) - 2]); } } + // "Terms reference" vocabulary if (isset($field_info['settings']['allowed_values'][0]['vocabulary'])) { $table[$id]['filter']['vocabulary'] = $field_info['settings']['allowed_values'][0]['vocabulary']; } + // "Entity reference" vocabulary + elseif (isset($field_info['settings']['handler']) && $field_info['settings']['handler'] === 'base') { + if (!empty($field_info['settings']['handler_settings']['target_bundles'])) { + $table[$id]['filter']['vocabulary'] = key($field_info['settings']['handler_settings']['target_bundles']); + } + } + } + elseif (isset($info['options list']) && is_callable($info['options list'])) { + $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilterOptions'; + $table[$id]['filter']['multi-valued'] = search_api_is_list_type($type); } else { $table[$id]['filter']['handler'] = 'SearchApiViewsHandlerFilter';