? sites/localhost
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.369
diff -u -p -r1.369 system.module
--- modules/system/system.module	8 Sep 2006 23:13:00 -0000	1.369
+++ modules/system/system.module	16 Sep 2006 00:37:19 -0000
@@ -103,6 +103,13 @@ function system_menu($may_cache) {
 
     $access = user_access('administer site configuration');
 
+    $items[] = array(
+      'path' => 'admin/dashboard',
+      'title' => t('dashboard'),
+      'callback' => 'system_dashboard',
+      'access' => $access,
+      'weight' => -15,
+    );
     $items[] = array('path' => 'admin', 'title' => t('administer'),
       'access' => user_access('access administration pages'),
       'callback' => 'system_main_admin_page',
@@ -1820,3 +1827,49 @@ function theme_admin_block_content($cont
   }
   return $output;
 }
+
+
+/**
+ * Menu callback; prints a listing of admin tasks for each installed module.
+ */
+function system_dashboard() {
+  $modules = module_list(); 
+  $menu_items = array();
+  foreach ($modules as $module) {
+    $admin_tasks = array();
+    // Check for permissions.
+    if (module_invoke($module, 'perm')) {
+      $admin_tasks[] = l(t('configure permissions'), 'admin/user/access');
+    }
+    // Check for menu items marked as admin tasks.
+    $items = module_invoke($module, 'menu', TRUE);
+    foreach ($items as $item) {
+      if (isset($item['admin task'])) {
+        $admin_tasks[] = l($item['admin title'], $item['path']);
+      }
+    }
+    // Check for help links.
+    if (module_invoke($module, 'help', "admin/help#$module")) {
+      $admin_tasks[] = l(t('get help'), "admin/help/$module");
+    }
+    $menu_items[$module] = $admin_tasks;
+  }
+  return theme('system_dashboard', $menu_items);
+}
+
+/**
+ * Theme output of the dashboard page.
+ */
+function theme_system_dashboard($menu_items) {
+  $output = '';
+  foreach ($menu_items as $module => $items) {
+    $output .= "<h3>$module</h3>";
+    if (count($items)) {
+      $output .= theme('item_list', $items);
+    }
+    else {
+      $output .= t('No tasks found.');
+    }
+  }
+  return $output;
+}
Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.316
diff -u -p -r1.316 taxonomy.module
--- modules/taxonomy/taxonomy.module	11 Sep 2006 08:18:24 -0000	1.316
+++ modules/taxonomy/taxonomy.module	16 Sep 2006 00:37:20 -0000
@@ -66,7 +66,10 @@ function taxonomy_menu($may_cache) {
       'title' => t('categories'),
       'description' => t('Create vocabularies and terms to categorize your content.'),
       'callback' => 'taxonomy_overview_vocabularies',
-      'access' => user_access('administer taxonomy'));
+      'access' => user_access('administer taxonomy'),
+      'admin task' => TRUE,
+      'admin title' => t('create and edit categories'),
+    );
 
     $items[] = array('path' => 'admin/content/taxonomy/list',
       'title' => t('list'),
Index: modules/tracker/tracker.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/tracker/tracker.module,v
retrieving revision 1.136
diff -u -p -r1.136 tracker.module
--- modules/tracker/tracker.module	31 Aug 2006 20:22:36 -0000	1.136
+++ modules/tracker/tracker.module	16 Sep 2006 00:37:20 -0000
@@ -36,7 +36,7 @@ function tracker_menu($may_cache) {
   if ($may_cache) {
     $items[] = array('path' => 'tracker', 'title' => t('recent posts'),
       'callback' => 'tracker_page', 'access' => user_access('access content'),
-      'weight' => 1);
+      'weight' => 1, 'admin task' => TRUE, 'admin title' => t('view recent posts'));
 
     if ($user->uid) {
       $items[] = array('path' => 'tracker/all', 'title' => t('all recent posts'),
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.681
diff -u -p -r1.681 user.module
--- modules/user/user.module	11 Sep 2006 09:05:46 -0000	1.681
+++ modules/user/user.module	16 Sep 2006 00:37:21 -0000
@@ -690,7 +690,8 @@ function user_menu($may_cache) {
 
   if ($may_cache) {
     $items[] = array('path' => 'user', 'title' => t('user account'),
-      'callback' => 'drupal_get_form', 'callback arguments' => array('user_login'), 'access' => TRUE, 'type' => MENU_CALLBACK);
+      'callback' => 'drupal_get_form', 'callback arguments' => array('user_login'), 'access' => TRUE, 'type' => MENU_CALLBACK,
+      'admin task' => TRUE, 'admin title' => t('view account details'));
 
     $items[] = array('path' => 'user/autocomplete', 'title' => t('user autocomplete'),
       'callback' => 'user_autocomplete', 'access' => $view_access, 'type' => MENU_CALLBACK);
@@ -717,7 +718,9 @@ function user_menu($may_cache) {
     );
     $items[] = array('path' => 'admin/user/user', 'title' => t('users'),
       'description' => t('List, add, and edit users.'),
-      'callback' => 'user_admin', 'callback arguments' => array('list'), 'access' => $admin_access);
+      'callback' => 'user_admin', 'callback arguments' => array('list'), 'access' => $admin_access,
+      'admin task' => TRUE, 'admin title' => t('administer users'),
+    );
     $items[] = array('path' => 'admin/user/user/list', 'title' => t('list'),
       'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10);
     $items[] = array('path' => 'admin/user/user/create', 'title' => t('add user'),
@@ -725,7 +728,9 @@ function user_menu($may_cache) {
       'type' => MENU_LOCAL_TASK);
     $items[] = array('path' => 'admin/user/settings', 'title' => t('user settings'),
       'description' => t('Configure default behavior of users, including registration requirements, e-mails, and user pictures.'),
-      'callback' => 'drupal_get_form', 'callback arguments' => array('user_admin_settings'));
+      'callback' => 'drupal_get_form', 'callback arguments' => array('user_admin_settings'),
+      'admin task' => TRUE, 'admin title' => t('configure user settings'),
+    );
 
     // Admin access pages
     $items[] = array('path' => 'admin/user/access', 'title' => t('access control'),
@@ -734,13 +739,14 @@ function user_menu($may_cache) {
     $items[] = array('path' => 'admin/user/roles', 'title' => t('roles'),
       'description' => t('List, edit, or add user roles.'),
       'callback' => 'drupal_get_form', 'callback arguments' => array('user_admin_new_role'), 'access' => $access_access,
-      'type' => MENU_NORMAL_ITEM);
+      'type' => MENU_NORMAL_ITEM, 'admin task' => TRUE, 'admin title' => t('configure roles'),
+    );
     $items[] = array('path' => 'admin/user/roles/edit', 'title' => t('edit role'),
        'callback' => 'drupal_get_form', 'callback arguments' => array('user_admin_role'), 'access' => $access_access,
       'type' => MENU_CALLBACK);
     $items[] = array('path' => 'admin/user/rules', 'title' => t('access rules'),
       'description' => t('List and create rules to disallow usernames, e-mail addresses, and IP addresses.'),
-      'callback' => 'user_admin_access', 'access' => $access_access);
+      'callback' => 'user_admin_access', 'access' => $access_access, 'admin task' => TRUE, 'admin title' => t('configure account rules'));
     $items[] = array('path' => 'admin/user/rules/list', 'title' => t('list'),
       'access' => $access_access, 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10);
     $items[] = array('path' => 'admin/user/rules/add', 'title' => t('add rule'),
@@ -760,7 +766,8 @@ function user_menu($may_cache) {
       $items[] = array('path' => 'admin/user/search', 'title' => t('search users'),
         'description' => t('Search users by name.'),
         'callback' => 'user_admin', 'callback arguments' => array('search'), 'access' => $admin_access,
-        'type' => MENU_NORMAL_ITEM);
+        'type' => MENU_NORMAL_ITEM, 'admin task' => TRUE, 'admin title' => t('search users'),
+      );
     }
 
     // Your personal page
Index: modules/watchdog/watchdog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/watchdog/watchdog.module,v
retrieving revision 1.157
diff -u -p -r1.157 watchdog.module
--- modules/watchdog/watchdog.module	8 Sep 2006 23:07:25 -0000	1.157
+++ modules/watchdog/watchdog.module	16 Sep 2006 00:37:21 -0000
@@ -43,7 +43,7 @@ function watchdog_menu($may_cache) {
     $items[] = array('path' => 'admin/logs/watchdog', 'title' => t('recent log entries'),
       'description' => t('View events that have recently been logged.'),
       'callback' => 'watchdog_overview',
-      'weight' => -1);
+      'weight' => -1, 'admin task' => TRUE, 'admin title' => t('view logs'));
     $items[] = array('path' => 'admin/logs/page-not-found', 'title' => t("top 'page not found' errors"),
       'description' => t("View 'page not found' errors (404s)."),
       'callback' => 'watchdog_top',
