123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- <?php
- /**
- * @file
- * Adds autocomplete capabilities for Search API searches.
- */
- // Include the files with the module-specific implementations.
- require_once('search_api_autocomplete.search_api_page.inc');
- require_once('search_api_autocomplete.search_api_views.inc');
- /**
- * Implements hook_search_api_autocomplete_types().
- *
- * Adds search types for search pages and views. The actual implementations lie
- * in the above include files.
- */
- function search_api_autocomplete_search_api_autocomplete_types() {
- $types = array();
- if (module_exists('search_api_page')) {
- $types['search_api_page'] = array(
- 'name' => t('Search pages'),
- 'description' => t('Searches provided by the <em>Search pages</em> module.'),
- 'list searches' => 'search_api_autocomplete_pages_searches',
- 'create query' => 'search_api_autocomplete_pages_query',
- );
- }
- if (module_exists('search_api_views')) {
- $types['search_api_views'] = array(
- 'name' => t('Search views'),
- 'description' => t('Searches provided by the <em>Search views</em> module.'),
- 'list searches' => 'search_api_autocomplete_views_searches',
- 'create query' => 'search_api_autocomplete_views_query',
- 'config form' => 'search_api_autocomplete_views_config_form',
- );
- }
- return $types;
- }
- /**
- * Implements hook_menu().
- */
- function search_api_autocomplete_menu() {
- // Autocompletion path
- $items['search_api_autocomplete/%search_api_autocomplete_search'] = array(
- 'title' => 'Search API autocomplete',
- 'page callback' => 'search_api_autocomplete_autocomplete',
- 'page arguments' => array(1),
- 'access callback' => 'search_api_autocomplete_access',
- 'access arguments' => array(1),
- 'type' => MENU_CALLBACK,
- 'file' => 'search_api_autocomplete.pages.inc',
- );
- // Admin UI
- $items['admin/config/search/search_api/index/%search_api_index/autocomplete'] = array(
- 'title' => 'Autocomplete',
- 'description' => 'Add autocompletion to searches for this index.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('search_api_autocomplete_admin_overview', 5),
- 'access arguments' => array('administer search_api'),
- 'weight' => -1,
- 'type' => MENU_LOCAL_TASK,
- 'context' => MENU_CONTEXT_INLINE | MENU_CONTEXT_PAGE,
- 'file' => 'search_api_autocomplete.admin.inc',
- );
- $items['admin/config/search/search_api/index/%/autocomplete/%search_api_autocomplete_search/edit'] = array(
- 'title' => 'Edit autocompletion settings',
- 'description' => 'Edit the autocompletion settings of a search.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('search_api_autocomplete_admin_search_edit', 7),
- 'access arguments' => array('administer search_api'),
- 'file' => 'search_api_autocomplete.admin.inc',
- );
- $items['admin/config/search/search_api/index/%/autocomplete/%search_api_autocomplete_search/delete'] = array(
- 'title' => 'Delete autocompletion settings',
- 'description' => 'Delete the autocompletion settings of a search.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('search_api_autocomplete_admin_search_delete', 7),
- 'access arguments' => array('administer search_api'),
- 'file' => 'search_api_autocomplete.admin.inc',
- );
- return $items;
- }
- /**
- * Implements hook_theme().
- */
- function search_api_autocomplete_theme() {
- $themes['search_api_autocomplete_suggestion'] = array(
- 'variables' => array(
- 'prefix' => NULL,
- 'suggestion_prefix' => '',
- 'user_input' => '',
- 'suggestion_suffix' => '',
- 'results' => NULL,
- ),
- 'file' => 'search_api_autocomplete.pages.inc',
- );
- return $themes;
- }
- /**
- * Implements hook_entity_info().
- */
- function search_api_autocomplete_entity_info() {
- $info['search_api_autocomplete_search'] = array(
- 'label' => t('Autocomplete search'),
- 'controller class' => 'EntityAPIControllerExportable',
- 'entity class' => 'SearchApiAutocompleteSearch',
- 'base table' => 'search_api_autocomplete_search',
- 'uri callback' => 'search_api_autocomplete_search_url',
- 'module' => 'search_api_autocomplete',
- 'exportable' => TRUE,
- 'entity keys' => array(
- 'id' => 'id',
- 'name' => 'machine_name',
- 'label' => 'name',
- ),
- );
- return $info;
- }
- /**
- * Implements hook_permission().
- */
- function search_api_autocomplete_permission() {
- $perms = array();
- foreach (search_api_autocomplete_search_load_multiple() as $id => $search) {
- $perms['use search_api_autocomplete for ' . $id] = array(
- 'title' => t('Use autocomplete for the %search search', array('%search' => $search->name)),
- );
- }
- return $perms;
- }
- /**
- * Access callback for search autocompletion.
- *
- * @param $search
- * The autocomplete search which is being accessed.
- * @param $account
- * (optional) The account to check, if not given use currently logged in user.
- *
- * @return
- * TRUE, if the search is enabled, supports autocompletion and the user has
- * the necessary permission. FALSE otherwise.
- */
- function search_api_autocomplete_access(SearchApiAutocompleteSearch $search, $account = NULL) {
- return $search->enabled && user_access('use search_api_autocomplete for ' . $search->machine_name, $account) && $search->supportsAutocompletion();
- }
- /**
- * Implements hook_search_api_index_delete().
- */
- function search_api_autocomplete_search_api_index_delete(SearchApiIndex $index) {
- if (!$index->hasStatus(ENTITY_IN_CODE)) {
- $ids = db_query('SELECT id FROM {search_api_autocomplete_search} WHERE index_id = :id',
- array(':id' => $index->machine_name))->fetchCol();
- if ($ids) {
- entity_delete_multiple('search_api_autocomplete_search', $ids);
- }
- }
- }
- /**
- * Get information about all search types, or a specific one.
- *
- * @param $type
- * (optional) The name of a type.
- *
- * @return
- * If $type was not given, an array containing information about all search
- * types. Otherwise, either information about the specified type, or NULL if
- * the type is not known.
- *
- * @see hook_search_api_autocomplete_types()
- */
- function search_api_autocomplete_get_types($type = NULL) {
- $types = &drupal_static(__FUNCTION__);
- if (!isset($types)) {
- $types = module_invoke_all('search_api_autocomplete_types');
- }
- if (isset($type)) {
- return isset($types[$type]) ? $types[$type] : NULL;
- }
- return $types;
- }
- /**
- * Loads an autocomplete search entity.
- *
- * @param $id
- * Either the ID or machine name of an autocomplete search.
- * @param $reset
- * Whether to reset the internal cache.
- *
- * @return SearchApiAutocompleteSearch
- * The specified autocomplete search entity, or FALSE if it doesn't exist.
- */
- function search_api_autocomplete_search_load($id, $reset = FALSE) {
- $ret = search_api_autocomplete_search_load_multiple(array($id), array(), $reset);
- return $ret ? reset($ret) : FALSE;
- }
- /**
- * Loads autocomplete search entities.
- *
- * @param $ids
- * An array of IDs or machine names, or FALSE to load all searches.
- * @param $conditions
- * An associative array of conditions on the {search_api_autocomplete_search}
- * table.
- * @param $reset
- * Whether to reset the internal cache.
- *
- * @return array
- * An array of all autocomplete search entities that meet the criteria.
- *
- * @see entity_load()
- */
- function search_api_autocomplete_search_load_multiple($ids = FALSE, array $conditions = array(), $reset = FALSE) {
- return entity_load_multiple_by_name('search_api_autocomplete_search', $ids, $conditions, $reset);
- }
|