Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.7
diff -u -p -r1.7 system.admin.inc
--- modules/system/system.admin.inc	29 Aug 2007 18:09:36 -0000	1.7
+++ modules/system/system.admin.inc	30 Aug 2007 02:54:47 -0000
@@ -21,28 +21,41 @@ function system_main_admin_page($arg = N
   if (system_status(TRUE)) {
     drupal_set_message(t('One or more problems were detected with your Drupal installation. Check the <a href="@status">status report</a> for more information.', array('@status' => url('admin/logs/status'))), 'error');
   }
-  $result = db_query("
-    SELECT *
-    FROM {menu_links} ml
-    INNER JOIN {menu_router} m ON ml.router_path = m.path
-    WHERE ml.link_path like 'admin/%' AND ml.link_path != 'admin/help' AND ml.depth = 2 AND ml.menu_name = 'navigation' AND hidden = 0
-    ORDER BY p1 ASC, p2 ASC, p3 ASC");
   $blocks = array();
-  while ($item = db_fetch_array($result)) {
-    _menu_link_translate($item);
-    if (!$item['access']) {
-      continue;
-    }
-    $block = $item;
-    $block['content'] = '';
-    if ($item['block_callback'] && function_exists($item['block_callback'])) {
-      $function = $item['block_callback'];
-      $block['content'] .= $function();
-    }
-    $block['content'] .= theme('admin_block_content', system_admin_menu_block($item));
-    $blocks[] = $block;
+  if ($admin = db_fetch_array(db_query("SELECT menu_name, mlid FROM {menu_links} WHERE link_path = 'admin' AND module = 'system'"))) {
+    $result = db_query("
+      SELECT m.*, ml.*
+      FROM {menu_links} ml
+      INNER JOIN {menu_router} m ON ml.router_path = m.path
+      WHERE ml.link_path != 'admin/help' AND menu_name = '%s' AND ml.plid = %d AND hidden = 0", $admin);
+    while ($item = db_fetch_array($result)) {
+      _menu_link_translate($item);
+      if (!$item['access']) {
+        continue;
+      }
+      // The link 'description' either derived from the hook_menu 'description'
+      // or entered by the user via menu module is saved as the title attribute
+      if (!empty($item['options']['attributes']['title'])) {
+        $item['description'] = $item['options']['attributes']['title'];
+      }
+      $block = $item;
+      $block['content'] = '';
+      if ($item['block_callback'] && function_exists($item['block_callback'])) {
+        $function = $item['block_callback'];
+        $block['content'] .= $function();
+      }
+      $block['content'] .= theme('admin_block_content', system_admin_menu_block($item));
+      // Prepare for sorting as in function _menu_tree_check_access().
+      $blocks[(50000 + $item['weight']) .' '. $item['title'] .' '. $item['mlid']] = $block;
+    }
+  }
+  if ($blocks) {
+    ksort($blocks);
+    return theme('admin_page', $blocks);
+  }
+  else {
+    return t('You do not have any administrative items.');
   }
-  return theme('admin_page', $blocks);
 }
 
 
@@ -123,7 +136,7 @@ function system_settings_overview() {
 
 /**
  * Form builder; This function allows selection of the theme to show in administration sections.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  */
@@ -156,7 +169,7 @@ function system_admin_theme_settings() {
 
 /**
  * Menu callback; displays a listing of all themes.
- * 
+ *
  * @ingroup forms
  * @see system_themes_form_submt().
  */
@@ -280,7 +293,7 @@ function system_themes_form_submit($form
 
 /**
  * Form builder; display theme configuration for entire site and individual themes.
- * 
+ *
  * @ingroup forms
  * @see system_theme_settings_submit().
  */
@@ -693,7 +706,7 @@ function system_modules_disable($form, $
  *   elements: the list of dependencies and the list of status
  *   form field values from the previous screen.
  * @ingroup forms
- * @see 
+ * @see
  */
 function system_modules_confirm_form($modules, $storage) {
   $form = array();
@@ -1010,7 +1023,7 @@ function system_modules_uninstall_submit
 
 /**
  * Form builder; The general site information form.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  */
@@ -1068,7 +1081,7 @@ function system_site_information_setting
 
 /**
  * Form builder; Configure error reporting settings.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  */
@@ -1115,7 +1128,7 @@ function system_logging_overview() {
 
 /**
  * Form builder; Configure site performance settings.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  */
@@ -1218,7 +1231,7 @@ function system_performance_settings() {
 
 /**
  * Form builder; Configure the site file handling.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  */
@@ -1255,7 +1268,7 @@ function system_file_system_settings() {
 
 /**
  * Form builder; Configure site image toolkit usage.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  */
@@ -1280,7 +1293,7 @@ function system_image_toolkit_settings()
 
 /**
  * Form builder; Configure how the site handles RSS feeds.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  */
@@ -1306,7 +1319,7 @@ function system_rss_feeds_settings() {
 
 /**
  * Form builder; Configure the site date and time settings.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  * @see system_date_time_settings().
@@ -1476,7 +1489,7 @@ function system_date_time_lookup() {
 
 /**
  * Form builder; Configure the site's maintenance status.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  */
@@ -1502,7 +1515,7 @@ function system_site_maintenance_setting
 
 /**
  * Form builder; Configure Clean URL settings.
- * 
+ *
  * @ingroup forms
  * @see system_settings_form().
  */
@@ -1802,7 +1815,7 @@ function theme_system_admin_by_module($m
 
 /**
  * Theme status report
- * 
+ *
  * @ingroup themeable
  */
 function theme_status_report(&$requirements) {
@@ -1837,7 +1850,7 @@ function theme_status_report(&$requireme
 
 /**
  * Theme call back for the modules form.
- * 
+ *
  * @ingroup themeable
  */
 function theme_system_modules($form) {
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.525
diff -u -p -r1.525 system.module
--- modules/system/system.module	29 Aug 2007 14:57:49 -0000	1.525
+++ modules/system/system.module	30 Aug 2007 02:54:47 -0000
@@ -477,21 +477,27 @@ function system_user($type, $edit, &$use
 function system_admin_menu_block($item) {
   $content = array();
   if (!isset($item['mlid'])) {
-    $item['mlid'] = db_result(db_query("SELECT mlid FROM {menu_links} ml WHERE ml.router_path = '%s' AND menu_name = 'navigation'", $item['path']));
+    $item += db_fetch_array(db_query("SELECT mlid, menu_name FROM {menu_links} ml WHERE ml.router_path = '%s' AND module = 'system'", $item['path']));
   }
   $result = db_query("
-    SELECT *
+    SELECT m.*, ml.*
     FROM {menu_links} ml
     INNER JOIN {menu_router} m ON ml.router_path = m.path
-    WHERE ml.plid = %d AND ml.menu_name = 'navigation' AND hidden = 0
-    ORDER BY m.weight, m.title", $item['mlid']);
+    WHERE ml.plid = %d AND ml.menu_name = '%s' AND hidden = 0", $item['mlid'], $item['menu_name']);
   while ($item = db_fetch_array($result)) {
     _menu_link_translate($item);
     if (!$item['access']) {
       continue;
     }
-    $content[] = (array)$item;
+    // The link 'description' either derived from the hook_menu 'description' or
+    // entered by the user via menu module is saved as the title attribute
+    if (!empty($item['options']['attributes']['title'])) {
+      $item['description'] = $item['options']['attributes']['title'];
+    }
+    // Prepare for sorting as in function _menu_tree_check_access().
+    $content[(50000 + $item['weight']) .' '. $item['title'] .' '. $item['mlid']] = $item;
   }
+  ksort($content);
   return $content;
 }
 
