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',