You are here

function express_dashboards_menu in Express 7.2

Implements hook_menu().

Add menu items for dashboards, set default dashboard.

File

modules/custom/express_dashboards/express_dashboards.module, line 8

Code

function express_dashboards_menu() {
  $items = array();
  $weights = array();

  // Get all hook_express_dashboard functions.
  if ($cache = cache_get('express_dashboards')) {
    $dashboards = $cache->data;
  }
  else {
    $dashboards = module_invoke_all('express_dashboard', $variables = NULL);

    // Save this for 30 days - it should only be cleared on a code update
    cache_set('express_dashboards', $dashboards, 'cache', time() + 60 * 60 * 24 * 30);
  }

  //$dashboards = module_invoke_all('express_dashboard', $variables = NULL);

  // Get default dashbaord
  $default_dashboard = variable_get('express_dashboard_default', NULL);

  // Loop through dashboards to add menu items
  foreach ($dashboards as $key => $dashboard) {
    $path = 'admin/dashboard/' . $key;
    $weight = isset($dashboard['weight']) ? $dashboard['weight'] : 0;
    $items[$path] = array(
      'title' => $dashboard['title'],
      'page callback' => 'express_dashboards_dashboard_output',
      'page arguments' => array(
        $dashboard['callback'],
        $key,
      ),
      'access arguments' => $dashboard['access arguments'],
      'type' => MENU_LOCAL_TASK,
      'weight' => $weight,
    );

    // Get dashbaord weights in case no dafault is set
    $weights[$key] = $weight;

    // if this is the default dashboard, add as default task.
    if (isset($default_dashboard) && $key == $default_dashboard) {
      $items[$path]['type'] = MENU_DEFAULT_LOCAL_TASK;
      $items['admin/dashboard'] = array(
        'title' => 'Dashboard',
        'page callback' => 'express_dashboards_dashboard_output',
        'page arguments' => array(
          $dashboard['callback'],
          $key,
        ),
        'access arguments' => $dashboard['access arguments'],
        'weight' => -500,
      );
    }
  }

  // If no default dashboard, set default to lowest weight dashboard.
  if (!isset($default_dashboard)) {
    asort($weights);
    $key = key($weights);
    $path = 'admin/dashboard/' . $key;
    $items[$path]['type'] = MENU_DEFAULT_LOCAL_TASK;
    $items['admin/dashboard'] = array(
      'title' => 'Dashboard',
      'page callback' => 'express_dashboards_dashboard_output',
      'page arguments' => array(
        $dashboards[$key]['callback'],
        $key,
      ),
      'access arguments' => $dashboards[$key]['access arguments'],
      'weight' => -500,
    );
  }
  return $items;
}