summaryrefslogtreecommitdiff
path: root/modules/search/search.module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/search/search.module')
-rw-r--r--modules/search/search.module64
1 files changed, 45 insertions, 19 deletions
diff --git a/modules/search/search.module b/modules/search/search.module
index e80eddacc..8c6e1933b 100644
--- a/modules/search/search.module
+++ b/modules/search/search.module
@@ -218,25 +218,45 @@ function search_menu() {
'file path' => drupal_get_path('module', 'dblog'),
'file' => 'dblog.admin.inc',
);
-
- foreach (module_implements('search') as $module) {
- $items['search/' . $module . '/%menu_tail'] = array(
- 'title callback' => 'module_invoke',
- 'title arguments' => array($module, 'search', 'name', TRUE),
- 'page callback' => 'search_view',
- 'page arguments' => array($module),
- 'access callback' => '_search_menu',
- 'access arguments' => array($module),
- 'type' => MENU_LOCAL_TASK,
- 'parent' => 'search',
- 'file' => 'search.pages.inc',
- );
+ drupal_static_reset('search_get_info');
+ $search_hooks = search_get_info();
+ foreach(variable_get('search_active_modules', array('node', 'user')) as $module) {
+ if (isset($search_hooks[$module])) {
+ $items['search/' . $search_hooks[$module]['path'] . '/%menu_tail'] = array(
+ 'title' => $search_hooks[$module]['title'],
+ 'page callback' => 'search_view',
+ 'page arguments' => array($module),
+ 'access callback' => '_search_menu_access',
+ 'access arguments' => array($module),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.pages.inc',
+ );
+ }
}
return $items;
}
-function _search_menu($name) {
- return user_access('search content') && module_invoke($name, 'search', 'name');
+/**
+ * Get information about all available search hooks.
+ */
+function search_get_info() {
+ $search_hooks = &drupal_static(__FUNCTION__);
+
+ if (!isset($search_hooks)) {
+ foreach (module_implements('search_info') as $module) {
+ $search_hooks[$module] = call_user_func($module . '_search_info');
+ // Use module name as the default.
+ $search_hooks[$module] += array('title' => $module, 'path' => $module);
+ }
+ }
+ return $search_hooks;
+}
+
+/**
+ * Access callback for search tabs.
+ */
+function _search_menu_access($name) {
+ return user_access('search content') && (!function_exists($name . '_search_access') || module_invoke($name, 'search_access'));
}
/**
@@ -297,8 +317,10 @@ function search_cron() {
// to date.
register_shutdown_function('search_update_totals');
- // Update word index
- module_invoke_all('update_index');
+ foreach(variable_get('search_active_modules', array('node', 'user')) as $module) {
+ // Update word index
+ module_invoke($module, 'update_index');
+ }
}
/**
@@ -693,6 +715,10 @@ function search_touch_node($nid) {
->execute();
}
+function search_touch_data($type, $sid) {
+ db_query("UPDATE {search_dataset} SET reindex = :time WHERE sid = :sid AND type = :type", array(':time' => REQUEST_TIME, ':sid' => $sid, ':type' => $type));
+}
+
/**
* Implement hook_node_update_index().
*/
@@ -969,8 +995,8 @@ function template_preprocess_search_block_form(&$variables) {
function search_data($keys = NULL, $type = 'node') {
if (isset($keys)) {
- if (module_hook($type, 'search')) {
- $results = module_invoke($type, 'search', 'search', $keys);
+ if (module_hook($type, 'search_execute')) {
+ $results = module_invoke($type, 'search_execute', $keys);
if (isset($results) && is_array($results) && count($results)) {
if (module_hook($type, 'search_page')) {
return module_invoke($type, 'search_page', $results);