| 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);}
 |