Skip to content
Snippets Groups Projects
Commit 47f2a076 authored by catch's avatar catch
Browse files

Issue #3280398 by alexpott, mherchel, quietone: Theme's post updates within...

Issue #3280398 by alexpott, mherchel, quietone: Theme's post updates within update.php refer to themes as "module"
parent dd16e9e8
Branches
Tags
37 merge requests!12227Issue #3181946 by jonmcl, mglaman,!7471uncessary 5 files are moved from media-library folder to misc folder,!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!3102Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use...,!2853#3274419 Makes BaseFieldOverride inherit the internal property from the base field.,!2719Issue #3110137: Remove Classy from core.,!2437Issue #3238257 by hooroomoo, Wim Leers: Fragment link pointing to <textarea>...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1254Issue #3238915: Refactor (if feasible) uses of the jQuery ready function to use VanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!873Issue #2875228: Site install not using batch API service,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!712Issue #2909128: Autocomplete intermittent on Chrome Android,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
......@@ -268,7 +268,7 @@ protected function selection(Request $request) {
$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 @@ protected function selection(Request $request) {
$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' => '<div class="messages messages--warning">',
'#suffix' => '</div>',
......@@ -292,22 +292,22 @@ protected function selection(Request $request) {
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 @@ protected function results(Request $request) {
// 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 @@ protected function results(Request $request) {
}
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 @@ protected function results(Request $request) {
}
}
// 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' => '<h3>' . $this->t('@module module', ['@module' => $module]) . '</h3>',
'#prefix' => '<h3>' . $header . '</h3>',
'#children' => $info_messages,
];
}
......
......@@ -36,6 +36,10 @@ public function testThemeUpdates() {
$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 @@ public function testThemeUpdates() {
*/
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.');
}
......
......@@ -12,6 +12,7 @@
*/
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';
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment