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 7 Jan 2008 00:57:54 -0000 @@ -149,22 +149,67 @@ 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 core system 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; + + if (isset($info['package'])) { + // (Simple) sanity check. As of now, there's no safe way to determine the + // real paths of module setting pages. + $path = 'admin/settings/'. $module; + if (!isset($_admin_menu['index'][$path])) { + continue; + } + // Move module settings into package category, if defined. + $mid_module_settings = $_admin_menu['index'][$path]; + $package_item = array( + 'title' => $info['package'], + 'path' => 'admin/settings/package-'. preg_replace('/[^a-zA-Z-]/', '', $info['package']), + 'link' => FALSE, + ); + 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')); + $mid_issues = 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_issues, 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; + $projects = array(); + foreach ($modules as $module => $info) { + if (!empty($info['project']) && !isset($projects[$info['project']])) { + $projects[$info['project']] = 1; + $url = 'http://drupal.org/project/issues/'. $info['project']; + // Filtering project versions via query string is not yet supported. + // @see http://drupal.org/node/97569 + // $url .= !empty($info['version']) ? '/'. $info['version'] : ''; + admin_menu_add_item($_admin_menu, $mid_issues, array('title' => t('@title issue queue', array('@title' => $info['name'])), 'path' => $url, 'weight' => 0)); } - $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)); } } Index: admin_menu.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/admin_menu/admin_menu.module,v retrieving revision 1.26.2.11 diff -u -p -r1.26.2.11 admin_menu.module --- admin_menu.module 6 Jan 2008 14:52:05 -0000 1.26.2.11 +++ admin_menu.module 7 Jan 2008 01:17:29 -0000 @@ -192,6 +192,10 @@ function admin_menu_item_link($mid) { // Remove menu item tooltips due to mouseover clashes. unset($item['description']); + if (isset($link_item['link']) && $link_item['link'] == FALSE) { + $link_item['path'] = $_GET['q']; + $link_item['fragment'] = ''; + } return theme_admin_menu_item_link($item, $link_item); } @@ -208,7 +212,7 @@ function admin_menu_item_link($mid) { * @see theme_menu_item_link() */ function theme_admin_menu_item_link($item, $link_item) { - return l($item['title'], $link_item['path'], !isset($item['description']) ? array('title' => $item['description']) : array(), isset($item['query']) ? $item['query'] : NULL, NULL, FALSE, TRUE); + return l($item['title'], $link_item['path'], array(), isset($link_item['query']) ? $link_item['query'] : NULL, isset($link_item['fragment']) ? $link_item['fragment'] : NULL, FALSE, TRUE); } /** @@ -245,7 +249,8 @@ function _admin_menu_sort($a, $b) { * @param array $item * An menu item array for the menu system. May contain the key 'weight' to * adjust the item's weight. You can use Devel module to display additional - * information about menu items. + * information about menu items. If the key 'link' with value FALSE is set, an + * item without a link is created (useful for grouping menu items). * * @return int * The id of the new menu item.