1 module.inc module_hook_info()

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

File

core/includes/module.inc, line 842
API for loading and interacting with Backdrop 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 (backdrop_bootstrap(NULL, FALSE) != BACKDROP_BOOTSTRAP_FULL) {
    return array();
  }
  $hook_info = &backdrop_static(__FUNCTION__);

  if (!isset($hook_info)) {
    $hook_info = array();
    $cache = cache('bootstrap')->get('hook_info');
    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 backdrop_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('bootstrap')->set('hook_info', $hook_info);
    }
    else {
      $hook_info = $cache->data;
    }
  }

  return $hook_info;
}