t('Search pages'),
'description' => t('Searches provided by the Search pages 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 Search views 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);
}