Index: admin_menu.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/admin_menu/admin_menu.inc,v
retrieving revision 1.1.4.6
diff -u -p -r1.1.4.6 admin_menu.inc
--- admin_menu.inc	9 Dec 2007 01:02:40 -0000	1.1.4.6
+++ admin_menu.inc	9 Dec 2007 01:03:30 -0000
@@ -149,22 +149,57 @@ function admin_menu_adjust_items(&$_admi
     admin_menu_add_item($_admin_menu, $mid_icon, array('title' => t('Run updates'), 'path' => $base_url .'/update.php', 'weight' => 50));
   }
   
+  // Move some core settings into a 'System' category.
+  $mid_settings = $_admin_menu['index']['admin/settings'];
+  if (user_access('administer site configuration')) {
+    $core_settings = array('image-toolkit', 'file-system', 'date-time', 'error-reporting', 'performance', 'clean-urls', 'admin', 'site-maintenance', 'site-information');
+    $mid_system_settings = admin_menu_add_item($_admin_menu, $mid_settings, array('title' => t('System'), 'path' => 'admin/settings'));
+    foreach ($core_settings as $path) {
+      $mid_core_setting = $_admin_menu['index']['admin/settings/'. $path];
+      admin_menu_move_item($_admin_menu, $mid_core_setting, $mid_system_settings);
+    }
+  }
+  
+  // Build a list of contrib modules and move their settings into corresponding
+  // package name category.
+  $modules = array();
+  $package_mids = array();
+  foreach (module_list(FALSE, FALSE, TRUE) as $module) {
+    $info = _module_parse_info_file(drupal_get_path('module', $module) .'/'. $module .'.info');
+    // Skip core modules.
+    if (isset($info['package']) && substr($info['package'], 0, 4) == 'Core') {
+      continue;
+    }
+    // Save module info for issue queue links.
+    $modules[$module] = $info;
+    // Access check.
+    $path = 'admin/settings/'. $module;
+    if (!isset($_admin_menu['index'][$path]) || !isset($_admin_menu[$_admin_menu['index'][$path]]['access'])) {
+      continue;
+    }
+    // Move module settings into package category, if defined.
+    if (isset($info['package'])) {
+      $mid_module_settings = $_admin_menu['index'][$path];
+      $package_item = array('title' => $info['package'], 'path' => 'admin/settings');
+      if (!isset($package_mids[$info['package']])) {
+        $package_mids[$info['package']] = admin_menu_add_item($_admin_menu, $mid_settings, $package_item);
+      }
+      admin_menu_move_item($_admin_menu, $mid_module_settings, $package_mids[$info['package']]);
+    }
+  }
+
   // Add links to drupal.org.
   if (user_access('display drupal links')) {
     $mid_drupal = admin_menu_add_item($_admin_menu, $mid_icon, array('title' => t('Drupal.org'), 'path' => 'http://drupal.org', 'weight' => 100));
-    admin_menu_add_item($_admin_menu, $mid_drupal, array('title' => t('Drupal issue queue'), 'path' => 'http://drupal.org/project/issues/drupal'));
+    admin_menu_add_item($_admin_menu, $mid_drupal, array('title' => t('Drupal issue queue'), 'path' => 'http://drupal.org/project/issues/drupal', 'weight' => -10));
     
     // Add links to project issue queues.
-    foreach (module_list(FALSE, FALSE, TRUE) as $module) {
-      $info = _module_parse_info_file(drupal_get_path('module', $module) .'/'. $module .'.info');
-      if (isset($info['project']) && $info['project'] == 'drupal') {
-        continue;
-      }
+    foreach ($modules as $module => $info) {
       $url = 'http://drupal.org/project/issues/'. $module;
       // Filter project versions via query string not yet supported.
       // @see http://drupal.org/node/97569
       // $url .= !empty($info['version']) ? '/'. $info['version'] : '';
-      admin_menu_add_item($_admin_menu, $mid_drupal, array('title' => t('@title issue queue', array('@title' => $info['name'])), 'path' => $url));
+      admin_menu_add_item($_admin_menu, $mid_drupal, array('title' => t('@title issue queue', array('@title' => $info['name'])), 'path' => $url, 'weight' => 0));
     }
   }
   
