? .project
? sites/default/files
? sites/default/private
? sites/default/settings.php
Index: misc/help.png
===================================================================
RCS file: /cvs/drupal/drupal/misc/help.png,v
retrieving revision 1.2
diff -u -p -r1.2 help.png
Binary files /tmp/cvslJpMHx and help.png differ
Index: misc/permissions.png
===================================================================
RCS file: misc/permissions.png
diff -N misc/permissions.png
Binary files /dev/null and permissions.png differ
Index: misc/settings.png
===================================================================
RCS file: misc/settings.png
diff -N misc/settings.png
Binary files /dev/null and settings.png differ
Index: modules/help/help.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/help/help.admin.inc,v
retrieving revision 1.10
diff -u -p -r1.10 help.admin.inc
--- modules/help/help.admin.inc	9 Oct 2009 00:59:59 -0000	1.10
+++ modules/help/help.admin.inc	11 Oct 2009 11:52:37 -0000
@@ -38,7 +38,11 @@ function help_page($name) {
     $admin_tasks = system_get_module_admin_tasks($name);
     if (!empty($admin_tasks)) {
       ksort($admin_tasks);
-      $output .= theme('item_list', array('items' => $admin_tasks, 'title' => t('@module administration pages', array('@module' => $module['name']))));
+      $admin_links = array();
+      foreach ($admin_tasks as $task) {
+      	$admin_links[] = l($task['title'], $task['path'], $task['options']);
+      }
+      $output .= theme('item_list', array('items' => $admin_links, 'title' => t('@module administration pages', array('@module' => $module['name']))));
     }
 
   }
Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.209
diff -u -p -r1.209 system.admin.inc
--- modules/system/system.admin.inc	9 Oct 2009 01:00:05 -0000	1.209
+++ modules/system/system.admin.inc	11 Oct 2009 11:52:42 -0000
@@ -160,16 +160,25 @@ function system_admin_by_module() {
 
     // Only display a section if there are any available tasks.
     if (count($admin_tasks)) {
+      $admin_links = array();
 
       // Check for help links.
       if ($help_arg && module_invoke($module, 'help', "admin/help#$module", $help_arg)) {
-        $admin_tasks[100] = l(t('Get help'), "admin/help/$module");
+        $admin_tasks[100] = array(
+          'title' => t('Get help'),
+          'path' => "admin/help/$module",
+          'options' => array('attributes' => array('class' => 'module-help-link')),
+        );
+        // $admin_tasks[100] = l(t('Get help'), "admin/help/$module", array('attributes' => array('class' => 'module-help-link')));
       }
 
       // Sort.
       ksort($admin_tasks);
 
-      $menu_items[$file->info['name']] = array($file->info['description'], $admin_tasks);
+      foreach ($admin_tasks as $task) {
+        $admin_links[] = l($task['title'], $task['path'], $task['options']);
+      }
+      $menu_items[$file->info['name']] = array($file->info['description'], $admin_links);
     }
   }
   return theme('system_admin_by_module', array('menu_items' => $menu_items));
@@ -695,13 +704,28 @@ function system_modules($form, $form_sta
         }
       }
     }
+    $extra['links'] = array();
+    $links = array();
     // Generate link for module's help page, if there is one.
     if ($help_arg && $module->status && in_array($filename, module_implements('help'))) {
       if (module_invoke($filename, 'help', "admin/help#$filename", $help_arg)) {
         // Module has a help page.
-        $extra['help'] = theme('more_help_link', array('url' => url("admin/help/$filename")));
+        $links[] = l('', "admin/help/$filename", array('attributes' => array('class' => 'module-help-link', 'title' => t('More help'))));
+      }
+    }
+    $admin_tasks = system_get_module_admin_tasks($module->name);
+    foreach ($admin_tasks as $key => $task) {
+      // Build a link with no text; only show the icon.
+      if (!isset($task['options']['attributes']['title'])) {
+      	$task['options']['attributes']['title'] = $task['title'];
+      }
+      if (!empty($task['options']['attributes']['class'])) {
+        $links[] = l(' ', $task['path'], $task['options']);
       }
     }
