From ce19c671106df767202972d22736db3582f6423b Mon Sep 17 00:00:00 2001 From: Angie Byron <webchick@24967.no-reply.drupal.org> Date: Mon, 21 Jun 2010 02:27:47 +0000 Subject: [PATCH] #293223 follow-up by David_Rothstein: Roll back 'Hide required core modules'. This was removing useful information to both new and experienced site builders, as well as hiding critical 'help' links. --- includes/install.inc | 14 ++++++++++++-- modules/field/field.info | 2 +- .../field_sql_storage/field_sql_storage.info | 2 +- modules/field/modules/list/list.info | 2 +- modules/field/modules/number/number.info | 2 +- modules/field/modules/options/options.info | 2 +- modules/field/modules/text/text.info | 2 +- modules/system/system.admin.inc | 12 +++++++++++- modules/system/system.module | 6 ++++++ modules/system/system.test | 17 +++++++++++++---- 10 files changed, 48 insertions(+), 13 deletions(-) diff --git a/includes/install.inc b/includes/install.inc index c5083eb0a24b..9d159a7fd76a 100644 --- a/includes/install.inc +++ b/includes/install.inc @@ -187,8 +187,18 @@ function drupal_set_installed_schema_version($module, $version) { * @see install_profile_info() */ function drupal_install_profile_distribution_name() { - global $install_state; - return $install_state['profile_info']['distribution_name']; + // During installation, the profile information is stored in the global + // installation state (it might not be saved anywhere yet). + if (drupal_installation_attempted()) { + global $install_state; + return $install_state['profile_info']['distribution_name']; + } + // At all other times, we load the profile via standard methods. + else { + $profile = drupal_get_profile(); + $info = install_profile_info($profile); + return $info['distribution_name']; + } } /** diff --git a/modules/field/field.info b/modules/field/field.info index 97ce7d7d8283..60c429778df0 100644 --- a/modules/field/field.info +++ b/modules/field/field.info @@ -1,7 +1,7 @@ ; $Id$ name = Field description = Field API to add fields to entities like nodes and users. -package = Core - fields +package = Core version = VERSION core = 7.x files[] = field.module diff --git a/modules/field/modules/field_sql_storage/field_sql_storage.info b/modules/field/modules/field_sql_storage/field_sql_storage.info index 5587fbe32c1c..32c09afdccd5 100644 --- a/modules/field/modules/field_sql_storage/field_sql_storage.info +++ b/modules/field/modules/field_sql_storage/field_sql_storage.info @@ -1,7 +1,7 @@ ; $Id$ name = Field SQL storage description = Stores field data in an SQL database. -package = Core - fields +package = Core version = VERSION core = 7.x files[] = field_sql_storage.module diff --git a/modules/field/modules/list/list.info b/modules/field/modules/list/list.info index bf4bb8182007..3033bf894274 100644 --- a/modules/field/modules/list/list.info +++ b/modules/field/modules/list/list.info @@ -1,7 +1,7 @@ ; $Id$ name = List description = Defines list field types. Use with Options to create selection lists. -package = Core - fields +package = Core version = VERSION core = 7.x files[]=list.module diff --git a/modules/field/modules/number/number.info b/modules/field/modules/number/number.info index 314506807026..b1fd79878651 100644 --- a/modules/field/modules/number/number.info +++ b/modules/field/modules/number/number.info @@ -1,7 +1,7 @@ ; $Id$ name = Number description = Defines numeric field types. -package = Core - fields +package = Core version = VERSION core = 7.x files[]=number.module diff --git a/modules/field/modules/options/options.info b/modules/field/modules/options/options.info index 289ef48f8fe6..48b654ecb8c6 100644 --- a/modules/field/modules/options/options.info +++ b/modules/field/modules/options/options.info @@ -1,7 +1,7 @@ ; $Id$ name = Options description = Defines selection, check box and radio button widgets for text and numeric fields. -package = Core - fields +package = Core version = VERSION core = 7.x files[]=options.module diff --git a/modules/field/modules/text/text.info b/modules/field/modules/text/text.info index 9d3156624e6a..07ae87b52945 100644 --- a/modules/field/modules/text/text.info +++ b/modules/field/modules/text/text.info @@ -1,7 +1,7 @@ ; $Id$ name = Text description = Defines simple text field types. -package = Core - fields +package = Core version = VERSION core = 7.x files[] = text.module diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc index 32490fee2319..152d2982c6e7 100644 --- a/modules/system/system.admin.inc +++ b/modules/system/system.admin.inc @@ -828,7 +828,7 @@ function system_modules($form, $form_state = array()) { // Remove hidden modules from display list. $visible_files = $files; foreach ($visible_files as $filename => $file) { - if (!empty($file->info['hidden']) || !empty($file->info['required'])) { + if (!empty($file->info['hidden'])) { unset($visible_files[$filename]); } } @@ -849,10 +849,19 @@ function system_modules($form, $form_state = array()) { // Used when checking if module implements a help page. $help_arg = module_exists('help') ? drupal_help_arg() : FALSE; + // Used when displaying modules that are required by the install profile. + require_once DRUPAL_ROOT . '/includes/install.inc'; + $distribution_name = check_plain(drupal_install_profile_distribution_name()); + // Iterate through each of the modules. foreach ($visible_files as $filename => $module) { $extra = array(); $extra['enabled'] = (bool) $module->status; + if (!empty($module->info['required'] )) { + $extra['disabled'] = TRUE; + $extra['required_by'][] = $distribution_name; + } + // If this module requires other modules, add them to the array. foreach ($module->requires as $requires => $v) { if (!isset($files[$requires])) { @@ -929,6 +938,7 @@ function system_modules($form, $form_state = array()) { } $form['modules'][$module->info['package']][$filename] = _system_modules_build_row($module->info, $extra); } + // Add basic information to the fieldsets. foreach (element_children($form['modules']) as $package) { $form['modules'][$package] += array( diff --git a/modules/system/system.module b/modules/system/system.module index 338d6ab8cecf..d8ad21f16c98 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -2263,6 +2263,12 @@ function _system_rebuild_module_data() { // Merge in defaults and save. $modules[$key]->info = $module->info + $defaults; + // Install profiles are hidden by default, unless explicitly specified + // otherwise in the .info file. + if ($key == $profile && !isset($modules[$key]->info['hidden'])) { + $modules[$key]->info['hidden'] = TRUE; + } + // Invoke hook_system_info_alter() to give installed modules a chance to // modify the data in the .info files if necessary. $type = 'module'; diff --git a/modules/system/system.test b/modules/system/system.test index c3aced0176ff..f1a4407a7de5 100644 --- a/modules/system/system.test +++ b/modules/system/system.test @@ -364,11 +364,20 @@ class ModuleRequiredTestCase extends ModuleTestCase { * Assert that core required modules cannot be disabled. */ function testDisableRequired() { - $required_modules = drupal_required_modules(); + $module_info = system_get_info('module'); $this->drupalGet('admin/modules'); - foreach ($required_modules as $module) { - // Check to make sure the checkbox for required module is not found. - $this->assertNoFieldByName('modules[Core][' . $module . '][enable]'); + foreach ($module_info as $module => $info) { + // Check to make sure the checkbox for each required module is disabled + // and checked (or absent from the page if the module is also hidden). + if (!empty($info['required'])) { + $field_name = "modules[{$info['package']}][$module][enable]"; + if (empty($info['hidden'])) { + $this->assertFieldByXPath("//input[@name='$field_name' and @disabled='disabled' and @checked='checked']", '', t('Field @name was disabled and checked.', array('@name' => $field_name))); + } + else { + $this->assertNoFieldByName($field_name); + } + } } } } -- GitLab