Index: modules/system/system.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v retrieving revision 1.298 diff -u -r1.298 system.admin.inc --- modules/system/system.admin.inc 22 Aug 2010 12:55:04 -0000 1.298 +++ modules/system/system.admin.inc 1 Sep 2010 23:13:28 -0000 @@ -866,6 +866,7 @@ $extra['required_by'][] = $distribution_name; } + $extra['states']['requires'] = array(); // If this module requires other modules, add them to the array. foreach ($module->requires as $requires => $v) { if (!isset($files[$requires])) { @@ -889,6 +890,7 @@ $extra['requires'][$requires] = t('@module (disabled)', array('@module' => $requires_name)); } } + $extra['states']['requires'][] = array('package' => $files[$requires]->info['package'], 'filename' => $requires); } // Generate link for module's help page, if there is one. if ($help_arg && $module->status && in_array($filename, module_implements('help'))) { @@ -924,8 +926,7 @@ } } - // Mark dependents disabled so the user cannot remove required modules. - $dependents = array(); + $extra['states']['required_by'] = array(); // If this module is required by other modules, list those, and then make it // impossible to disable this one. foreach ($module->required_by as $required_by => $v) { @@ -938,6 +939,7 @@ else { $extra['required_by'][] = t('@module (disabled)', array('@module' => $files[$required_by]->info['name'])); } + $extra['states']['required_by'][] = array('package' => $files[$required_by]->info['package'], 'filename' => $required_by); } } $form['modules'][$module->info['package']][$filename] = _system_modules_build_row($module->info, $extra); @@ -1040,6 +1042,14 @@ $status_long .= t('This module requires PHP version @php_required and is incompatible with PHP version !php_version.', array('@php_required' => $php_required, '!php_version' => phpversion())); } + $states = array(); + foreach ($extra['states']['requires'] as $requires) { + $states[':input[name="modules[' . $requires['package'] . '][' . $requires['filename'] . '][enable]"]'] = array('checked' => TRUE); + } + foreach ($extra['states']['required_by'] as $required_by) { + $states[':input[name="modules[' . $required_by['package'] . '][' . $required_by['filename'] . '][enable]"]'] = array('checked' => FALSE); + } + // If this module is compatible, present a checkbox indicating // this module may be installed. Otherwise, show a big red X. if ($compatible) { @@ -1047,6 +1057,9 @@ '#type' => 'checkbox', '#title' => t('Enable'), '#default_value' => $extra['enabled'], + '#states' => array( + 'enabled' => $states, + ), ); if ($extra['disabled']) { $form['enable']['#disabled'] = TRUE; @@ -1123,7 +1136,6 @@ // Builds list of modules. $modules = array(); - // If we're not coming from the confirmation form, build the list of modules. if (empty($form_state['storage'])) { // If we're not coming from the confirmation form, build the module list. foreach ($form_state['values']['modules'] as $group_name => $group) {