From 829d16613a2fec10d08c46fcea9128efd7b453ab Mon Sep 17 00:00:00 2001 From: catch Date: Mon, 13 Jun 2022 08:50:47 +0100 Subject: [PATCH] Issue #3280398 by alexpott, mherchel, quietone: Theme's post updates within update.php refer to themes as "module" (cherry picked from commit 47f2a07604c91f32159be7833eb0f7c2deb7b746) --- .../src/Controller/DbUpdateController.php | 39 ++++++++++--------- .../src/Functional/Theme/ThemeUpdateTest.php | 6 ++- ...theme_depending_on_modules.post_update.php | 1 + 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/core/modules/system/src/Controller/DbUpdateController.php b/core/modules/system/src/Controller/DbUpdateController.php index f7dc4a35554..de66f43687d 100644 --- a/core/modules/system/src/Controller/DbUpdateController.php +++ b/core/modules/system/src/Controller/DbUpdateController.php @@ -268,7 +268,7 @@ class DbUpdateController extends ControllerBase { $starting_updates = []; $incompatible_updates_exist = FALSE; - $updates_per_module = []; + $updates_per_extension = []; foreach (['update', 'post_update'] as $update_type) { switch ($update_type) { case 'update': @@ -279,11 +279,11 @@ class DbUpdateController extends ControllerBase { $updates = $this->postUpdateRegistry->getPendingUpdateInformation(); break; } - foreach ($updates as $module => $update) { + foreach ($updates as $extension => $update) { if (!isset($update['start'])) { - $build['start'][$module] = [ + $build['start'][$extension] = [ '#type' => 'item', - '#title' => $module . ' module', + '#title' => $extension . ($this->moduleHandler->moduleExists($extension) ? ' module' : ' theme'), '#markup' => $update['warning'], '#prefix' => '
', '#suffix' => '
', @@ -292,22 +292,22 @@ class DbUpdateController extends ControllerBase { continue; } if (!empty($update['pending'])) { - $updates_per_module += [$module => []]; - $updates_per_module[$module] = array_merge($updates_per_module[$module], $update['pending']); - $build['start'][$module] = [ + $updates_per_extension += [$extension => []]; + $updates_per_extension[$extension] = array_merge($updates_per_extension[$extension], $update['pending']); + $build['start'][$extension] = [ '#type' => 'hidden', '#value' => $update['start'], ]; // Store the previous items in order to merge normal updates and // post_update functions together. - $build['start'][$module] = [ + $build['start'][$extension] = [ '#theme' => 'item_list', - '#items' => $updates_per_module[$module], - '#title' => $module . ' module', + '#items' => $updates_per_extension[$extension], + '#title' => $extension . ($this->moduleHandler->moduleExists($extension) ? ' module' : ' theme'), ]; if ($update_type === 'update') { - $starting_updates[$module] = $update['start']; + $starting_updates[$extension] = $update['start']; } } if (isset($update['pending'])) { @@ -446,9 +446,9 @@ class DbUpdateController extends ControllerBase { // Output a list of info messages. if (!empty($update_results)) { $all_messages = []; - foreach ($update_results as $module => $updates) { - if ($module != '#abort') { - $module_has_message = FALSE; + foreach ($update_results as $extension => $updates) { + if ($extension != '#abort') { + $extension_has_message = FALSE; $info_messages = []; foreach ($updates as $name => $queries) { $messages = []; @@ -473,7 +473,7 @@ class DbUpdateController extends ControllerBase { } if ($messages) { - $module_has_message = TRUE; + $extension_has_message = TRUE; if (is_numeric($name)) { $title = $this->t('Update #@count', ['@count' => $name]); } @@ -488,12 +488,15 @@ class DbUpdateController extends ControllerBase { } } - // If there were any messages then prefix them with the module name + // If there were any messages then prefix them with the extension name // and add it to the global message list. - if ($module_has_message) { + if ($extension_has_message) { + $header = $this->moduleHandler->moduleExists($extension) ? + $this->t('@module module', ['@module' => $extension]) : + $this->t('@theme theme', ['@theme' => $extension]); $all_messages[] = [ '#type' => 'container', - '#prefix' => '

' . $this->t('@module module', ['@module' => $module]) . '

', + '#prefix' => '

' . $header . '

', '#children' => $info_messages, ]; } diff --git a/core/modules/system/tests/src/Functional/Theme/ThemeUpdateTest.php b/core/modules/system/tests/src/Functional/Theme/ThemeUpdateTest.php index 21c31a17f12..fbcd137b3d5 100644 --- a/core/modules/system/tests/src/Functional/Theme/ThemeUpdateTest.php +++ b/core/modules/system/tests/src/Functional/Theme/ThemeUpdateTest.php @@ -36,6 +36,10 @@ class ThemeUpdateTest extends BrowserTestBase { $this->assertFalse(\Drupal::moduleHandler()->moduleExists('test_another_module_required_by_theme')); $this->runUpdates(); $this->assertTrue(\Drupal::moduleHandler()->moduleExists('test_another_module_required_by_theme')); + + $this->assertSession()->addressEquals('update.php/results'); + $this->assertSession()->responseContains('test_theme_depending_on_modules theme'); + $this->assertSession()->responseContains('Post update message from theme post update function'); } /** @@ -43,7 +47,7 @@ class ThemeUpdateTest extends BrowserTestBase { */ protected function doSelectionTest() { // Ensure that the theme's post update appears as expected. - $this->assertSession()->responseContains('test_theme_depending_on_modules module'); + $this->assertSession()->responseContains('test_theme_depending_on_modules theme'); $this->assertSession()->responseContains('Install a dependent module.'); } diff --git a/core/modules/system/tests/themes/test_theme_depending_on_modules/test_theme_depending_on_modules.post_update.php b/core/modules/system/tests/themes/test_theme_depending_on_modules/test_theme_depending_on_modules.post_update.php index 6ce1008d338..2f981e0ea05 100644 --- a/core/modules/system/tests/themes/test_theme_depending_on_modules/test_theme_depending_on_modules.post_update.php +++ b/core/modules/system/tests/themes/test_theme_depending_on_modules/test_theme_depending_on_modules.post_update.php @@ -12,6 +12,7 @@ if (\Drupal::state()->get('test_theme_depending_on_modules.post_update')) { */ function test_theme_depending_on_modules_post_update_module_install(&$sandbox = NULL) { \Drupal::service('module_installer')->install(['test_another_module_required_by_theme']); + return 'Post update message from theme post update function'; } }