diff --git a/core/modules/language/config/schema/language.schema.yml b/core/modules/language/config/schema/language.schema.yml index 3bae8a5..0b767ea 100644 --- a/core/modules/language/config/schema/language.schema.yml +++ b/core/modules/language/config/schema/language.schema.yml @@ -105,6 +105,9 @@ language.content_settings.*.*: type: config_entity label: 'Content Language Settings' mapping: + id: + type: string + label: 'ID' entity_type: type: string label: 'Entity Type ID' @@ -118,35 +121,6 @@ language.content_settings.*.*: type: boolean label: 'Show language selector on create and edit pages' -language.settings: - type: mapping - label: 'Language settings' - mapping: - entities: - type: sequence - label: 'Entity type' - sequence: - - type: sequence - label: 'Bundle' - sequence: - - type: mapping - label: 'Custom language settings' - mapping: - language: - type: mapping - label: 'Custom language settings' - mapping: - default_configuration: - type: mapping - label: 'Default language' - mapping: - langcode: - type: string - label: 'Default language' - language_show: - type: boolean - label: 'Show language selector on create and edit pages' - condition.plugin.language: type: condition.plugin mapping: diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 1e2941b..cb37b16 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -10,7 +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\Entity\ContentLanguageSettings; use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUI; use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl; use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrlFallback; @@ -198,7 +198,7 @@ function language_configuration_element_submit(&$form, FormStateInterface $form_ * - language_show: if the language element should be hidden or not. */ function language_save_default_configuration($entity_type, $bundle, $values = array()) { - $config = ContentBundleLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); if (isset($values['langcode'])) { $config->setDefaultLangcode(String::checkPlain($values['langcode'])); } @@ -222,7 +222,7 @@ 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) { - $config = ContentBundleLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); return ['langcode' => $config->getDefaultLangcode(), 'language_show' => $config->getLanguageShow()]; } @@ -235,7 +235,10 @@ function language_get_default_configuration($entity_type, $bundle) { * A string representing the bundle. */ function language_clear_default_configuration($entity_type, $bundle) { - ContentBundleLanguageSettings::deleteByEntityTypeBundle($entity_type, $bundle); + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); + if (!$config->isNew()) { + $config->delete(); + } } /** diff --git a/core/modules/language/src/Entity/ContentBundleLanguageSettings.php b/core/modules/language/src/Entity/ContentLanguageSettings.php similarity index 60% rename from core/modules/language/src/Entity/ContentBundleLanguageSettings.php rename to core/modules/language/src/Entity/ContentLanguageSettings.php index c11402c..cbbf268 100644 --- a/core/modules/language/src/Entity/ContentBundleLanguageSettings.php +++ b/core/modules/language/src/Entity/ContentLanguageSettings.php @@ -8,6 +8,7 @@ namespace Drupal\language\Entity; use Drupal\Core\Config\Entity\ConfigEntityBase; +use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Language\LanguageInterface; @@ -15,8 +16,8 @@ * Defines the ContentLanguageSettings entity. * * @ConfigEntityType( - * id = "content_language_settings", - * label = @Translation("Content Bundle Language Settings"), + * id = "language_content_settings", + * label = @Translation("Content Language Settings"), * admin_permission = "administer languages", * config_prefix = "content_settings", * entity_keys = { @@ -24,7 +25,14 @@ * }, * ) */ -class ContentBundleLanguageSettings extends ConfigEntityBase { +class ContentLanguageSettings extends ConfigEntityBase { + + /** + * The id. Combination of $entity_type.$bundle. + * + * @var string + */ + protected $id; /** * The entity type (machine name). @@ -40,20 +48,19 @@ class ContentBundleLanguageSettings extends ConfigEntityBase { */ protected $bundle; - /** - * @var string $default_langcode + * The default language code. + * + * @var string */ - protected $default_langcode; + protected $default_langcode = LanguageInterface::LANGCODE_SITE_DEFAULT; /** - * @var boolean $language_show + * Indicates if the language is exposed or not. + * + * @var bool */ - protected $language_show; - - public function __construct(array $values, $entity_type = 'content_language_settings') { - parent::__construct($values, $entity_type); - } + protected $language_show = FALSE; /** * {@inheritdoc} @@ -63,6 +70,8 @@ public function id() { } /** + * Sets the default language code. + * * @param string $default_langcode * * @return $this; @@ -74,6 +83,8 @@ public function setDefaultLangcode($default_langcode) { } /** + * Gets the default language code. + * * @return string */ public function getDefaultLangcode() { @@ -81,7 +92,9 @@ public function getDefaultLangcode() { } /** - * @param boolean $language_show + * Sets if the language must be exposed or not. + * + * @param bool $language_show * * @return $this */ @@ -92,13 +105,30 @@ public function setLanguageShow($language_show) { } /** - * @return boolean + * Checks if the language must be exposed or not. + * + * @return bool */ public function getLanguageShow() { return $this->language_show; } /** + * Overrides \Drupal\Core\Entity\Entity::preSave(). + * + * @throws \Drupal\Core\Field\FieldException + * If the field definition is invalid. + * @throws \Drupal\Core\Entity\EntityStorageException + * In case of failures at the configuration storage level. + */ + public function preSave(EntityStorageInterface $storage) { + if ($this->isNew()) { + $this->id = $this->id(); + } + parent::preSave($storage); + } + + /** * Checks if this config object differs from default values in any property. * * @return bool @@ -121,17 +151,11 @@ public function differsFromDefaultConfiguration() { * sensible default values. */ public static function loadByEntityTypeBundle($entity_type_id, $bundle) { - $config = \Drupal::entityManager()->getStorage('content_language_settings')->load($entity_type_id . '.' . $bundle); + $config = \Drupal::entityManager()->getStorage('language_content_settings')->load($entity_type_id . '.' . $bundle); if ($config == NULL) { - $config = new ContentBundleLanguageSettings(['entity_type' => $entity_type_id, 'bundle' => $bundle]); - $config->setDefaultLangcode(LanguageInterface::LANGCODE_SITE_DEFAULT) - ->setLanguageShow(false); + $config = ContentLanguageSettings::create(['entity_type' => $entity_type_id, 'bundle' => $bundle]); } 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 05e56db..b10da59 100644 --- a/core/modules/language/src/Form/ContentLanguageSettingsForm.php +++ b/core/modules/language/src/Form/ContentLanguageSettingsForm.php @@ -12,7 +12,7 @@ use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\LanguageInterface; -use Drupal\language\Entity\ContentBundleLanguageSettings; +use Drupal\language\Entity\ContentLanguageSettings; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -77,7 +77,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { // Check whether we have any custom setting. foreach ($bundles[$entity_type_id] as $bundle => $bundle_info) { - $config = ContentBundleLanguageSettings::loadByEntityTypeBundle($entity_type_id, $bundle); + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type_id, $bundle); if ($config->differsFromDefaultConfiguration()) { $default[$entity_type_id] = $entity_type_id; } @@ -149,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(['entity_type'=> $entity_type, 'bundle' => $bundle]); + $config = ContentLanguageSettings::create(['entity_type'=> $entity_type, 'bundle' => $bundle]); $config->setDefaultLangcode($bundle_settings['settings']['language']['langcode']) ->setLanguageShow($bundle_settings['settings']['language']['language_show']) ->save();