diff --git a/core/modules/language/config/schema/language.schema.yml b/core/modules/language/config/schema/language.schema.yml index 3efe5d0..3bae8a5 100644 --- a/core/modules/language/config/schema/language.schema.yml +++ b/core/modules/language/config/schema/language.schema.yml @@ -101,26 +101,22 @@ language.entity.*: type: boolean label: 'Locked' -language.content_settings.*: +language.content_settings.*.*: type: config_entity label: 'Content Language Settings' mapping: - id: + entity_type: type: string - label: 'ID' - entities: - type: sequence - label: 'Entity type' - sequence: - - type: mapping - label: 'Bundle' - mapping: - langcode: - type: string - label: 'Default language' - language_show: - type: boolean - label: 'Show language selector on create and edit pages' + label: 'Entity Type ID' + bundle: + type: string + label: 'Bundle' + default_langcode: + type: string + label: 'Default language' + language_show: + type: boolean + label: 'Show language selector on create and edit pages' language.settings: type: mapping diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 9bbbd10..eb14412 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -10,6 +10,7 @@ use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\language\Entity\ConfigurableLanguage; +use Drupal\language\Entity\ContentBundleLanguageSettings; use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUI; use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl; use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrlFallback; @@ -215,12 +216,8 @@ function language_save_default_configuration($entity_type, $bundle, $values = ar * - language_show: if the language element is hidden or not. */ function language_get_default_configuration($entity_type, $bundle) { - $configuration = \Drupal::config('language.content_settings.' . String::checkPlain($entity_type))->get('entities.'. $bundle); - if (is_null($configuration)) { - $configuration = array(); - } - $configuration += array('langcode' => LanguageInterface::LANGCODE_SITE_DEFAULT, 'language_show' => FALSE); - return $configuration; + $config = ContentBundleLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); + return ['language_show' => $config->getLanguageShow(), 'langcode' => $config->getDefaultLangcode()]; } /** @@ -232,7 +229,7 @@ function language_get_default_configuration($entity_type, $bundle) { * A string representing the bundle. */ function language_clear_default_configuration($entity_type, $bundle) { - \Drupal::config('language.content_settings.' . String::checkPlain($entity_type))->clear('entities.'. $bundle); + ContentBundleLanguageSettings::deleteByEntityTypeBundle($entity_type, $bundle); } /** diff --git a/core/modules/language/src/Entity/ContentBundleLanguageSettings.php b/core/modules/language/src/Entity/ContentBundleLanguageSettings.php index e924733..31c789e 100644 --- a/core/modules/language/src/Entity/ContentBundleLanguageSettings.php +++ b/core/modules/language/src/Entity/ContentBundleLanguageSettings.php @@ -23,8 +23,7 @@ * admin_permission = "administer languages", * config_prefix = "content_settings", * entity_keys = { - * "id" = "entityType", - * "bundle" = "bundle", + * "id" = "id", * }, * ) */ @@ -35,7 +34,7 @@ class ContentBundleLanguageSettings extends ConfigEntityBase { * * @var string */ - protected $entityType; + protected $entity_type; /** * The bundle (machine name). @@ -48,12 +47,12 @@ class ContentBundleLanguageSettings extends ConfigEntityBase { /** * @var string $defaultLangcode */ - private $defaultLangcode; + protected $default_langcode; /** * @var boolean $languageShow */ - private $languageShow; + protected $language_show; public function __construct(array $values, $entity_type = 'content_language_settings') { parent::__construct($values, $entity_type); @@ -63,7 +62,7 @@ public function __construct(array $values, $entity_type = 'content_language_sett * {@inheritdoc} */ public function id() { - return $this->entityType . '.' . $this->bundle; + return $this->entity_type . '.' . $this->bundle; } /** @@ -72,7 +71,7 @@ public function id() { * @return $this; */ public function setDefaultLangcode($default_langcode) { - $this->defaultLangcode = $default_langcode; + $this->default_langcode = $default_langcode; return $this; } @@ -81,7 +80,7 @@ public function setDefaultLangcode($default_langcode) { * @return string */ public function getDefaultLangcode() { - return $this->defaultLangcode; + return $this->default_langcode; } /** @@ -90,7 +89,7 @@ public function getDefaultLangcode() { * @return $this */ public function setLanguageShow($language_show) { - $this->languageShow = $language_show; + $this->language_show = $language_show; return $this; } @@ -99,7 +98,7 @@ public function setLanguageShow($language_show) { * @return boolean */ public function getLanguageShow() { - return $this->languageShow; + return $this->language_show; } /** @@ -109,7 +108,7 @@ public function getLanguageShow() { * True if any of the properties are the default values. False otherwise. */ public function differsFromDefaultConfiguration() { - return ($this->languageShow || $this->defaultLangcode != LanguageInterface::LANGCODE_SITE_DEFAULT); + return ($this->language_show || $this->default_langcode != LanguageInterface::LANGCODE_SITE_DEFAULT); } /** @@ -127,11 +126,15 @@ public function differsFromDefaultConfiguration() { public static function loadByEntityTypeBundle($entity_type_id, $bundle) { $config = \Drupal::entityManager()->getStorage('content_language_settings')->load($entity_type_id . '.' . $bundle); if ($config == NULL) { - $config = new ContentBundleLanguageSettings(['entityType' => $entity_type_id, 'bundle' => $bundle]); + $config = new ContentBundleLanguageSettings(['entity_type' => $entity_type_id, 'bundle' => $bundle]); $config->setDefaultLangcode(LanguageInterface::LANGCODE_SITE_DEFAULT) ->setLanguageShow(false); } return $config; } + public static function deleteByEntityTypeBundle($entity_type_id, $bundle) { + \Drupal::entityManager()->getStorage('content_language_settings')->load($entity_type_id . '.' . $bundle)->delete(); + } + } diff --git a/core/modules/language/src/Form/ContentLanguageSettingsForm.php b/core/modules/language/src/Form/ContentLanguageSettingsForm.php index b5ee7ee..88cd485 100644 --- a/core/modules/language/src/Form/ContentLanguageSettingsForm.php +++ b/core/modules/language/src/Form/ContentLanguageSettingsForm.php @@ -81,7 +81,8 @@ public function buildForm(array $form, FormStateInterface $form_state) { if ($config->differsFromDefaultConfiguration()) { $default[$entity_type_id] = $entity_type_id; } - $language_configuration[$entity_type_id][$bundle] = $config; + $language_configuration[$entity_type_id][$bundle]['language_show'] = $config->getLanguageShow(); + $language_configuration[$entity_type_id][$bundle]['default_langcode'] = $config->getDefaultLangcode(); } } @@ -148,7 +149,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { public function submitForm(array &$form, FormStateInterface $form_state) { foreach ($form_state->getValue('settings') as $entity_type => $entity_settings) { foreach ($entity_settings as $bundle => $bundle_settings) { - $config = new ContentBundleLanguageSettings(['entityType'=> $entity_type, 'bundle' => $bundle]); + $config = new ContentBundleLanguageSettings(['entity_type'=> $entity_type, 'bundle' => $bundle]); $config->setDefaultLangcode($bundle_settings['settings']['language']['langcode']) ->setLanguageShow($bundle_settings['settings']['language']['language_show']) ->save(); diff --git a/core/modules/language/src/Tests/LanguageConfigSchemaTest.php b/core/modules/language/src/Tests/LanguageConfigSchemaTest.php index eb39614..66fc831 100644 --- a/core/modules/language/src/Tests/LanguageConfigSchemaTest.php +++ b/core/modules/language/src/Tests/LanguageConfigSchemaTest.php @@ -65,11 +65,11 @@ function testValidLanguageConfigSchema() { $this->drupalPostForm($settings_path, $edit, t('Save configuration')); - $config_data = \Drupal::config('language.content_settings.menu_link_content')->get(); + $config_data = \Drupal::config('language.content_settings.menu_link_content.menu_link_content')->get(); // Make sure configuration saved correctly. - $this->assertTrue($config_data['entities']['menu_link_content']['language_show']); + $this->assertTrue($config_data['language_show']); - $this->assertConfigSchema(\Drupal::service('config.typed'), 'language.content_settings.menu_link_content', $config_data); + $this->assertConfigSchema(\Drupal::service('config.typed'), 'language.content_settings.menu_link_content.menu_link_content', $config_data); } }