function dashboard_page_build

Implements hook_page_build().

Display dashboard blocks in the main content region.

File

modules/dashboard/dashboard.module, line 139

Code

function dashboard_page_build(&$page) {
    global $theme_key;
    if (dashboard_is_visible()) {
        $block_info = array();
        // Create a wrapper for the dashboard itself, then insert each dashboard
        // region into it.
        $page['content']['dashboard'] = array(
            '#theme_wrappers' => array(
                'dashboard',
            ),
        );
        foreach (dashboard_regions() as $region) {
            // Do not show dashboard blocks that are disabled.
            if ($region == 'dashboard_inactive') {
                continue;
            }
            // Insert regions even when they are empty, so that they will be
            // displayed when the dashboard is being configured.
            $page['content']['dashboard'][$region] = !empty($page[$region]) ? $page[$region] : array();
            $page['content']['dashboard'][$region]['#dashboard_region'] = $region;
            // Allow each dashboard region to be themed differently, or fall back on
            // the generic theme wrapper function for dashboard regions.
            $page['content']['dashboard'][$region]['#theme_wrappers'][] = array(
                $region,
                'dashboard_region',
            );
            unset($page[$region]);
            $blocks_found = array();
            foreach ($page['content']['dashboard'][$region] as $item) {
                if (isset($item['#theme_wrappers']) && is_array($item['#theme_wrappers']) && in_array('block', $item['#theme_wrappers'])) {
                    // If this item is a block, ensure it has a subject.
                    if (empty($item['#block']->subject)) {
                        // Locally cache info data for the object for all blocks, in case
                        // we find a block similarly missing title from the same module.
                        if (!isset($block_info[$item['#block']->module])) {
                            $block_info[$item['#block']->module] = module_invoke($item['#block']->module, 'block_info');
                        }
                        $item['#block']->subject = $block_info[$item['#block']->module][$item['#block']->delta]['info'];
                    }
                    $blocks_found[$item['#block']->module . '_' . $item['#block']->delta] = TRUE;
                }
            }
            // Find blocks which were not yet displayed on the page (were empty), and
            // add placeholder items in their place for rendering.
            $block_list = db_select('block')->condition('theme', $theme_key)
                ->condition('status', 1)
                ->condition('region', $region)
                ->fields('block')
                ->execute();
            foreach ($block_list as $block) {
                if (!isset($blocks_found[$block->module . '_' . $block->delta])) {
                    $block->enabled = $block->page_match = TRUE;
                    $block->content = array(
                        '#markup' => '<div class="dashboard-block-empty">(empty)</div>',
                    );
                    if (!isset($block_info[$block->module])) {
                        $block_info[$block->module] = module_invoke($block->module, 'block_info');
                    }
                    $block->subject = t('@title', array(
                        '@title' => $block_info[$block->module][$block->delta]['info'],
                    ));
                    $block_render = array(
                        $block->module . '_' . $block->delta => $block,
                    );
                    $build = _block_get_renderable_array($block_render);
                    $page['content']['dashboard'][$block->region][] = $build;
                }
            }
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.