You are here

function module_hook_info in Drupal 7

Retrieves a list of hooks that are declared through hook_hook_info().

Return value

An associative array whose keys are hook names and whose values are an associative array containing a group name. The structure of the array is the same as the return value of hook_hook_info().

See also

hook_hook_info()

Related topics

2 calls to module_hook_info()
module_hook in includes/module.inc
Determines whether a module implements a hook.
module_implements in includes/module.inc
Determines which modules are implementing a hook.
1 string reference to 'module_hook_info'
module_implements in includes/module.inc
Determines which modules are implementing a hook.

File

includes/module.inc, line 850
API for loading and interacting with Drupal modules.

Code

function module_hook_info() {

  // This function is indirectly invoked from bootstrap_invoke_all(), in which
  // case common.inc, subsystems, and modules are not loaded yet, so it does not
  // make sense to support hook groups resp. lazy-loaded include files prior to
  // full bootstrap.
  if (drupal_bootstrap(NULL, FALSE) != DRUPAL_BOOTSTRAP_FULL) {
    return array();
  }
  $hook_info =& drupal_static(__FUNCTION__);
  if (!isset($hook_info)) {
    $hook_info = array();
    $cache = cache_get('hook_info', 'cache_bootstrap');
    if ($cache === FALSE) {

      // Rebuild the cache and save it.
      // We can't use module_invoke_all() here or it would cause an infinite
      // loop.
      foreach (module_list() as $module) {
        $function = $module . '_hook_info';
        if (function_exists($function)) {
          $result = $function();
          if (isset($result) && is_array($result)) {
            $hook_info = array_merge_recursive($hook_info, $result);
          }
        }
      }

      // We can't use drupal_alter() for the same reason as above.
      foreach (module_list() as $module) {
        $function = $module . '_hook_info_alter';
        if (function_exists($function)) {
          $function($hook_info);
        }
      }
      cache_set('hook_info', $hook_info, 'cache_bootstrap');
    }
    else {
      $hook_info = $cache->data;
    }
  }
  return $hook_info;
}