Index: includes/module.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/module.inc,v retrieving revision 1.68 diff -u -r1.68 module.inc --- includes/module.inc 29 Jul 2005 07:09:30 -0000 1.68 +++ includes/module.inc 22 Aug 2005 22:37:21 -0000 @@ -162,10 +162,28 @@ $module = array_shift($args); $hook = array_shift($args); $function = $module .'_'. $hook; - if (module_hook($module, $hook)) { - return call_user_func_array($function, $args); + $override = FALSE; + // Determine if an override function has been defined, and if so execute it. + foreach (module_list() as $override_module) { + if (module_hook($override_module, $function . '_override')) { + $return = call_user_func_array($override_module . '_' . $function . '_override', $args); + $override = TRUE; + break; + } + } + // If not overridden, execute the requested module hook. + if (!$override && module_hook($module, $hook)) { + $return = call_user_func_array($function, $args); + } + // Execute any registered hook extensions. + foreach (module_list() as $extension_module) { + if (module_hook($extension_module, $function . '_extension')) { + call_user_func_array($extension_module . '_' . $function . '_extension', $args); + } } + return $return; } + /** * Invoke a hook in all enabled modules that implement it. *