search_api_saved_searches.api.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <?php
  2. /**
  3. * @file
  4. * Hooks provided by the Search API saved searches module.
  5. */
  6. /**
  7. * @addtogroup hooks
  8. * @{
  9. */
  10. /**
  11. * Acts on saved searches being loaded from the database.
  12. *
  13. * This hook is invoked during saved search loading, which is handled by
  14. * entity_load(), via the EntityCRUDController.
  15. *
  16. * @param array $searches
  17. * An array of saved search entities being loaded, keyed by id.
  18. *
  19. * @see hook_entity_load()
  20. */
  21. function hook_search_api_saved_search_load(array $searches) {
  22. $result = db_query('SELECT pid, foo FROM {mytable} WHERE pid IN(:ids)', array(':ids' => array_keys($searches)));
  23. foreach ($result as $record) {
  24. $searches[$record->pid]->foo = $record->foo;
  25. }
  26. }
  27. /**
  28. * Responds when a saved search is inserted.
  29. *
  30. * This hook is invoked after the saved search is inserted into the database.
  31. *
  32. * @param SearchApiSavedSearch $search
  33. * The saved search that is being inserted.
  34. *
  35. * @see hook_entity_insert()
  36. */
  37. function hook_search_api_saved_search_insert(SearchApiSavedSearch $search) {
  38. db_insert('mytable')
  39. ->fields(array(
  40. 'id' => entity_id('search_api_saved_search', $search),
  41. 'extra' => print_r($search, TRUE),
  42. ))
  43. ->execute();
  44. }
  45. /**
  46. * Acts on a saved search being inserted or updated.
  47. *
  48. * This hook is invoked before the saved search is saved to the database.
  49. *
  50. * @param SearchApiSavedSearch $search
  51. * The saved search that is being inserted or updated.
  52. *
  53. * @see hook_entity_presave()
  54. */
  55. function hook_search_api_saved_search_presave(SearchApiSavedSearch $search) {
  56. $search->name = 'foo';
  57. }
  58. /**
  59. * Responds to a saved search being updated.
  60. *
  61. * This hook is invoked after the saved search has been updated in the database.
  62. *
  63. * @param SearchApiSavedSearch $search
  64. * The saved search that is being updated.
  65. *
  66. * @see hook_entity_update()
  67. */
  68. function hook_search_api_saved_search_update(SearchApiSavedSearch $search) {
  69. db_update('mytable')
  70. ->fields(array('extra' => print_r($search, TRUE)))
  71. ->condition('id', entity_id('search_api_saved_search', $search))
  72. ->execute();
  73. }
  74. /**
  75. * Responds to saved search deletion.
  76. *
  77. * This hook is invoked after the saved search has been removed from the database.
  78. *
  79. * @param SearchApiSavedSearch $search
  80. * The saved search that is being deleted.
  81. *
  82. * @see hook_entity_delete()
  83. */
  84. function hook_search_api_saved_search_delete(SearchApiSavedSearch $search) {
  85. db_delete('mytable')
  86. ->condition('pid', entity_id('search_api_saved_search', $search))
  87. ->execute();
  88. }
  89. /**
  90. * Acts on saved search settings being loaded from the database.
  91. *
  92. * This hook is invoked during settings entity loading, which is handled by
  93. * entity_load(), via the EntityCRUDController.
  94. *
  95. * @param array $entities
  96. * An array of settings entity entities being loaded, keyed by delta.
  97. *
  98. * @see hook_entity_load()
  99. */
  100. function hook_search_api_saved_search_settings_load(array $entities) {
  101. $result = db_query('SELECT pid, foo FROM {mytable} WHERE pid IN(:ids)', array(':ids' => array_keys($entities)));
  102. foreach ($result as $record) {
  103. $entities[$record->pid]->foo = $record->foo;
  104. }
  105. }
  106. /**
  107. * Responds when a settings entity is inserted.
  108. *
  109. * This hook is invoked after the settings entity is inserted into the database.
  110. *
  111. * @param SearchApiSavedSearchSettings $settings
  112. * The settings entity that is being inserted.
  113. *
  114. * @see hook_entity_insert()
  115. */
  116. function hook_search_api_saved_search_settings_insert(SearchApiSavedSearchSettings $settings) {
  117. db_insert('mytable')
  118. ->fields(array(
  119. 'id' => entity_id('search_api_saved_search_settings', $settings),
  120. 'extra' => print_r($settings, TRUE),
  121. ))
  122. ->execute();
  123. }
  124. /**
  125. * Acts on a settings entity being inserted or updated.
  126. *
  127. * This hook is invoked before the settings entity is saved to the database.
  128. *
  129. * @param SearchApiSavedSearchSettings $settings
  130. * The settings entity that is being inserted or updated.
  131. *
  132. * @see hook_entity_presave()
  133. */
  134. function hook_search_api_saved_search_settings_presave(SearchApiSavedSearchSettings $settings) {
  135. $settings->options['foo'] = 'bar';
  136. }
  137. /**
  138. * Responds to a settings entity being updated.
  139. *
  140. * This hook is invoked after the settings entity has been updated in the
  141. * database.
  142. *
  143. * @param SearchApiSavedSearchSettings $settings
  144. * The settings entity that is being updated.
  145. *
  146. * @see hook_entity_update()
  147. */
  148. function hook_search_api_saved_search_settings_update(SearchApiSavedSearchSettings $settings) {
  149. db_update('mytable')
  150. ->fields(array('extra' => print_r($settings, TRUE)))
  151. ->condition('id', entity_id('search_api_saved_search_settings', $settings))
  152. ->execute();
  153. }
  154. /**
  155. * Responds to settings entity deletion.
  156. *
  157. * This hook is invoked after the settings entity has been removed from the
  158. * database.
  159. *
  160. * @param SearchApiSavedSearchSettings $settings
  161. * The settings entity that is being deleted.
  162. *
  163. * @see hook_entity_delete()
  164. */
  165. function hook_search_api_saved_search_settings_delete(SearchApiSavedSearchSettings $settings) {
  166. db_delete('mytable')
  167. ->condition('pid', entity_id('search_api_saved_search_settings', $settings))
  168. ->execute();
  169. }
  170. /**
  171. * Define default settings entity configurations.
  172. *
  173. * @return
  174. * An array of default saved search settings, keyed by deltas.
  175. *
  176. * @see hook_default_search_api_saved_search_settings_alter()
  177. */
  178. function hook_default_search_api_saved_search_settings() {
  179. $defaults['main'] = entity_create('search_api_saved_search_settings', array(
  180. // …
  181. ));
  182. return $defaults;
  183. }
  184. /**
  185. * Alter default settings entity configurations.
  186. *
  187. * @param array $defaults
  188. * An array of default saved search settings, keyed by deltas.
  189. *
  190. * @see hook_default_search_api_saved_search_settings()
  191. */
  192. function hook_default_search_api_saved_search_settings_alter(array &$defaults) {
  193. $defaults['main']->options['foo'] = 'bar';
  194. }
  195. /**
  196. * Alter or react on new results found for a saved search.
  197. *
  198. * The results will then be used to send a mail to the saved search's creator.
  199. *
  200. * @param array $results
  201. * An array of items representing new results for the search. The items that
  202. * would be sent to the user are passed as loaded items, all others are passed
  203. * only by ID.
  204. * @param SearchApiSavedSearch $search
  205. * The saved search that was executed.
  206. */
  207. function hook_search_api_saved_searches_new_results_alter(array &$results, SearchApiSavedSearch $search) {
  208. // Remove all results with an ID that is a multiple of 6.
  209. foreach ($results as $id => $result) {
  210. // Use is_scalar() to make sure we only remove loaded items that would be
  211. // sent to the user.
  212. if (!is_scalar($result) && $id % 6 == 0) {
  213. unset($results[$id]);
  214. }
  215. }
  216. }
  217. /**
  218. * Alters the name assigned to a newly created saved search.
  219. *
  220. * @param string $name
  221. * The suggested name of the saved search. Likely the search term, or
  222. * the translated string "Saved search".
  223. * @param array $query
  224. * An associative array with the following keys:
  225. * - index_id: The machine name of the index the search was run on.
  226. * - keys: The parsed search keys.
  227. * - original_keys: The keys as entered by the user.
  228. * - fields: The fulltext fields searched by the query.
  229. * - filters: An array of filters set for the query, as returned by
  230. * SearchApiQueryFilterInterface::getFilters().
  231. * - options: All options set on the query.
  232. */
  233. function hook_search_api_saved_search_create_name_alter(&$name, array $query) {
  234. $name = 'foo';
  235. }
  236. /**
  237. * @} End of "addtogroup hooks".
  238. */