+    if (count($links)) {
+      $extra['links'] = theme('item_list', array('items' => $links));
+    }
     // Mark dependents disabled so the user cannot remove required modules.
     $dependents = array();
     // If this module is required by other modules, list those, and then make it
@@ -732,6 +756,7 @@ function system_modules($form, $form_sta
         t('Name'),
         t('Version'),
         t('Description'),
+        t('Operations'),
       ),
     );
   }
@@ -762,7 +787,7 @@ function _system_modules_build_row($info
     'required_by' => array(),
     'disabled' => FALSE,
     'enabled' => FALSE,
-    'help' => '',
+    'extra' => array(),
   );
   $form = array(
     '#tree' => TRUE,
@@ -821,10 +846,10 @@ function _system_modules_build_row($info
     $form['description']['#markup'] .= theme('system_modules_incompatible', array('message' => $status_long));
   }
 
-  // Show a "more help" link for modules that have them.
-  if ($extra['help']) {
-    $form['help'] = array(
-      '#markup' => $extra['help'],
+  // Show a set of useful links for modules that have them.
+  if (count($extra['links'])) {
+    $form['links'] = array(
+      '#markup' => $extra['links'],
     );
   }
   return $form;
@@ -1932,7 +1957,7 @@ function system_php() {
 function system_batch_page() {
   require_once DRUPAL_ROOT . '/includes/batch.inc';
   $output = _batch_page();
-  
+
   // Use the same theme that the page that started the batch.
   $batch = &batch_get();
   $GLOBALS['custom_theme'] = $batch['theme'];
@@ -2194,14 +2219,8 @@ function theme_system_modules_fieldset($
     }
     $row[] = $label . '><strong>' . drupal_render($module['name']) . '</strong></label>';
     $row[] = drupal_render($module['version']);
-    $description = '';
-    // If we have help, it becomes the first part
-    // of the description - with CSS, it is float: right'd.
-    if (isset($module['help'])) {
-      $description = '<div class="module-help">' . drupal_render($module['help']) . '</div>';
-    }
     // Add the description, along with any modules it requires.
-    $description .= drupal_render($module['description']);
+    $description = drupal_render($module['description']);
     if ($module['#requires']) {
       $description .= '<div class="admin-requirements">' . t('Requires: !module-list', array('!module-list' => implode(', ', $module['#requires']))) . '</div>';
     }
@@ -2209,6 +2228,8 @@ function theme_system_modules_fieldset($
       $description .= '<div class="admin-requirements">' . t('Required by: !module-list', array('!module-list' => implode(', ', $module['#required_by']))) . '</div>';
     }
     $row[] = array('data' => $description, 'class' => array('description'));
+    // Display links (such as help or permissions) in its own column.
+    $row[] = array('data' => drupal_render($module['links']), 'class' => array('operations'));
     $rows[] = $row;
   }
 
Index: modules/system/system.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.css,v
retrieving revision 1.63
diff -u -p -r1.63 system.css
--- modules/system/system.css	21 Sep 2009 08:52:41 -0000	1.63
+++ modules/system/system.css	11 Oct 2009 11:52:43 -0000
@@ -159,16 +159,30 @@ tr.merge-up, tr.merge-up td, tr.merge-up
 .more-help-link {
   text-align: right; /* LTR */
 }
-.more-help-link a {
+.more-help-link a, a.module-help-link {
   padding: 1px 0 1px 20px; /* LTR */
   background: url(../../misc/help.png) 0 50% no-repeat; /* LTR */
 }
+.module-permissions {
+  padding: 1px 0 1px 20px; /* LTR */
+  background: url(../../misc/permissions.png) 0 50% no-repeat; /* LTR */
+}
+.module-settings {
+  padding: 1px 0 1px 20px; /* LTR */
+  background: url(../../misc/settings.png) 0 50% no-repeat; /* LTR */
+}
 .more-link {
   text-align: right; /* LTR */
 }
-.module-help {
-  margin-left: 1em; /* LTR */
-  float: right; /* LTR */
+td.operations {
+  clear: both;
+}
+.operations .item-list ul li {
+  float: left; 
+  margin: 0 .5em 0 0; 
+}
+.operations .item-list ul li.last {
+  margin-right: 0; 
 }
 .nowrap {
   white-space: nowrap;
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.804
diff -u -p -r1.804 system.module
--- modules/system/system.module	10 Oct 2009 16:48:38 -0000	1.804
+++ modules/system/system.module	11 Oct 2009 11:52:47 -0000
@@ -1668,7 +1668,7 @@ function system_admin_menu_block($item) 
   $has_subitems = FALSE;
   $result = db_query("
     SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.title, m.title_callback, m.title_arguments, m.theme_callback, m.theme_arguments, m.type, m.description, m.path, m.weight as router_weight, ml.*
-    FROM {menu_router} m 
+    FROM {menu_router} m
     LEFT JOIN {menu_links} ml ON m.path = ml.router_path
     WHERE (ml.plid = :plid AND ml.menu_name = :name AND hidden = 0) OR (m.tab_parent = :path AND m.type IN (:local_task, :default_task))", array(':plid' => $item['mlid'], ':name' => $item['menu_name'], ':path' => $item['path'], ':local_task' => MENU_LOCAL_TASK, ':default_task' => MENU_DEFAULT_LOCAL_TASK), array('fetch' => PDO::FETCH_ASSOC));
   foreach ($result as $link) {
@@ -1702,7 +1702,7 @@ function system_admin_menu_block($item) 
     }
   }
   if ($has_subitems) {
-    // If we've had at least one non-tab subitem, remove the link for the 
+    // If we've had at least one non-tab subitem, remove the link for the
     // default task, since that is already broken down to subitems.
     unset($content[$default_task]);
   }
@@ -2370,14 +2370,23 @@ function system_get_module_admin_tasks($
   $admin_task_count = 0;
   // Check for permissions.
   if (in_array($module, module_implements('permission')) && $admin_access) {
-    $admin_tasks[-1] = l(t('Configure permissions'), 'admin/config/people/permissions', array('fragment' => 'module-' . $module));
+    $admin_tasks[-1] = array(
+      'title' => t('Configure permissions'),
+      'path' => 'admin/config/people/permissions',
+      'options' => array('fragment' => 'module-' . $module, 'attributes' => array('class' => 'module-permissions')),
+    );
   }
 
   // Check for menu items that are admin links.
   if (in_array($module, module_implements('menu')) && $menu = module_invoke($module, 'menu')) {
     foreach (array_keys($menu) as $path) {
       if (isset($items[$path])) {
-        $admin_tasks[$items[$path]['title'] . $admin_task_count ++] = l($items[$path]['title'], $path);
+        $class = (strpos($path, 'admin/config') !== FALSE) ? 'module-settings' : '';
+        $admin_tasks[$items[$path]['title'] . $admin_task_count ++] = array(
+          'title' => $items[$path]['title'],
+          'path' => $path,
+          'options' => array('attributes' => array('class' => $class)),
+        );
       }
     }
   }
Index: themes/seven/style.css
===================================================================
RCS file: /cvs/drupal/drupal/themes/seven/style.css,v
retrieving revision 1.18
diff -u -p -r1.18 style.css
--- themes/seven/style.css	11 Sep 2009 13:48:44 -0000	1.18
+++ themes/seven/style.css	11 Oct 2009 11:52:48 -0000
@@ -430,6 +430,10 @@ table tr.selected td {
   border-color: #eeb;
 }
 
+#system-modules table td {
+  vertical-align: baseline;
+}
+
 /**
  * Forms.
  */
