Using what's there: X-ray initially listed invoked hooks from Drupal's cache

  • X-ray's initial way of showing hooks called was to pull the data from Drupal's cache. Here is the original version of X-ray module's hook invocation / implementation page. The code loaded the information directly from one of Drupal's cache tables.

     * Table of available hooks and the modules implementing them, if any.
    function xray_hook_implementations_page() {
    $build = array();
    $build['intro'] = array(
    '#markup' => t("This table shows Drupal hooks present in your site's code and their implementing modules.  <em>Note:  Only hook invocations involving <a href="@module-implements">module_implements()</a>, which is used by <a href="@module-invoke-all">module_invoke_all()</a> but not by <a href="@module-invoke">module_invoke()</a> for example, are captured here.</em>  A list of all properly documented hooks in Drupal core (marked by <tt>@addtogroup hooks</tt> in code or api.php files) is online at <a href="@module-inc-hooks">Drupal API Hooks page</a>.",
    '@module-implements' => '', '@module-invoke-all' => '', '@module-invoke' => '', '@module-inc-hooks' => ''))
    debug(cache_get('hook_info', 'cache_bootstrap'));
    // @TODO - fix - foreach ->data throws an error if run immediately after cache clear.
    $implementations = cache_get('module_implements', 'cache_bootstrap');
    $header = array(t('Hook'), t('Implementing modules'));
    $rows = array();
      foreach (
    $implementations->data as $hook => $keys_modules) {
        if (empty(
    $keys_modules)) {
    $modules_text = t('<em>None</em>');
        else {
    $modules = array_keys($keys_modules);
    $modules_text = theme('item_list', array('items' => $modules));
    $rows[] = array($hook, $modules_text);
    $build['hook_table'] = array(
    '#theme' => 'table__xray__hook_implementations',
    '#header' => $header,
    '#rows' => $rows,
    '#attributes' => array('id' => 'xray-hook-implementations'),
    // Return the renderable array that we've built for the page.
    return $build;