diff --git a/core/includes/update.inc b/core/includes/update.inc index 510dc8c4edd1..e6fe7faded4a 100644 --- a/core/includes/update.inc +++ b/core/includes/update.inc @@ -17,7 +17,7 @@ use Drupal\Core\Utility\Error; * Disables any extensions that are incompatible with the current core version. */ function update_fix_compatibility() { - $extension_config = \Drupal::config('core.extension'); + $extension_config = \Drupal::configFactory()->getEditable('core.extension'); $save = FALSE; foreach (array('module', 'theme') as $type) { foreach ($extension_config->get($type) as $name => $weight) { diff --git a/core/modules/system/src/Tests/Update/CompatibilityFixTest.php b/core/modules/system/src/Tests/Update/CompatibilityFixTest.php new file mode 100644 index 000000000000..bfa752f196a5 --- /dev/null +++ b/core/modules/system/src/Tests/Update/CompatibilityFixTest.php @@ -0,0 +1,48 @@ +getEditable('core.extension'); + + // Add an incompatible/non-existent module to the config. + $modules = $extension_config->get('module'); + $modules['incompatible_module'] = 0; + $extension_config->set('module', $modules); + $modules = $extension_config->get('module'); + $this->assertTrue(in_array('incompatible_module', array_keys($modules)), 'Added incompatible/non-existent module to the config.'); + + // Add an incompatible/non-existent theme to the config. + $themes = $extension_config->get('theme'); + $themes['incompatible_theme'] = 0; + $extension_config->set('theme', $themes); + $themes = $extension_config->get('theme'); + $this->assertTrue(in_array('incompatible_theme', array_keys($themes)), 'Added incompatible/non-existent theme to the config.'); + + // Fix compatibility. + update_fix_compatibility(); + $modules = $extension_config->get('module'); + $this->assertFalse(in_array('incompatible_module', array_keys($modules)), 'Fixed modules compatibility.'); + $themes = $extension_config->get('theme'); + $this->assertFalse(in_array('incompatible_theme', array_keys($themes)), 'Fixed themes compatibility.'); + } +}