diff --git a/core/modules/system/lib/Drupal/system/Form/ModulesUninstallForm.php b/core/modules/system/lib/Drupal/system/Form/ModulesUninstallForm.php
index 93bf906..2ce81a5 100644
--- a/core/modules/system/lib/Drupal/system/Form/ModulesUninstallForm.php
+++ b/core/modules/system/lib/Drupal/system/Form/ModulesUninstallForm.php
@@ -87,29 +87,52 @@ public function buildForm(array $form, array &$form_state) {
// Sort all modules by their name.
uasort($uninstallable, 'system_sort_modules_by_info_name');
- $form['uninstall'] = array('#tree' => TRUE);
+ $form['modules'] = array(
+ '#type' => 'table',
+ '#header' => array(
+ $this->t('Uninstall'),
+ $this->t('Name'),
+ $this->t('Description'),
+ ),
+ '#empty' => $this->t('No modules are available to uninstall.'),
+ );
+
foreach ($uninstallable as $module) {
- $name = $module->info['name'] ?: $module->name;
- $form['modules'][$module->name]['#module_name'] = $name;
- $form['modules'][$module->name]['name']['#markup'] = $name;
- $form['modules'][$module->name]['description']['#markup'] = $this->t($module->info['description']);
+ $module_name = $module->info['name'] ?: $module->name;
- $form['uninstall'][$module->name] = array(
+ $form['modules'][$module->name]['checkbox'] = array(
'#type' => 'checkbox',
- '#title' => $this->t('Uninstall @module module', array('@module' => $name)),
+ '#title' => $this->t('Uninstall @module module', array('@module' => $module_name)),
'#title_display' => 'invisible',
);
// All modules which depend on this one must be uninstalled first, before
// we can allow this module to be uninstalled. (The installation profile
// is excluded from this list.)
+ $required_by = array();
foreach (array_keys($module->required_by) as $dependent) {
if ($dependent != $profile && drupal_get_installed_schema_version($dependent) != SCHEMA_UNINSTALLED) {
$name = isset($modules[$dependent]->info['name']) ? $modules[$dependent]->info['name'] : $dependent;
- $form['modules'][$module->name]['#required_by'][] = $name;
- $form['uninstall'][$module->name]['#disabled'] = TRUE;
+ $required_by[] = $name;
+ $form['modules'][$module->name]['checkbox']['#disabled'] = TRUE;
}
}
+ $form['modules'][$module->name]['name'] = array(
+ '#markup' => '' . $module_name . '',
+ );
+
+ $disabled_message = '';
+ if (!$required_by) {
+ $disabled_message = \Drupal::translation()->formatPlural(count($required_by),
+ 'To uninstall @module, the following module must be uninstalled first: @required_modules',
+ 'To uninstall @module, the following modules must be uninstalled first: @required_modules',
+ array(
+ '@module' => $module_name,
+ '@required_modules' => implode(', ', $required_by),
+ ));
+ $disabled_message = '
' . $disabled_message . '
';
+ }
+ $form['modules'][$module->name]['description']['#markup'] = $this->t($module->info['description']) . $disabled_message;
}
$form['actions'] = array('#type' => 'actions');
@@ -125,24 +148,38 @@ public function buildForm(array $form, array &$form_state) {
* {@inheritdoc}
*/
public function validateForm(array &$form, array &$form_state) {
+ // Get the selected modules.
+ $modules = $form_state['values']['modules'];
+ $selected_modules = array();
+ foreach ($modules as $module_name => $input) {
+ if ($input['checkbox']) {
+ $selected_modules[] = $module_name;
+ }
+ }
+
// Form submitted, but no modules selected.
- if (!array_filter($form_state['values']['uninstall'])) {
+ if (!$selected_modules) {
drupal_set_message($this->t('No modules selected.'), 'error');
$form_state['redirect_route']['route_name'] = 'system.modules_uninstall';
}
+ else {
+ $form_state['values']['selected_modules'] = $selected_modules;
+ }
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, array &$form_state) {
+ // Get the selected modules.
+ $selected_modules = $form_state['values']['selected_modules'];
+
// Save all the values in an expirable key value store.
- $modules = $form_state['values']['uninstall'];
- $uninstall = array_keys(array_filter($modules));
$account = $this->currentUser()->id();
- $this->keyValueExpirable->setWithExpire($account, $uninstall, 60);
+ $this->keyValueExpirable->setWithExpire($account, $selected_modules, 60);
// Redirect to the confirm form.
$form_state['redirect_route']['route_name'] = 'system.modules_uninstall_confirm';
}
+
}
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 4a6005d..5282738 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -421,61 +421,6 @@ function theme_system_modules_incompatible($variables) {
}
/**
- * Returns HTML for a table of currently disabled modules.
- *
- * @param $variables
- * An associative array containing:
- * - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_system_modules_uninstall($variables) {
- $form = $variables['form'];
-
- // No theming for the confirm form.
- if (isset($form['confirm'])) {
- return drupal_render($form);
- }
-
- // Table headers.
- $header = array(t('Uninstall'),
- t('Name'),
- t('Description'),
- );
-
- // Display table.
- $rows = array();
- foreach (element_children($form['modules']) as $module) {
- if (!empty($form['modules'][$module]['#required_by'])) {
- $disabled_message = format_plural(count($form['modules'][$module]['#required_by']),
- 'To uninstall @module, the following module must be uninstalled first: @required_modules',
- 'To uninstall @module, the following modules must be uninstalled first: @required_modules',
- array('@module' => $form['modules'][$module]['#module_name'], '@required_modules' => implode(', ', $form['modules'][$module]['#required_by'])));
- $disabled_message = '' . $disabled_message . '
';
- }
- else {
- $disabled_message = '';
- }
- $rows[] = array(
- array('data' => drupal_render($form['uninstall'][$module]), 'align' => 'center'),
- '',
- array('data' => drupal_render($form['modules'][$module]['description']) . $disabled_message, 'class' => array('description')),
- );
- }
-
- $table = array(
- '#theme' => 'table',
- '#header' => $header,
- '#rows' => $rows,
- '#empty' => t('No modules are available to uninstall.'),
- );
- $output = drupal_render($table);
- $output .= drupal_render_children($form);
-
- return $output;
-}
-
-/**
* Returns HTML for the Appearance page.
*
* @param $variables
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index cc647a2..b662c38 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -172,10 +172,6 @@ function system_theme() {
'variables' => array('message' => NULL),
'file' => 'system.admin.inc',
),
- 'system_modules_uninstall' => array(
- 'render element' => 'form',
- 'file' => 'system.admin.inc',
- ),
'status_report' => array(
'variables' => array('requirements' => NULL),
'file' => 'system.admin.inc',