diff --git a/modules/aggregator/aggregator.info b/modules/aggregator/aggregator.info index 2b75e247a52..d94344022df 100644 --- a/modules/aggregator/aggregator.info +++ b/modules/aggregator/aggregator.info @@ -12,3 +12,4 @@ files[] = aggregator.parser.inc files[] = aggregator.processor.inc files[] = aggregator.install files[] = aggregator.test +configure = admin/config/services/aggregator/settings diff --git a/modules/block/block.info b/modules/block/block.info index f2db61717fd..c3716075cee 100644 --- a/modules/block/block.info +++ b/modules/block/block.info @@ -1,5 +1,4 @@ ; $Id$ - name = Block description = Controls the visual building blocks a page is constructed with. Blocks are boxes of content rendered into an area, or region, of a web page. package = Core @@ -9,3 +8,4 @@ files[] = block.module files[] = block.admin.inc files[] = block.install files[] = block.test +configure = admin/structure/block diff --git a/modules/book/book.info b/modules/book/book.info index b30b4a59eb4..8f74f59bc2a 100644 --- a/modules/book/book.info +++ b/modules/book/book.info @@ -1,5 +1,4 @@ ; $Id$ - name = Book description = Allows users to create and organize related content in an outline. package = Core @@ -10,3 +9,4 @@ files[] = book.admin.inc files[] = book.pages.inc files[] = book.install files[] = book.test +configure = admin/content/book/settings diff --git a/modules/comment/comment.info b/modules/comment/comment.info index 5b6a48acf35..a2ad013858c 100644 --- a/modules/comment/comment.info +++ b/modules/comment/comment.info @@ -1,5 +1,4 @@ ; $Id$ - name = Comment description = Allows users to comment on and discuss published content. package = Core @@ -11,3 +10,4 @@ files[] = comment.pages.inc files[] = comment.install files[] = comment.test files[] = comment.tokens.inc +configure = admin/content/comment diff --git a/modules/contact/contact.info b/modules/contact/contact.info index fda41ae0f52..a2f7f4c5232 100644 --- a/modules/contact/contact.info +++ b/modules/contact/contact.info @@ -9,3 +9,4 @@ files[] = contact.admin.inc files[] = contact.pages.inc files[] = contact.install files[] = contact.test +configure = admin/structure/contact diff --git a/modules/dashboard/dashboard.info b/modules/dashboard/dashboard.info index c49d445f619..876b8a9ea6f 100644 --- a/modules/dashboard/dashboard.info +++ b/modules/dashboard/dashboard.info @@ -6,3 +6,4 @@ package = Core version = VERSION files[] = dashboard.module dependencies[] = block +configure = admin/dashboard/customize diff --git a/modules/filter/filter.info b/modules/filter/filter.info index ecd3de188fb..0135de71a12 100644 --- a/modules/filter/filter.info +++ b/modules/filter/filter.info @@ -1,4 +1,4 @@ -;h $Id$ +; $Id$ name = Filter description = Filters content in preparation for display. package = Core @@ -10,3 +10,4 @@ files[] = filter.pages.inc files[] = filter.install files[] = filter.test required = TRUE +configure = admin/config/content/formats diff --git a/modules/forum/forum.info b/modules/forum/forum.info index ff4621a5f4c..a6fec2ccb30 100644 --- a/modules/forum/forum.info +++ b/modules/forum/forum.info @@ -11,3 +11,4 @@ files[] = forum.admin.inc files[] = forum.pages.inc files[] = forum.install files[] = forum.test +configure = admin/structure/forum diff --git a/modules/image/image.info b/modules/image/image.info index 320cd3ccbb4..137acc24873 100644 --- a/modules/image/image.info +++ b/modules/image/image.info @@ -11,3 +11,4 @@ files[] = image.effects.inc files[] = image.field.inc files[] = image.install files[] = image.test +configure = admin/config/media/image-styles diff --git a/modules/locale/locale.info b/modules/locale/locale.info index 642b6933089..3cae81c781f 100644 --- a/modules/locale/locale.info +++ b/modules/locale/locale.info @@ -8,3 +8,4 @@ files[] = locale.module files[] = locale.install files[] = locale.field.inc files[] = locale.test +configure = admin/config/regional/language diff --git a/modules/menu/menu.info b/modules/menu/menu.info index f3db2a75b7e..2854295984d 100644 --- a/modules/menu/menu.info +++ b/modules/menu/menu.info @@ -8,3 +8,4 @@ files[] = menu.module files[] = menu.admin.inc files[] = menu.install files[] = menu.test +configure = admin/structure/menu diff --git a/modules/node/node.info b/modules/node/node.info index 30021341112..51130138d6a 100644 --- a/modules/node/node.info +++ b/modules/node/node.info @@ -12,3 +12,4 @@ files[] = node.install files[] = node.test files[] = node.tokens.inc required = TRUE +configure = admin/structure/types diff --git a/modules/path/path.info b/modules/path/path.info index ee05f40f0bc..f49c87726da 100644 --- a/modules/path/path.info +++ b/modules/path/path.info @@ -7,3 +7,4 @@ core = 7.x files[] = path.module files[] = path.admin.inc files[] = path.test +configure = admin/config/search/path diff --git a/modules/profile/profile.info b/modules/profile/profile.info index 7e6e511ec1d..cc27ac14626 100644 --- a/modules/profile/profile.info +++ b/modules/profile/profile.info @@ -9,3 +9,4 @@ files[] = profile.admin.inc files[] = profile.pages.inc files[] = profile.install files[] = profile.test +configure = admin/config/people/profile diff --git a/modules/search/search.info b/modules/search/search.info index 504aef485aa..eb749d281ae 100644 --- a/modules/search/search.info +++ b/modules/search/search.info @@ -10,3 +10,4 @@ files[] = search.pages.inc files[] = search.install files[] = search.test files[] = search.extender.inc +configure = admin/config/search/settings diff --git a/modules/shortcut/shortcut.info b/modules/shortcut/shortcut.info index 65f37c037e1..e7d4a3bbe39 100644 --- a/modules/shortcut/shortcut.info +++ b/modules/shortcut/shortcut.info @@ -7,3 +7,4 @@ core = 7.x files[] = shortcut.module files[] = shortcut.admin.inc files[] = shortcut.install +configure = admin/config/system/shortcut diff --git a/modules/simpletest/simpletest.info b/modules/simpletest/simpletest.info index dff06909cfe..08ba39b7b44 100644 --- a/modules/simpletest/simpletest.info +++ b/modules/simpletest/simpletest.info @@ -9,6 +9,7 @@ files[] = simpletest.pages.inc files[] = simpletest.install files[] = simpletest.test files[] = drupal_web_test_case.php +configure = admin/config/development/testing/settings ; Tests in tests directory. files[] = tests/actions.test diff --git a/modules/statistics/statistics.info b/modules/statistics/statistics.info index 83b4351c3c7..de07d15ae8a 100644 --- a/modules/statistics/statistics.info +++ b/modules/statistics/statistics.info @@ -10,3 +10,4 @@ files[] = statistics.pages.inc files[] = statistics.install files[] = statistics.test files[] = statistics.tokens.inc +configure = admin/config/system/statistics diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc index 7da92a16575..8201d0c9c63 100644 --- a/modules/system/system.admin.inc +++ b/modules/system/system.admin.inc @@ -720,10 +720,37 @@ function system_modules($form, $form_state = 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"))); + $extra['links']['help'] = array( + '#type' => 'link', + '#title' => t('Help'), + '#href' => "admin/help/$filename", + '#options' => array('attributes' => array('class' => array('module-link', 'module-link-help'), 'title' => t('Help'))), + ); } } + // Generate link for module's permission, if the user has access to it. + if ($module->status && user_access('administer permissions') && in_array($filename, module_implements('permission'))) { + $extra['links']['permissions'] = array( + '#type' => 'link', + '#title' => t('Permissions'), + '#href' => 'admin/config/people/permissions', + '#options' => array('fragment' => 'module-' . $filename, 'attributes' => array('class' => array('module-link', 'module-link-permissions'), 'title' => t('Configure permissions'))), + ); + } + // Generate link for module's configuration page, if the module provides + // one. + if ($module->status && isset($module->info['configure'])) { + $configure_link = menu_get_item($module->info['configure']); + if ($configure_link['access']) { + $extra['links']['configure'] = array( + '#type' => 'link', + '#title' => t('Configure'), + '#href' => $configure_link['href'], + '#options' => array('attributes' => array('class' => array('module-link', 'module-link-configure'), 'title' => $configure_link['description'])), + ); + } + } + // 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 @@ -754,6 +781,7 @@ function system_modules($form, $form_state = array()) { t('Name'), t('Version'), t('Description'), + array('data' => t('Operations'), 'colspan' => 3), ), ); } @@ -784,7 +812,7 @@ function _system_modules_build_row($info, $extra) { 'required_by' => array(), 'disabled' => FALSE, 'enabled' => FALSE, - 'help' => '', + 'links' => array(), ); $form = array( '#tree' => TRUE, @@ -843,12 +871,11 @@ function _system_modules_build_row($info, $extra) { $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'], - ); + // Build operation links. + foreach (array('help', 'permissions', 'configure') as $key) { + $form['links'][$key] = (isset($extra['links'][$key]) ? $extra['links'][$key] : array()); } + return $form; } @@ -2307,14 +2334,8 @@ function theme_system_modules_fieldset($variables) { } $row[] = $label . '>' . drupal_render($module['name']) . ''; $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 = '
' . drupal_render($module['help']) . '
'; - } // Add the description, along with any modules it requires. - $description .= drupal_render($module['description']); + $description = drupal_render($module['description']); if ($module['#requires']) { $description .= '
' . t('Requires: !module-list', array('!module-list' => implode(', ', $module['#requires']))) . '
'; } @@ -2322,6 +2343,10 @@ function theme_system_modules_fieldset($variables) { $description .= '
' . t('Required by: !module-list', array('!module-list' => implode(', ', $module['#required_by']))) . '
'; } $row[] = array('data' => $description, 'class' => array('description')); + // Display links (such as help or permissions) in their own columns. + foreach (array('help', 'permissions', 'configure') as $key) { + $row[] = array('data' => drupal_render($module['links'][$key]), 'class' => array($key)); + } $rows[] = $row; } diff --git a/modules/system/system.css b/modules/system/system.css index 02a6b265796..c1336bc5178 100644 --- a/modules/system/system.css +++ b/modules/system/system.css @@ -159,10 +159,22 @@ tr.merge-up, tr.merge-up td, tr.merge-up th { .more-help-link { text-align: right; /* LTR */ } -.more-help-link a { +.more-help-link a, a.module-link { padding: 1px 0 1px 20px; /* LTR */ +} +a.module-link { + display: block; + white-space: nowrap; +} +.more-help-link a, a.module-link-help { background: url(../../misc/help.png) 0 50% no-repeat; /* LTR */ } +a.module-link-permissions { + background: url(../../misc/permissions.png) 0 50% no-repeat; /* LTR */ +} +a.module-link-configure { + background: url(../../misc/configure.png) 0 50% no-repeat; /* LTR */ +} .more-link { text-align: right; /* LTR */ } diff --git a/modules/system/system.info b/modules/system/system.info index edf18768356..bb7d88f49cf 100644 --- a/modules/system/system.info +++ b/modules/system/system.info @@ -16,3 +16,4 @@ files[] = system.tokens.inc files[] = system.updater.inc files[] = mail.sending.inc required = TRUE +configure = admin/config/system diff --git a/modules/taxonomy/taxonomy.info b/modules/taxonomy/taxonomy.info index 0bec863d24c..de9288c3f4c 100644 --- a/modules/taxonomy/taxonomy.info +++ b/modules/taxonomy/taxonomy.info @@ -10,3 +10,4 @@ files[] = taxonomy.pages.inc files[] = taxonomy.install files[] = taxonomy.test files[] = taxonomy.tokens.inc +configure = admin/structure/taxonomy diff --git a/modules/trigger/trigger.info b/modules/trigger/trigger.info index e097d59deed..df5354dd21e 100644 --- a/modules/trigger/trigger.info +++ b/modules/trigger/trigger.info @@ -8,3 +8,4 @@ files[] = trigger.module files[] = trigger.admin.inc files[] = trigger.install files[] = trigger.test +configure = admin/structure/trigger diff --git a/modules/update/update.info b/modules/update/update.info index ae133cfbeb6..447d4864c2c 100644 --- a/modules/update/update.info +++ b/modules/update/update.info @@ -13,3 +13,4 @@ files[] = update.manager.inc files[] = update.report.inc files[] = update.settings.inc files[] = update.test +configure = admin/reports/updates/settings diff --git a/modules/upload/upload.info b/modules/upload/upload.info index a3253433c39..5111bde9e1a 100644 --- a/modules/upload/upload.info +++ b/modules/upload/upload.info @@ -9,3 +9,4 @@ files[] = upload.admin.inc files[] = upload.install files[] = upload.test files[] = upload.tokens.inc +configure = admin/config/media/uploads diff --git a/modules/user/user.info b/modules/user/user.info index cd916a8733d..338d89e78bb 100644 --- a/modules/user/user.info +++ b/modules/user/user.info @@ -11,3 +11,4 @@ files[] = user.install files[] = user.test files[] = user.tokens.inc required = TRUE +configure = admin/config/people