You are here

function admin_menu_alter in Admin 6.2

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

Implementation of hook_menu_alter().

File

./admin.module, line 148

Code

function admin_menu_alter(&$items) {

  // Move admin theme item under ours as a local task.
  $items['admin/settings/admin/theme'] = $items['admin/settings/admin'];
  $items['admin/settings/admin/theme']['type'] = MENU_LOCAL_TASK;
  $items['admin/settings/admin/theme']['weight'] = 10;

  // Generate our own admin settings page.
  $items['admin/settings/admin'] = $items['admin/settings/admin/settings'] = array(
    'title' => 'Administration tools',
    'description' => 'Settings for site administration tools.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'admin_settings_form',
    ),
    'access callback' => 'user_access',
    'access arguments' => array(
      'administer site configuration',
    ),
    'type' => MENU_NORMAL_ITEM,
    'file' => 'admin.admin.inc',
    'module' => 'admin',
  );
  $items['admin/settings/admin/settings']['title'] = 'Settings';
  $items['admin/settings/admin/settings']['type'] = MENU_DEFAULT_LOCAL_TASK;
  $items['admin/settings/admin/rebuild'] = array(
    'title' => 'Rebuild',
    'description' => 'Wipe and rebuild the administrative menu.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'admin_settings_rebuild',
    ),
    'access callback' => 'user_access',
    'access arguments' => array(
      'administer site configuration',
    ),
    'type' => MENU_LOCAL_TASK,
    'file' => 'admin.admin.inc',
    'module' => 'admin',
    'weight' => 10,
  );
  foreach ($items as $path => $item) {
    $item['type'] = isset($item['type']) ? $item['type'] : MENU_NORMAL_ITEM;

    // Move all admin/* items to admin menu links except local tasks, callbacks.
    $args = explode('/', $path);
    if ($path === 'admin' || $item['type'] & MENU_NORMAL_ITEM && $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,
      );
    }
  }
}