search_api_views.module 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. /**
  3. * Implements hook_views_api().
  4. */
  5. function search_api_views_views_api() {
  6. return array(
  7. 'api' => '3.0-alpha1',
  8. );
  9. }
  10. /**
  11. * Implements hook_search_api_index_insert().
  12. */
  13. function search_api_views_search_api_index_insert(SearchApiIndex $index) {
  14. // Make the new index available for views.
  15. views_invalidate_cache();
  16. }
  17. /**
  18. * Implements hook_search_api_index_update().
  19. */
  20. function search_api_views_search_api_index_update(SearchApiIndex $index) {
  21. // Check whether index was disabled.
  22. if (!$index->enabled && $index->original->enabled) {
  23. _search_api_views_index_unavailable($index);
  24. }
  25. // Check whether the indexed fields changed.
  26. $old_fields = $index->original->options + array('fields' => array());
  27. $old_fields = $old_fields['fields'];
  28. $new_fields = $index->options + array('fields' => array());
  29. $new_fields = $new_fields['fields'];
  30. if ($old_fields != $new_fields) {
  31. views_invalidate_cache();
  32. }
  33. }
  34. /**
  35. * Implements hook_search_api_index_delete().
  36. */
  37. function search_api_views_search_api_index_delete(SearchApiIndex $index) {
  38. _search_api_views_index_unavailable($index);
  39. }
  40. /**
  41. * Function for reacting to a disabled or deleted search index.
  42. */
  43. function _search_api_views_index_unavailable(SearchApiIndex $index) {
  44. $names = array();
  45. $table = 'search_api_index_' . $index->machine_name;
  46. foreach (views_get_all_views() as $name => $view) {
  47. if (empty($view->disabled) && $view->base_table == $table) {
  48. $names[] = $name;
  49. // @todo: if ($index_deleted) $view->delete()?
  50. }
  51. }
  52. if ($names) {
  53. views_invalidate_cache();
  54. drupal_set_message(t('The following views were using the index %name: @views. You should disable or delete them.', array('%name' => $index->name, '@views' => implode(', ', $names))), 'warning');
  55. }
  56. }