diff --git a/core/lib/Drupal/Core/Config/ConfigFactoryOverrideBase.php b/core/lib/Drupal/Core/Config/ConfigFactoryOverrideBase.php index aaefe02..263cedd 100644 --- a/core/lib/Drupal/Core/Config/ConfigFactoryOverrideBase.php +++ b/core/lib/Drupal/Core/Config/ConfigFactoryOverrideBase.php @@ -10,7 +10,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** - * Defines a base event listener implementation for config sync validation. + * Defines a base event listener implementation configuration overrides. */ abstract class ConfigFactoryOverrideBase implements EventSubscriberInterface { diff --git a/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php b/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php index e0d5b6b..6b53089 100644 --- a/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php +++ b/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php @@ -70,18 +70,46 @@ function testConfigLanguageOverride() { // Test overrides of completely new configuration objects. In normal runtime // this should only happen for configuration entities as we should not be // creating simple configuration objects on the fly. + $config = \Drupal::config('config_test.new') + ->set('language', 'original') + ->set('label', 'Original') + ->save(); + $this->assertTrue($config->isNew(), 'The configuration object config_test.new is new'); \Drupal::languageManager() ->getLanguageConfigOverride('de', 'config_test.new') ->set('language', 'override') + ->set('label', 'Override') ->save(); - $config = \Drupal::config('config_test.new'); - $this->assertTrue($config->isNew(), 'The configuration object config_test.new is new'); $this->assertIdentical($config->get('language'), 'override'); $old_state = \Drupal::configFactory()->getOverrideState(); \Drupal::configFactory()->setOverrideState(FALSE); $config = \Drupal::config('config_test.new'); - $this->assertIdentical($config->get('language'), NULL); + $this->assertIdentical($config->get('language'), 'original'); \Drupal::configFactory()->setOverrideState($old_state); + + // Ensure renaming the config will rename the override. + \Drupal::configFactory()->rename('config_test.new', 'config_test.latest'); + $config = \Drupal::config('config_test.latest'); + $this->assertEqual($config->get('language'), 'original'); + $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.new'); + $this->assertTrue($override->isNew()); + $this->assertEqual($override->get('language'), NULL); + $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.latest'); + $this->assertFalse($override->isNew()); + $this->assertEqual($override->get('language'), 'override'); + + // Ensure changing data in the config will update the override. + \Drupal::config('config_test.latest')->clear('language')->save(); + $this->assertEqual($override->get('language'), NULL); + $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.latest'); + $this->assertFalse($override->isNew()); + $this->assertEqual($override->get('language'), NULL); + + // Ensure deleting the config will delete the override. + \Drupal::configFactory()->get('config_test.latest')->delete(); + $override = \Drupal::languageManager()->getLanguageConfigOverride('de', 'config_test.latest'); + $this->assertTrue($override->isNew()); + $this->assertEqual($override->get('language'), NULL); } } diff --git a/core/modules/language/src/Config/LanguageConfigFactoryOverride.php b/core/modules/language/src/Config/LanguageConfigFactoryOverride.php index 60f895c..ddf738f 100644 --- a/core/modules/language/src/Config/LanguageConfigFactoryOverride.php +++ b/core/modules/language/src/Config/LanguageConfigFactoryOverride.php @@ -212,7 +212,7 @@ public function onConfigSave(ConfigCrudEvent $event) { $config = $event->getConfig(); $name = $config->getName(); foreach (\Drupal::languageManager()->getLanguages() as $language) { - $config_translation = $this->getOverride($language->getId(), $name); + $config_translation = $this->getOverride($language->getId(), $name); $saved_config = $config_translation->get(); if (empty($saved_config)) { $config_translation->delete();