diff options
Diffstat (limited to 'modules/system')
-rw-r--r-- | modules/system/system.admin.inc | 45 | ||||
-rw-r--r-- | modules/system/system.module | 7 |
2 files changed, 52 insertions, 0 deletions
diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc index bc2aba4f9..a52545286 100644 --- a/modules/system/system.admin.inc +++ b/modules/system/system.admin.inc @@ -59,6 +59,51 @@ function system_main_admin_page($arg = NULL) { } } +/** + * Menu callback; Provide the administration overview page. + */ +function system_admin_config_page() { + // Check for status report errors. + if (system_status(TRUE) && user_access('administer site configuration')) { + 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/reports/status'))), 'error'); + } + $blocks = array(); + if ($admin = db_query("SELECT menu_name, mlid FROM {menu_links} WHERE link_path = 'admin/config' AND module = 'system'")->fetchAssoc()) { + $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 = :menu_name AND ml.plid = :mlid AND hidden = 0", $admin, array('fetch' => PDO::FETCH_ASSOC)); + foreach ($result as $item) { + _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['localized_options']['attributes']['title'])) { + $item['description'] = $item['localized_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(). + // The weight is offset so it is always positive, with a uniform 5-digits. + $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.'); + } +} /** * Provide a single block from the administration menu as a page. diff --git a/modules/system/system.module b/modules/system/system.module index e3d01214d..69f4fe627 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -525,6 +525,13 @@ function system_menu() { 'access callback' => 'system_admin_menu_block_access', 'access arguments' => array('admin/settings', 'access administration pages'), ); + $items['admin/config'] = array( + 'title' => 'Configuration and modules', + 'page callback' => 'system_admin_config_page', + 'position' => 'right', + 'access callback' => array('system_admin_menu_block_access'), + 'access arguments' => array('admin/config', 'access administration pages'), + ); $items['admin/structure'] = array( 'title' => 'Structure', 'description' => 'Control how your site looks and feels.', |