You are here

function admin_menu_alter in Admin 6

Same name and namespace in other branches
  1. 6.2 admin.module \admin_menu_alter()
  2. 7.2 admin.module \admin_menu_alter()

Implementation of hook_menu_alter().

File

./admin.module, line 103

Code

function admin_menu_alter(&$items) {
  foreach ($items as $path => $item) {
    $args = explode('/', $path);

    // Move all admin/* items to admin menu links.
    if ($args && $args[0] === 'admin') {
      $items[$path]['menu_name'] = 'admin';
    }

    // Smarter access callback for poorly checked landing pages
    if (!empty($item['access arguments']) && !empty($item['page callback']) && $item['access arguments'] === array(
      'access administration pages',
    ) && in_array($item['page callback'], array(
      'system_admin_menu_block_page',
      'system_settings_overview',
    ))) {
      $items[$path]['access callback'] = 'admin_landing_page_access';
      $items[$path]['access arguments'] = array(
        $path,
      );
    }
  }

  // Move admin theme settings to theme local task.
  $items['admin/build/themes/admin'] = $items['admin/settings/admin'];
  $items['admin/build/themes/admin']['type'] = MENU_LOCAL_TASK;
  $items['admin/build/themes/admin']['weight'] = 10;
  unset($items['admin/settings/admin']);

  // Add in a routing item for admin/content/add
  $items['admin/content/add'] = $items['node/add'];
  $items['admin/content/add']['page callback'] = 'drupal_goto';
  $items['admin/content/add']['page arguments'] = array(
    'node/add',
  );
  $items['admin/content/add']['description'] = 'Create new content on your site.';
  $items['admin/content/add']['weight'] = -20;
  $items['admin/content/node']['weight'] = -19;
  $items = array_merge($items, admin_menu_clone_items('admin/build/themes', 'admin/themes', $items));
  $items = array_merge($items, admin_menu_clone_items('admin/build/modules', 'admin/modules', $items));

  // Expose a small subset of the most usable core admin pages.
  // Other pages can be exposed simply by adding ['options']['admin'] = TRUE
  // to items in hook_menu().
  $include = array(
    'admin/content' => 'Content',
    'admin/content/add' => 'Add',
    'admin/content/node' => 'Edit',
    'admin/build' => 'Structure',
    'admin/build/views' => '',
    'admin/build/block' => '',
    'admin/build/menu' => '',
    'admin/user' => 'People',
    'admin/user/permissions' => '',
    'admin/user/user' => '',
    'admin/settings' => 'Configuration',
    'admin/settings/date-time' => '',
    'admin/settings/filters' => '',
    'admin/settings/language' => '',
    'admin/settings/performance' => '',
    'admin/settings/site-information' => '',
    'admin/themes' => 'Appearance',
    'admin/modules' => '',
  );
  foreach ($include as $path => $title) {
    if (!empty($items[$path])) {
      $items[$path]['title'] = !empty($title) ? $title : $items[$path]['title'];
      $items[$path]['options']['admin'] = TRUE;
    }
  }
  cache_clear_all('admin_paths', 'cache');
}