diff --git a/core/modules/block_content/src/BlockContentForm.php b/core/modules/block_content/src/BlockContentForm.php index 769a7f3..887c44b 100644 --- a/core/modules/block_content/src/BlockContentForm.php +++ b/core/modules/block_content/src/BlockContentForm.php @@ -118,7 +118,7 @@ public function form(array $form, FormStateInterface $form_state) { '#type' => 'language_select', '#default_value' => $block->getUntranslated()->language()->getId(), '#languages' => LanguageInterface::STATE_ALL, - '#access' => isset($language_configuration['language_show']) && $language_configuration['language_show'], + '#access' => isset($language_configuration['language_alterable']) && $language_configuration['language_alterable'], ); $form['advanced'] = array( diff --git a/core/modules/comment/src/CommentForm.php b/core/modules/comment/src/CommentForm.php index 35e033d..bf81415 100644 --- a/core/modules/comment/src/CommentForm.php +++ b/core/modules/comment/src/CommentForm.php @@ -167,7 +167,7 @@ public function form(array $form, FormStateInterface $form_state) { '#type' => 'language_select', '#default_value' => $comment->getUntranslated()->language()->getId(), '#languages' => Language::STATE_ALL, - '#access' => isset($language_configuration['language_show']) && $language_configuration['language_show'], + '#access' => isset($language_configuration['language_alterable']) && $language_configuration['language_alterable'], ); // Add author email and homepage fields depending on the current user. diff --git a/core/modules/comment/src/Tests/CommentLanguageTest.php b/core/modules/comment/src/Tests/CommentLanguageTest.php index 746aea4..7489adf 100644 --- a/core/modules/comment/src/Tests/CommentLanguageTest.php +++ b/core/modules/comment/src/Tests/CommentLanguageTest.php @@ -44,7 +44,7 @@ protected function setUp() { $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add language')); // Set "Article" content type to use multilingual support. - $edit = array('language_configuration[language_show]' => TRUE); + $edit = array('language_configuration[language_alterable]' => TRUE); $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type')); // Enable content language negotiation UI. diff --git a/core/modules/contact/src/MessageForm.php b/core/modules/contact/src/MessageForm.php index 0e280cb..41c7f37 100644 --- a/core/modules/contact/src/MessageForm.php +++ b/core/modules/contact/src/MessageForm.php @@ -104,7 +104,7 @@ public function form(array $form, FormStateInterface $form_state) { '#type' => 'language_select', '#default_value' => $message->getUntranslated()->language()->getId(), '#languages' => Language::STATE_ALL, - '#access' => isset($language_configuration['language_show']) && $language_configuration['language_show'], + '#access' => isset($language_configuration['language_alterable']) && $language_configuration['language_alterable'], ); $form['name'] = array( diff --git a/core/modules/content_translation/content_translation.admin.inc b/core/modules/content_translation/content_translation.admin.inc index 231dbc6..6957232 100644 --- a/core/modules/content_translation/content_translation.admin.inc +++ b/core/modules/content_translation/content_translation.admin.inc @@ -267,7 +267,7 @@ function content_translation_form_language_content_settings_validate(array $form } $values = $bundle_settings['settings']['language']; - if (empty($values['language_show']) && \Drupal::languageManager()->isLanguageLocked($values['langcode'])) { + if (empty($values['language_alterable']) && \Drupal::languageManager()->isLanguageLocked($values['langcode'])) { foreach (\Drupal::languageManager()->getLanguages(LanguageInterface::STATE_LOCKED) as $language) { $locked_languages[] = $language->getName(); } diff --git a/core/modules/content_translation/content_translation.admin.js b/core/modules/content_translation/content_translation.admin.js index 109cb34..c10efa1 100644 --- a/core/modules/content_translation/content_translation.admin.js +++ b/core/modules/content_translation/content_translation.admin.js @@ -90,7 +90,7 @@ var $settings = $bundleSettings.nextUntil('.bundle-settings'); var $fieldSettings = $settings.filter('.field-settings'); if ($target.is(':checked')) { - $bundleSettings.find('.operations :input[name$="[language_show]"]').prop('checked', true); + $bundleSettings.find('.operations :input[name$="[language_alterable]"]').prop('checked', true); $fieldSettings.find('.translatable :input').prop('checked', true); $settings.show(); } diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module index ffa5d89..df1e077 100644 --- a/core/modules/content_translation/content_translation.module +++ b/core/modules/content_translation/content_translation.module @@ -675,7 +675,7 @@ function content_translation_language_configuration_element_process(array $eleme function content_translation_language_configuration_element_validate($element, FormStateInterface $form_state, array $form) { $key = $form_state->get(['content_translation', 'key']); $values = $form_state->getValue($key); - if (!$values['language_show'] && $values['content_translation'] && \Drupal::languageManager()->isLanguageLocked($values['langcode'])) { + if (!$values['language_alterable'] && $values['content_translation'] && \Drupal::languageManager()->isLanguageLocked($values['langcode'])) { foreach (\Drupal::languageManager()->getLanguages(LanguageInterface::STATE_LOCKED) as $language) { $locked_languages[] = $language->getName(); } diff --git a/core/modules/content_translation/src/Tests/ContentTranslationContextualLinksTest.php b/core/modules/content_translation/src/Tests/ContentTranslationContextualLinksTest.php index b8234b3..f3f0380 100644 --- a/core/modules/content_translation/src/Tests/ContentTranslationContextualLinksTest.php +++ b/core/modules/content_translation/src/Tests/ContentTranslationContextualLinksTest.php @@ -102,7 +102,7 @@ protected function setUp() { // Enable content translation. $configuration = array( 'langcode' => language_default()->getId(), - 'language_show' => TRUE, + 'language_alterable' => TRUE, ); language_save_default_configuration('node', $this->bundle, $configuration); // Create a translator user. diff --git a/core/modules/content_translation/src/Tests/ContentTranslationSettingsTest.php b/core/modules/content_translation/src/Tests/ContentTranslationSettingsTest.php index ea28195..9a572ea 100644 --- a/core/modules/content_translation/src/Tests/ContentTranslationSettingsTest.php +++ b/core/modules/content_translation/src/Tests/ContentTranslationSettingsTest.php @@ -87,7 +87,7 @@ function testSettingsUI() { $edit = array( 'entity_types[comment]' => TRUE, 'settings[comment][comment_article][settings][language][langcode]' => Language::LANGCODE_NOT_SPECIFIED, - 'settings[comment][comment_article][settings][language][language_show]' => FALSE, + 'settings[comment][comment_article][settings][language][language_alterable]' => FALSE, 'settings[comment][comment_article][translatable]' => TRUE, 'settings[comment][comment_article][fields][comment_body]' => TRUE, ); @@ -99,7 +99,7 @@ function testSettingsUI() { $edit = array( 'entity_types[comment]' => TRUE, 'settings[comment][comment_article][settings][language][langcode]' => 'current_interface', - 'settings[comment][comment_article][settings][language][language_show]' => TRUE, + 'settings[comment][comment_article][settings][language][language_alterable]' => TRUE, 'settings[comment][comment_article][translatable]' => TRUE, 'settings[comment][comment_article][fields][comment_body]' => TRUE, // Override both comment subject fields to untranslatable. @@ -133,7 +133,7 @@ function testSettingsUI() { // Test that language settings are correctly stored. $language_configuration = language_get_default_configuration('comment', 'comment_article'); $this->assertEqual($language_configuration['langcode'], 'current_interface', 'The default language for article comments is set to the current interface language.'); - $this->assertTrue($language_configuration['language_show'], 'The language selector for article comments is shown.'); + $this->assertTrue($language_configuration['language_alterable'], 'The language selector for article comments is shown.'); // Verify language widget appears on comment type form. $this->drupalGet('admin/structure/comment/manage/comment_article'); @@ -156,7 +156,7 @@ function testSettingsUI() { $edit = array( 'entity_types[node]' => TRUE, 'settings[node][article][settings][language][langcode]' => 'current_interface', - 'settings[node][article][settings][language][language_show]' => TRUE, + 'settings[node][article][settings][language][language_alterable]' => TRUE, 'settings[node][article][translatable]' => TRUE, 'settings[node][article][fields][title]' => TRUE ); @@ -255,7 +255,7 @@ function testFieldTranslatableSettingsUI() { // Note: this field is not translatable when enable bundle translatability. $edit = array( 'entity_types[node]' => TRUE, - 'settings[node][article][settings][language][language_show]' => TRUE, + 'settings[node][article][settings][language][language_alterable]' => TRUE, 'settings[node][article][translatable]' => TRUE, 'settings[node][article][fields][article_text]' => TRUE, ); diff --git a/core/modules/language/config/schema/language.schema.yml b/core/modules/language/config/schema/language.schema.yml index 2633fdc..24025f2 100644 --- a/core/modules/language/config/schema/language.schema.yml +++ b/core/modules/language/config/schema/language.schema.yml @@ -101,34 +101,30 @@ language.entity.*: type: boolean label: 'Locked' -language.settings: - type: mapping - label: 'Language settings' +language.content_settings.*.*: + type: config_entity + label: 'Content Language Settings' mapping: - entities: + id: + type: string + label: 'ID' + target_entity_type_id: + type: string + label: 'Entity Type ID' + target_bundle: + type: string + label: 'Bundle' + default_langcode: + type: string + label: 'Default language' + language_alterable: + type: boolean + label: 'Allow to alter the language' + third_party_settings: type: sequence - label: 'Entity type' + label: 'Third party settings' 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' + - type: content_settings.third_party.[%key] condition.plugin.language: type: condition.plugin diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 6901c91..e464c3b 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -5,14 +5,18 @@ * Add language handling functionality to Drupal. */ +use Drupal\Component\Utility\String; +use Drupal\Core\Entity\ContentEntityType; +use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Entity\EntityForm; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\language\ConfigurableLanguageInterface; +use Drupal\language\Entity\ContentLanguageSettings; use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUI; use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl; use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrlFallback; -use Drupal\node\NodeTypeInterface; /** * Implements hook_help(). @@ -178,7 +182,24 @@ function language_configuration_element_submit(&$form, FormStateInterface $form_ // values. if ($language = $form_state->get('language')) { foreach ($language as $element_name => $values) { - language_save_default_configuration($values['entity_type'], $values['bundle'], $form_state->getValue($element_name)); + $entity_type_id = $values['entity_type']; + $bundle = $values['bundle']; + // In case we are editing a bundle, we must check the new bundle name, + // because e.g. hook_ENTITY_update fired before. + $form_object = $form_state->getFormObject(); + if ($form_object instanceof EntityForm && !$form_object->getEntity()->isNew()) { + /** @var EntityForm $form_object */ + $entity = $form_object->getEntity(); + $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id); + if ($entity_type->getBundleOf()) { + $bundle = $entity->id(); + } + } + /** @var ContentLanguageSettings $config */ + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type_id, $bundle); + $config->setDefaultLangcode($form_state->getValue(array($element_name, 'langcode'))); + $config->setLanguageAlterable($form_state->getValue(array($element_name, 'language_alterable'))); + $config->save(); } } } @@ -193,10 +214,21 @@ function language_configuration_element_submit(&$form, FormStateInterface $form_ * @param array $values * An array holding the values to be saved having the following keys: * - langcode: the language code. - * - language_show: if the language element should be hidden or not. + * - language_alterable: if the language element should be hidden or not. + * + * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 8.0.0. + * Create and save a \Drupal\language\Entity\ContentLanguageSettings config + * entity instead. */ function language_save_default_configuration($entity_type, $bundle, $values = array()) { - \Drupal::config('language.settings')->set(language_get_default_configuration_settings_key($entity_type, $bundle), array('langcode' => $values['langcode'], 'language_show' => $values['language_show']))->save(); + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); + if (isset($values['langcode'])) { + $config->setDefaultLangcode(String::checkPlain($values['langcode'])); + } + if (isset($values['language_alterable'])) { + $config->setLanguageAlterable(String::checkPlain($values['language_alterable'])); + } + $config->save(); } /** @@ -210,15 +242,16 @@ function language_save_default_configuration($entity_type, $bundle, $values = ar * @return array * An array with the following keys: * - langcode: the language code. - * - language_show: if the language element is hidden or not. + * - language_alterable: if the language element is hidden or not. + * + * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 8.0.0. + * Call + * \Drupal\language\Entity\ContentLanguageSettings::loadByEntityTypeBundle + * instead. */ function language_get_default_configuration($entity_type, $bundle) { - $configuration = \Drupal::config('language.settings')->get(language_get_default_configuration_settings_key($entity_type, $bundle)); - if (is_null($configuration)) { - $configuration = array(); - } - $configuration += array('langcode' => LanguageInterface::LANGCODE_SITE_DEFAULT, 'language_show' => FALSE); - return $configuration; + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); + return ['langcode' => $config->getDefaultLangcode(), 'language_alterable' => $config->isLanguageAlterable()]; } /** @@ -228,40 +261,26 @@ function language_get_default_configuration($entity_type, $bundle) { * A string representing the entity type. * @param string $bundle * A string representing the bundle. - */ -function language_clear_default_configuration($entity_type, $bundle) { - \Drupal::config('language.settings')->clear(language_get_default_configuration_settings_key($entity_type, $bundle))->save(); -} - -/** - * Returns the root name of the variables used to store the configuration. * - * Based on the entity type and bundle, the variables used to store the - * configuration will have a common root name. - * - * @param string $entity_type - * A string representing the entity type. - * @param string $bundle - * A string representing the bundle. - * - * @return string - * The root name of the variables. + * @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 8.0.0. + * Call + * \Drupal\language\Entity\ContentLanguageSettings::loadByEntityTypeBundle + * and if the returned config entity is new, delete it. */ -function language_get_default_configuration_settings_key($entity_type, $bundle) { - // Replace all the characters that are not letters, numbers or "_" with "_". - $entity_type = preg_replace('/[^0-9a-zA-Z_]/', "_", $entity_type); - $bundle = preg_replace('/[^0-9a-zA-Z_]/', "_", $bundle); - return 'entities.' . $entity_type . '.' . $bundle . '.language.default_configuration'; +function language_clear_default_configuration($entity_type, $bundle) { + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); + if (!$config->isNew()) { + $config->delete(); + } } /** - * Implements hook_ENTITY_TYPE_update() for node_type entities. + * Implements hook_entity_bundle_rename(). */ -function language_node_type_update(NodeTypeInterface $type) { - if ($type->original->id() != $type->id()) { - language_save_default_configuration('node', $type->id(), language_get_default_configuration('node', $type->original->id())); - language_clear_default_configuration('node', $type->original->id()); - } +function language_entity_bundle_rename($entity_type_id, $bundle_old, $bundle_new) { + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type_id, $bundle_old); + $config->setTargetBundle($bundle_new); + $config->save(); } /** diff --git a/core/modules/language/src/ContentLanguageSettingsInterface.php b/core/modules/language/src/ContentLanguageSettingsInterface.php new file mode 100644 index 0000000..206bd14 --- /dev/null +++ b/core/modules/language/src/ContentLanguageSettingsInterface.php @@ -0,0 +1,99 @@ + isset($element['#default_value']['langcode']) ? $element['#default_value']['langcode'] : NULL, ); - $element['language_show'] = array( + $element['language_alterable'] = array( '#type' => 'checkbox', '#title' => t('Show language selector on create and edit pages'), - '#default_value' => isset($element['#default_value']['language_show']) ? $element['#default_value']['language_show'] : NULL, + '#default_value' => isset($element['#default_value']['language_alterable']) ? $element['#default_value']['language_alterable'] : NULL, ); // Add the entity type and bundle information to the form if they are set. diff --git a/core/modules/language/src/Entity/ContentLanguageSettings.php b/core/modules/language/src/Entity/ContentLanguageSettings.php new file mode 100644 index 0000000..11ef39c --- /dev/null +++ b/core/modules/language/src/Entity/ContentLanguageSettings.php @@ -0,0 +1,171 @@ +target_entity_type_id . '.' . $this->target_bundle; + } + + /** + * {@inheritdoc} + */ + public function getTargetEntityTypeId() { + return $this->target_entity_type_id; + } + + /** + * {@inheritdoc} + */ + public function getTargetBundle() { + return $this->target_bundle; + } + + /** + * {@inheritdoc} + */ + public function setTargetBundle($target_bundle) { + $this->target_bundle = $target_bundle; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setDefaultLangcode($default_langcode) { + $this->default_langcode = $default_langcode; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getDefaultLangcode() { + return $this->default_langcode; + } + + /** + * {@inheritdoc} + */ + public function setLanguageAlterable($language_alterable) { + $this->language_alterable = $language_alterable; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function isLanguageAlterable() { + return $this->language_alterable; + } + + /** + * {@inheritdoc} + */ + public function preSave(EntityStorageInterface $storage) { + $this->id = $this->id(); + parent::preSave($storage); + } + + /** + * {@inheritdoc} + */ + public function isDefaultConfiguration() { + return (!$this->language_alterable && $this->default_langcode == LanguageInterface::LANGCODE_SITE_DEFAULT); + } + + /** + * {@inheritdoc} + */ + public static function loadByEntityTypeBundle($entity_type_id, $bundle) { + $config = \Drupal::entityManager()->getStorage('language_content_settings')->load($entity_type_id . '.' . $bundle); + if ($config == NULL) { + $config = ContentLanguageSettings::create(['target_entity_type_id' => $entity_type_id, 'target_bundle' => $bundle]); + } + return $config; + } + + /** + * {@inheritdoc} + */ + public function calculateDependencies() { + parent::calculateDependencies(); + $bundle_entity_type_id = $this->entityManager()->getDefinition($this->target_entity_type_id)->getBundleEntityType(); + if ($bundle_entity_type_id != 'bundle') { + // If the target entity type uses entities to manage its bundles then + // depend on the bundle entity. + $bundle_entity = $this->entityManager()->getStorage($bundle_entity_type_id)->load($this->target_bundle); + $this->addDependency('config', $bundle_entity->getConfigDependencyName()); + } + return $this->dependencies; + } + +} diff --git a/core/modules/language/src/Form/ContentLanguageSettingsForm.php b/core/modules/language/src/Form/ContentLanguageSettingsForm.php index a415379..63ffd7e 100644 --- a/core/modules/language/src/Form/ContentLanguageSettingsForm.php +++ b/core/modules/language/src/Form/ContentLanguageSettingsForm.php @@ -11,7 +11,7 @@ use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Language\LanguageInterface; +use Drupal\language\Entity\ContentLanguageSettings; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -76,11 +76,12 @@ public function buildForm(array $form, FormStateInterface $form_state) { // Check whether we have any custom setting. foreach ($bundles[$entity_type_id] as $bundle => $bundle_info) { - $conf = language_get_default_configuration($entity_type_id, $bundle); - if (!empty($conf['language_show']) || $conf['langcode'] != LanguageInterface::LANGCODE_SITE_DEFAULT) { + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type_id, $bundle); + if (!$config->isDefaultConfiguration()) { $default[$entity_type_id] = $entity_type_id; } - $language_configuration[$entity_type_id][$bundle] = $conf; + $language_configuration[$entity_type_id][$bundle]['language_alterable'] = $config->isLanguageAlterable(); + $language_configuration[$entity_type_id][$bundle]['langcode'] = $config->getDefaultLangcode(); } } @@ -145,16 +146,14 @@ public function buildForm(array $form, FormStateInterface $form_state) { * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { - $config = $this->config('language.settings'); foreach ($form_state->getValue('settings') as $entity_type => $entity_settings) { foreach ($entity_settings as $bundle => $bundle_settings) { - $config->set(language_get_default_configuration_settings_key($entity_type, $bundle), array( - 'langcode' => $bundle_settings['settings']['language']['langcode'], - 'language_show' => $bundle_settings['settings']['language']['language_show'], - )); + $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle); + $config->setDefaultLangcode($bundle_settings['settings']['language']['langcode']) + ->setLanguageAlterable($bundle_settings['settings']['language']['language_alterable']) + ->save(); } } - $config->save(); drupal_set_message($this->t('Settings successfully updated.')); } diff --git a/core/modules/language/src/Tests/EntityDefaultLanguageTest.php b/core/modules/language/src/Tests/EntityDefaultLanguageTest.php index 4c5f3b2..884b8f7 100644 --- a/core/modules/language/src/Tests/EntityDefaultLanguageTest.php +++ b/core/modules/language/src/Tests/EntityDefaultLanguageTest.php @@ -121,7 +121,7 @@ protected function createContentType($name, $langcode) { $content_type->save(); language_save_default_configuration('node', $name, array( 'langcode' => $langcode, - 'language_show' => FALSE, + 'language_alterable' => FALSE, )); } diff --git a/core/modules/language/src/Tests/LanguageConfigSchemaTest.php b/core/modules/language/src/Tests/LanguageConfigSchemaTest.php index aeddc2b..56dd719 100644 --- a/core/modules/language/src/Tests/LanguageConfigSchemaTest.php +++ b/core/modules/language/src/Tests/LanguageConfigSchemaTest.php @@ -56,20 +56,20 @@ function testValidLanguageConfigSchema() { // Enable translation for menu link. $edit['entity_types[menu_link_content]'] = TRUE; - $edit['settings[menu_link_content][menu_link_content][settings][language][language_show]'] = TRUE; + $edit['settings[menu_link_content][menu_link_content][settings][language][language_alterable]'] = TRUE; // Enable translation for user. $edit['entity_types[user]'] = TRUE; - $edit['settings[user][user][settings][language][language_show]'] = TRUE; + $edit['settings[user][user][settings][language][language_alterable]'] = TRUE; $edit['settings[user][user][settings][language][langcode]'] = 'en'; $this->drupalPostForm($settings_path, $edit, t('Save configuration')); - $config_data = \Drupal::config('language.settings')->get(); + $config_data = \Drupal::config('language.content_settings.menu_link_content.menu_link_content'); // Make sure configuration saved correctly. - $this->assertTrue($config_data['entities']['menu_link_content']['menu_link_content']['language']['default_configuration']['language_show']); + $this->assertTrue($config_data->get('language_alterable')); - $this->assertConfigSchema(\Drupal::service('config.typed'), 'language.settings', $config_data); + $this->assertConfigSchema(\Drupal::service('config.typed'), $config_data->getName(), $config_data->get()); } } diff --git a/core/modules/language/src/Tests/LanguageConfigurationElementTest.php b/core/modules/language/src/Tests/LanguageConfigurationElementTest.php index 9b2d82d..cf40bf0 100644 --- a/core/modules/language/src/Tests/LanguageConfigurationElementTest.php +++ b/core/modules/language/src/Tests/LanguageConfigurationElementTest.php @@ -9,6 +9,7 @@ use Drupal\Core\Language\LanguageInterface; use Drupal\language\Entity\ConfigurableLanguage; +use Drupal\language\Entity\ContentLanguageSettings; use Drupal\simpletest\WebTestBase; /** @@ -23,7 +24,7 @@ class LanguageConfigurationElementTest extends WebTestBase { * * @var array */ - public static $modules = array('node', 'language', 'language_elements_test'); + public static $modules = array('taxonomy', 'node', 'language', 'language_elements_test'); /** * Tests the language settings have been saved. @@ -31,30 +32,30 @@ class LanguageConfigurationElementTest extends WebTestBase { public function testLanguageConfigurationElement() { $this->drupalGet('language-tests/language_configuration_element'); $edit['lang_configuration[langcode]'] = 'current_interface'; - $edit['lang_configuration[language_show]'] = FALSE; + $edit['lang_configuration[language_alterable]'] = FALSE; $this->drupalPostForm(NULL, $edit, 'Save'); - $lang_conf = language_get_default_configuration('some_custom_type', 'some_bundle'); + $lang_conf = language_get_default_configuration('entity_test', 'some_bundle'); // Check that the settings have been saved. $this->assertEqual($lang_conf['langcode'], 'current_interface'); - $this->assertFalse($lang_conf['language_show']); + $this->assertFalse($lang_conf['language_alterable']); $this->drupalGet('language-tests/language_configuration_element'); $this->assertOptionSelected('edit-lang-configuration-langcode', 'current_interface'); - $this->assertNoFieldChecked('edit-lang-configuration-language-show'); + $this->assertNoFieldChecked('edit-lang-configuration-language-alterable'); // Reload the page and save again. $this->drupalGet('language-tests/language_configuration_element'); $edit['lang_configuration[langcode]'] = 'authors_default'; - $edit['lang_configuration[language_show]'] = TRUE; + $edit['lang_configuration[language_alterable]'] = TRUE; $this->drupalPostForm(NULL, $edit, 'Save'); - $lang_conf = language_get_default_configuration('some_custom_type', 'some_bundle'); + $lang_conf = language_get_default_configuration('entity_test', 'some_bundle'); // Check that the settings have been saved. $this->assertEqual($lang_conf['langcode'], 'authors_default'); - $this->assertTrue($lang_conf['language_show']); + $this->assertTrue($lang_conf['language_alterable']); $this->drupalGet('language-tests/language_configuration_element'); $this->assertOptionSelected('edit-lang-configuration-langcode', 'authors_default'); - $this->assertFieldChecked('edit-lang-configuration-language-show'); + $this->assertFieldChecked('edit-lang-configuration-language-alterable'); } /** @@ -70,13 +71,13 @@ public function testDefaultLangcode() { } // Fixed language. - language_save_default_configuration('custom_type', 'custom_bundle', array('langcode' => 'bb', 'language_show' => TRUE)); - $langcode = language_get_default_langcode('custom_type', 'custom_bundle'); + language_save_default_configuration('entity_test', 'custom_bundle', array('langcode' => 'bb', 'language_alterable' => TRUE)); + $langcode = language_get_default_langcode('entity_test', 'custom_bundle'); $this->assertEqual($langcode, 'bb'); // Current interface. - language_save_default_configuration('custom_type', 'custom_bundle', array('langcode' => 'current_interface', 'language_show' => TRUE)); - $langcode = language_get_default_langcode('custom_type', 'custom_bundle'); + language_save_default_configuration('entity_test', 'custom_bundle', array('langcode' => 'current_interface', 'language_alterable' => TRUE)); + $langcode = language_get_default_langcode('entity_test', 'custom_bundle'); $language_interface = \Drupal::languageManager()->getCurrentLanguage(); $this->assertEqual($langcode, $language_interface->getId()); @@ -87,8 +88,8 @@ public function testDefaultLangcode() { $this->assertTrue($configurable_language->isDefault(), 'The en language entity is flagged as the default language.'); \Drupal::config('system.site')->set('langcode', 'cc')->save(); - language_save_default_configuration('custom_type', 'custom_bundle', array('langcode' => LanguageInterface::LANGCODE_SITE_DEFAULT, 'language_show' => TRUE)); - $langcode = language_get_default_langcode('custom_type', 'custom_bundle'); + language_save_default_configuration('entity_test', 'custom_bundle', array('langcode' => LanguageInterface::LANGCODE_SITE_DEFAULT, 'language_alterable' => TRUE)); + $langcode = language_get_default_langcode('entity_test', 'custom_bundle'); $this->assertEqual($langcode, 'cc'); // Ensure the language entity default value is correct. @@ -107,7 +108,7 @@ public function testDefaultLangcode() { $some_user->preferred_langcode = 'bb'; $some_user->save(); $this->drupalLogin($some_user); - language_save_default_configuration('custom_type', 'some_bundle', array('langcode' => 'authors_default', 'language_show' => TRUE)); + language_save_default_configuration('entity_test', 'some_bundle', array('langcode' => 'authors_default', 'language_alterable' => TRUE)); $this->drupalGet('language-tests/language_configuration_element_test'); $this->assertOptionSelected('edit-langcode', 'bb'); } @@ -125,12 +126,13 @@ public function testNodeTypeUpdate() { $this->drupalLogin($admin_user); $edit = array( 'language_configuration[langcode]' => 'current_interface', - 'language_configuration[language_show]' => TRUE, + 'language_configuration[language_alterable]' => TRUE, ); $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type')); // Check the language default configuration for the articles. $configuration = language_get_default_configuration('node', 'article'); - $this->assertEqual($configuration, array('langcode' => 'current_interface', 'language_show' => TRUE), 'The default language configuration has been saved on the Article content type.'); + $uuid = ContentLanguageSettings::loadByEntityTypeBundle('node', 'article')->uuid(); + $this->assertEqual($configuration, array('langcode' => 'current_interface', 'language_alterable' => TRUE), 'The default language configuration has been saved on the Article content type.'); // Rename the article content type. $edit = array( 'type' => 'article_2' @@ -138,6 +140,41 @@ public function testNodeTypeUpdate() { $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type')); // Check that we still have the settings for the new node type. $configuration = language_get_default_configuration('node', 'article_2'); - $this->assertEqual($configuration, array('langcode' => 'current_interface', 'language_show' => TRUE), 'The default language configuration has been kept on the new Article content type.'); + $this->assertEqual($configuration, array('langcode' => 'current_interface', 'language_alterable' => TRUE), 'The default language configuration has been kept on the new Article content type.'); + $this->assertEqual(ContentLanguageSettings::loadByEntityTypeBundle('node', 'article_2')->uuid(), $uuid, 'The language configuration uuid has been kept on the new Article content type.'); } + + /** + * Tests that the configuration is updated when a vocabulary is changed. + */ + public function testTaxonomyVocabularyUpdate() { + $vocabulary = entity_create('taxonomy_vocabulary', array( + 'name' => 'Country', + 'vid' => 'country', + )); + $vocabulary->save(); + + $admin_user = $this->drupalCreateUser(array('administer taxonomy')); + $this->drupalLogin($admin_user); + $edit = array( + 'default_language[langcode]' => 'current_interface', + 'default_language[language_alterable]' => TRUE, + ); + $this->drupalPostForm('admin/structure/taxonomy/manage/country', $edit, t('Save')); + + // Check the language default configuration. + $configuration = language_get_default_configuration('taxonomy_term', 'country'); + $uuid = ContentLanguageSettings::loadByEntityTypeBundle('taxonomy_term', 'country')->uuid(); + $this->assertEqual($configuration, array('langcode' => 'current_interface', 'language_alterable' => TRUE), 'The default language configuration has been saved on the Country vocabulary.'); + // Rename the vocabulary. + $edit = array( + 'vid' => 'nation' + ); + $this->drupalPostForm('admin/structure/taxonomy/manage/country', $edit, t('Save')); + // Check that we still have the settings for the new vocabulary. + $configuration = language_get_default_configuration('taxonomy_term', 'nation'); + $this->assertEqual($configuration, array('langcode' => 'current_interface', 'language_alterable' => TRUE), 'The default language configuration has been kept on the new Country vocabulary.'); + $this->assertEqual(ContentLanguageSettings::loadByEntityTypeBundle('taxonomy_term', 'nation')->uuid(), $uuid, 'The language configuration uuid has been kept on the new Country vocabulary.'); + } + } diff --git a/core/modules/language/tests/language_elements_test/language_elements_test.info.yml b/core/modules/language/tests/language_elements_test/language_elements_test.info.yml index d8a3da1..52ed285 100644 --- a/core/modules/language/tests/language_elements_test/language_elements_test.info.yml +++ b/core/modules/language/tests/language_elements_test/language_elements_test.info.yml @@ -4,3 +4,5 @@ description: 'Support module for the language form elements tests.' core: 8.x package: Testing version: VERSION +dependencies: + - entity_test diff --git a/core/modules/language/tests/language_elements_test/src/Form/LanguageConfigurationElement.php b/core/modules/language/tests/language_elements_test/src/Form/LanguageConfigurationElement.php index f9a0e1b..16129f7 100644 --- a/core/modules/language/tests/language_elements_test/src/Form/LanguageConfigurationElement.php +++ b/core/modules/language/tests/language_elements_test/src/Form/LanguageConfigurationElement.php @@ -25,12 +25,12 @@ public function getFormID() { * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { - $conf = language_get_default_configuration('some_custom_type', 'some_bundle'); + $conf = language_get_default_configuration('entity_test', 'some_bundle'); $form['lang_configuration'] = array( '#type' => 'language_configuration', '#entity_information' => array( - 'entity_type' => 'some_custom_type', + 'entity_type' => 'entity_test', 'bundle' => 'some_bundle', ), '#default_value' => $conf, diff --git a/core/modules/language/tests/language_elements_test/src/Form/LanguageConfigurationElementTest.php b/core/modules/language/tests/language_elements_test/src/Form/LanguageConfigurationElementTest.php index 130c069..eda727a 100644 --- a/core/modules/language/tests/language_elements_test/src/Form/LanguageConfigurationElementTest.php +++ b/core/modules/language/tests/language_elements_test/src/Form/LanguageConfigurationElementTest.php @@ -28,7 +28,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { $form['langcode'] = array( '#title' => t('Language select'), '#type' => 'language_select', - '#default_value' => language_get_default_langcode('custom_type', 'some_bundle'), + '#default_value' => language_get_default_langcode('entity_test', 'some_bundle'), ); return $form; } diff --git a/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php b/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php new file mode 100644 index 0000000..fdacb69 --- /dev/null +++ b/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php @@ -0,0 +1,321 @@ +entityTypeId = $this->randomMachineName(); + $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface'); + + $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface'); + + $this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface'); + + $this->typedConfigManager = $this->getMock('Drupal\Core\Config\TypedConfigManagerInterface'); + + $this->configEntityStorageInterface = $this->getMock('Drupal\Core\Entity\EntityStorageInterface'); + + $container = new ContainerBuilder(); + $container->set('entity.manager', $this->entityManager); + $container->set('uuid', $this->uuid); + $container->set('config.typed', $this->typedConfigManager); + $container->set('config.storage', $this->configEntityStorageInterface); + \Drupal::setContainer($container); + } + + /** + * @covers ::calculateDependencies + */ + public function testCalculateDependencies() { + // Mock the interfaces necessary to create a dependency on a bundle entity. + $bundle_entity = $this->getMock('Drupal\Core\Config\Entity\ConfigEntityInterface'); + $bundle_entity->expects($this->any()) + ->method('getConfigDependencyName') + ->will($this->returnValue('test.test_entity_type.id')); + + $storage = $this->getMock('\Drupal\Core\Config\Entity\ConfigEntityStorageInterface'); + $storage->expects($this->any()) + ->method('load') + ->with('test_bundle') + ->will($this->returnValue($bundle_entity)); + + $this->entityManager->expects($this->any()) + ->method('getStorage') + ->with('bundle_entity_type') + ->will($this->returnValue($storage)); + + $target_entity_type = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface'); + $target_entity_type->expects($this->any()) + ->method('getBundleEntityType') + ->will($this->returnValue('bundle_entity_type')); + + $this->entityManager->expects($this->any()) + ->method('getDefinition') + ->with('test_entity_type') + ->will($this->returnValue($target_entity_type)); + + $config = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_bundle', + ), 'language_content_settings'); + $dependencies = $config->calculateDependencies(); + $this->assertContains('test.test_entity_type.id', $dependencies['config']); + } + + /** + * @covers ::id() + */ + public function testId() { + $config = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_bundle', + ), 'language_content_settings'); + $this->assertSame('test_entity_type.test_bundle', $config->id()); + } + + /** + * @covers ::getTargetEntityTypeId() + */ + public function testTargetEntityTypeId() { + $config = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_bundle', + ), 'language_content_settings'); + $this->assertSame('test_entity_type', $config->getTargetEntityTypeId()); + } + + /** + * @covers ::getTargetBundle() + */ + public function testTargetBundle() { + $config = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_bundle', + ), 'language_content_settings'); + $this->assertSame('test_bundle', $config->getTargetBundle()); + } + + /** + * @covers ::getDefaultLangcode() + * @covers ::setDefaultLangcode() + * + * @dataProvider providerDefaultLangcode + */ + public function testDefaultLangcode(ContentLanguageSettings $config, $expected) { + $this->assertSame($expected, $config->getDefaultLangcode()); + } + + public function providerDefaultLangcode() { + $langcode = $this->randomMachineName(); + $config = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_bundle', + ), 'language_content_settings'); + $config->setDefaultLangcode($langcode); + + $defaultConfig = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_default_language_bundle', + ), 'language_content_settings'); + + return [ + [$config, $langcode], + [$defaultConfig, LanguageInterface::LANGCODE_SITE_DEFAULT], + ]; + } + + /** + * @covers ::setLanguageAlterable() + * @covers ::isLanguageAlterable() + * + * @dataProvider providerLanguageAlterable + */ + public function testLanguageAlterable(ContentLanguageSettings $config, $expected) { + $this->assertSame($expected, $config->isLanguageAlterable()); + } + + public function providerLanguageAlterable() { + $alterableConfig = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_bundle', + ), 'language_content_settings'); + $alterableConfig->setLanguageAlterable(true); + + $nonAlterableConfig = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_fixed_language_bundle', + ), 'language_content_settings'); + $nonAlterableConfig->setLanguageAlterable(false); + + $defaultConfig = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_default_language_bundle', + ), 'language_content_settings'); + + return [ + [$alterableConfig, true], + [$nonAlterableConfig, false], + [$defaultConfig, false], + ]; + } + + /** + * @covers ::isDefaultConfiguration() + * + * @dataProvider providerIsDefaultConfiguration + */ + public function testIsDefaultConfiguration(ContentLanguageSettings $config, $expected) { + $this->assertSame($expected, $config->isDefaultConfiguration()); + } + + public function providerIsDefaultConfiguration() { + $alteredLanguage= new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_bundle', + ), 'language_content_settings'); + $alteredLanguage->setLanguageAlterable(true); + + $alteredDefaultLangcode = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_fixed_language_bundle', + ), 'language_content_settings'); + $alteredDefaultLangcode->setDefaultLangcode($this->randomMachineName()); + + $defaultConfig = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_default_language_bundle', + ), 'language_content_settings'); + + return [ + [$alteredLanguage, false], + [$alteredDefaultLangcode, false], + [$defaultConfig, true], + ]; + } + + /** + * @covers ::loadByEntityTypeBundle() + * + * @dataProvider providerLoadByEntityTypeBundle + */ + public function testLoadByEntityTypeBundle($config_id, ContentLanguageSettings $existing_config = NULL, $expected_langcode, $expected_language_alterable) { + list($type, $bundle) = explode('.', $config_id); + + $nullConfig = new ContentLanguageSettings(array( + 'target_entity_type_id' => $type, + 'target_bundle' => $bundle, + ), 'language_content_settings'); + $this->configEntityStorageInterface + ->expects($this->any()) + ->method('load') + ->with($config_id) + ->will($this->returnValue($existing_config)); + $this->configEntityStorageInterface + ->expects($this->any()) + ->method('create') + ->will($this->returnValue($nullConfig)); + + $this->entityManager + ->expects($this->any()) + ->method('getStorage') + ->with('language_content_settings') + ->will($this->returnValue($this->configEntityStorageInterface)); + $this->entityManager->expects($this->any()) + ->method('getEntityTypeFromClass') + ->with('Drupal\language\Entity\ContentLanguageSettings') + ->willReturn('language_content_settings'); + + $config = ContentLanguageSettings::loadByEntityTypeBundle($type, $bundle); + + $this->assertSame($expected_langcode, $config->getDefaultLangcode()); + $this->assertSame($expected_language_alterable, $config->isLanguageAlterable()); + } + + public function providerLoadByEntityTypeBundle() { + $alteredLanguage= new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_bundle', + ), 'language_content_settings'); + $alteredLanguage->setLanguageAlterable(true); + + $langcode = $this->randomMachineName(); + $alteredDefaultLangcode = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_fixed_language_bundle', + ), 'language_content_settings'); + $alteredDefaultLangcode->setDefaultLangcode($langcode); + + $defaultConfig = new ContentLanguageSettings(array( + 'target_entity_type_id' => 'test_entity_type', + 'target_bundle' => 'test_default_language_bundle', + ), 'language_content_settings'); + + return [ + ['test_entity_type.test_bundle', $alteredLanguage, LanguageInterface::LANGCODE_SITE_DEFAULT, true], + ['test_entity_type.test_fixed_language_bundle', $alteredDefaultLangcode, $langcode, false], + ['test_entity_type.test_default_language_bundle', $defaultConfig, LanguageInterface::LANGCODE_SITE_DEFAULT, false], + ['test_entity_type.null_bundle', NULL, LanguageInterface::LANGCODE_SITE_DEFAULT, false], + ]; + } + +} diff --git a/core/modules/locale/src/Tests/LocaleContentTest.php b/core/modules/locale/src/Tests/LocaleContentTest.php index 1bef062..f1364f3 100644 --- a/core/modules/locale/src/Tests/LocaleContentTest.php +++ b/core/modules/locale/src/Tests/LocaleContentTest.php @@ -84,7 +84,7 @@ public function testContentTypeLanguageConfiguration() { $this->drupalGet("admin/structure/types/manage/{$type2->type}"); $this->assertText(t('Language settings'), 'Multilingual support widget present on content type configuration form.'); $edit = array( - 'language_configuration[language_show]' => TRUE, + 'language_configuration[language_alterable]' => TRUE, ); $this->drupalPostForm("admin/structure/types/manage/{$type2->type}", $edit, t('Save content type')); $this->assertRaw(t('The content type %type has been updated.', array('%type' => $type2->name))); @@ -156,7 +156,7 @@ public function testContentTypeDirLang() { // Set the content type to use multilingual support. $this->drupalGet("admin/structure/types/manage/{$type->type}"); $edit = array( - 'language_configuration[language_show]' => TRUE, + 'language_configuration[language_alterable]' => TRUE, ); $this->drupalPostForm("admin/structure/types/manage/{$type->type}", $edit, t('Save content type')); $this->assertRaw(t('The content type %type has been updated.', array('%type' => $type->name))); diff --git a/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php b/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php index 4fb93b2..a9d4da1 100644 --- a/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php +++ b/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php @@ -269,7 +269,7 @@ public function form(array $form, FormStateInterface $form_state) { '#type' => 'language_select', '#default_value' => $default_language, '#languages' => Language::STATE_ALL, - '#access' => !empty($language_configuration['language_show']), + '#access' => !empty($language_configuration['language_alterable']), ); $default = $this->entity->getMenuName() . ':' . $this->entity->getParentId(); diff --git a/core/modules/menu_ui/src/Tests/MenuLanguageTest.php b/core/modules/menu_ui/src/Tests/MenuLanguageTest.php index f74fb09..f39024e 100644 --- a/core/modules/menu_ui/src/Tests/MenuLanguageTest.php +++ b/core/modules/menu_ui/src/Tests/MenuLanguageTest.php @@ -60,7 +60,7 @@ function testMenuLanguage() { 'langcode' => 'aa', ); $this->drupalPostForm('admin/structure/menu/add', $edit, t('Save')); - language_save_default_configuration('menu_link_content', 'menu_link_content', array('langcode' => 'bb', 'language_show' => TRUE)); + language_save_default_configuration('menu_link_content', 'menu_link_content', array('langcode' => 'bb', 'language_alterable' => TRUE)); // Check menu language. $this->assertOptionSelected('edit-langcode', $edit['langcode'], 'The menu language was correctly selected.'); @@ -85,7 +85,7 @@ function testMenuLanguage() { )); // Edit menu link default, changing it to cc. - language_save_default_configuration('menu_link_content', 'menu_link_content', array('langcode' => 'cc', 'language_show' => TRUE)); + language_save_default_configuration('menu_link_content', 'menu_link_content', array('langcode' => 'cc', 'language_alterable' => TRUE)); // Add a menu link. $link_title = $this->randomString(); @@ -122,7 +122,7 @@ function testMenuLanguage() { $this->assertOptionSelected('edit-langcode', 'bb', 'The menu link language was correctly selected.'); // Edit menu to hide the language select on menu link item add. - language_save_default_configuration('menu_link_content', 'menu_link_content', array('langcode' => 'cc', 'language_show' => FALSE)); + language_save_default_configuration('menu_link_content', 'menu_link_content', array('langcode' => 'cc', 'language_alterable' => FALSE)); // Check that the language selector is not available on menu link add page. $this->drupalGet("admin/structure/menu/manage/$menu_name/add"); diff --git a/core/modules/node/node.install b/core/modules/node/node.install index 36c7d75..6f8f53a 100644 --- a/core/modules/node/node.install +++ b/core/modules/node/node.install @@ -8,7 +8,6 @@ use Drupal\Component\Utility\SafeMarkup; use Drupal\Component\Uuid\Uuid; use Drupal\Core\Url; -use Drupal\Core\Language\Language; /** * Implements hook_requirements(). @@ -149,21 +148,8 @@ function node_install() { /** * Implements hook_uninstall(). - * - * @see node_ranking() - * @see _node_rankings() */ function node_uninstall() { - // Delete node type variables. - $types = \Drupal::configFactory()->listAll('node.type.'); - foreach ($types as $config_name) { - $type = \Drupal::config($config_name)->get('type'); - if (\Drupal::moduleHandler()->moduleExists('language')) { - $key = language_get_default_configuration_settings_key('node', $type); - \Drupal::config('language.settings')->clear($key)->save(); - } - } - // Delete remaining general module variables. \Drupal::state()->delete('node.node_access_needs_rebuild'); } diff --git a/core/modules/node/node.module b/core/modules/node/node.module index 1aa4a2a..37fea66 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -383,7 +383,7 @@ function node_entity_extra_field_info() { // node/add form. if ($module_language_enabled) { $configuration = language_get_default_configuration('node', $bundle->type); - if ($configuration['language_show']) { + if ($configuration['language_alterable']) { $extra['node'][$bundle->type]['form']['langcode'] = array( 'label' => t('Language'), 'description' => $description, diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php index 7f9ef84..754cc6a 100644 --- a/core/modules/node/src/NodeForm.php +++ b/core/modules/node/src/NodeForm.php @@ -114,7 +114,7 @@ public function form(array $form, FormStateInterface $form_state) { '#type' => 'language_select', '#default_value' => $node->getUntranslated()->language()->getId(), '#languages' => LanguageInterface::STATE_ALL, - '#access' => isset($language_configuration['language_show']) && $language_configuration['language_show'], + '#access' => isset($language_configuration['language_alterable']) && $language_configuration['language_alterable'], ); $form['advanced'] = array( diff --git a/core/modules/node/src/Tests/NodeFieldMultilingualTest.php b/core/modules/node/src/Tests/NodeFieldMultilingualTest.php index d00ffcd..3511389 100644 --- a/core/modules/node/src/Tests/NodeFieldMultilingualTest.php +++ b/core/modules/node/src/Tests/NodeFieldMultilingualTest.php @@ -46,7 +46,7 @@ protected function setUp() { // Set "Basic page" content type to use multilingual support. $edit = array( - 'language_configuration[language_show]' => TRUE, + 'language_configuration[language_alterable]' => TRUE, ); $this->drupalPostForm('admin/structure/types/manage/page', $edit, t('Save content type')); $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Basic page')), 'Basic page content type has been updated.'); diff --git a/core/modules/node/src/Tests/NodeTranslationUITest.php b/core/modules/node/src/Tests/NodeTranslationUITest.php index cb5ffe3..d1540ba 100644 --- a/core/modules/node/src/Tests/NodeTranslationUITest.php +++ b/core/modules/node/src/Tests/NodeTranslationUITest.php @@ -42,7 +42,7 @@ protected function setUp() { // Display the language selector. $this->drupalLogin($this->administrator); - $edit = array('language_configuration[language_show]' => TRUE); + $edit = array('language_configuration[language_alterable]' => TRUE); $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type')); $this->drupalLogin($this->translator); } diff --git a/core/modules/node/src/Tests/NodeTypeInitialLanguageTest.php b/core/modules/node/src/Tests/NodeTypeInitialLanguageTest.php index 971d091..1aa3c4f 100644 --- a/core/modules/node/src/Tests/NodeTypeInitialLanguageTest.php +++ b/core/modules/node/src/Tests/NodeTypeInitialLanguageTest.php @@ -39,7 +39,7 @@ protected function setUp() { function testNodeTypeInitialLanguageDefaults() { $this->drupalGet('admin/structure/types/manage/article'); $this->assertOptionSelected('edit-language-configuration-langcode', LanguageInterface::LANGCODE_SITE_DEFAULT, 'The default initial language is the site default.'); - $this->assertNoFieldChecked('edit-language-configuration-language-show', 'Language selector is hidden by default.'); + $this->assertNoFieldChecked('edit-language-configuration-language-alterable', 'Language selector is hidden by default.'); // Tests if the language field cannot be rearranged on the manage fields tab. $this->drupalGet('admin/structure/types/manage/article/fields'); @@ -62,7 +62,7 @@ function testNodeTypeInitialLanguageDefaults() { // Tests the initial language after changing the site default language. // First unhide the language selector. $edit = array( - 'language_configuration[language_show]' => TRUE, + 'language_configuration[language_alterable]' => TRUE, ); $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type')); $this->drupalGet('node/add/article'); diff --git a/core/modules/path/src/Tests/PathLanguageTest.php b/core/modules/path/src/Tests/PathLanguageTest.php index f87b5a3..e5f7065 100644 --- a/core/modules/path/src/Tests/PathLanguageTest.php +++ b/core/modules/path/src/Tests/PathLanguageTest.php @@ -56,7 +56,7 @@ protected function setUp() { 'settings[node][page][translatable]' => 1, 'settings[node][page][fields][path]' => 1, 'settings[node][page][fields][body]' => 1, - 'settings[node][page][settings][language][language_show]' => 1, + 'settings[node][page][settings][language][language_alterable]' => 1, ); $this->drupalPostForm('admin/config/regional/content-language', $edit, t('Save configuration')); diff --git a/core/modules/system/entity.api.php b/core/modules/system/entity.api.php index e3019e0..cfb41c7 100644 --- a/core/modules/system/entity.api.php +++ b/core/modules/system/entity.api.php @@ -1912,7 +1912,7 @@ function hook_entity_extra_field_info() { // node/add form. if ($module_language_enabled) { $configuration = language_get_default_configuration('node', $bundle->type); - if ($configuration['language_show']) { + if ($configuration['language_alterable']) { $extra['node'][$bundle->type]['form']['language'] = array( 'label' => t('Language'), 'description' => $description, diff --git a/core/modules/system/src/Tests/Entity/EntityTranslationFormTest.php b/core/modules/system/src/Tests/Entity/EntityTranslationFormTest.php index 59da34d..510294d 100644 --- a/core/modules/system/src/Tests/Entity/EntityTranslationFormTest.php +++ b/core/modules/system/src/Tests/Entity/EntityTranslationFormTest.php @@ -80,7 +80,7 @@ function testEntityFormLanguage() { // Enable language selector. $this->drupalGet('admin/structure/types/manage/page'); - $edit = array('language_configuration[language_show]' => TRUE, 'language_configuration[langcode]' => LanguageInterface::LANGCODE_NOT_SPECIFIED); + $edit = array('language_configuration[language_alterable]' => TRUE, 'language_configuration[langcode]' => LanguageInterface::LANGCODE_NOT_SPECIFIED); $this->drupalPostForm('admin/structure/types/manage/page', $edit, t('Save content type')); $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Basic page')), 'Basic page content type has been updated.'); diff --git a/core/modules/taxonomy/src/TermForm.php b/core/modules/taxonomy/src/TermForm.php index 2136b0f..ade34f5 100644 --- a/core/modules/taxonomy/src/TermForm.php +++ b/core/modules/taxonomy/src/TermForm.php @@ -34,7 +34,7 @@ public function form(array $form, FormStateInterface $form_state) { '#title' => $this->t('Language'), '#languages' => LanguageInterface::STATE_ALL, '#default_value' => $term->getUntranslated()->language()->getId(), - '#access' => !empty($language_configuration['language_show']), + '#access' => !empty($language_configuration['language_alterable']), ); $form['relations'] = array( diff --git a/core/modules/taxonomy/src/Tests/TermLanguageTest.php b/core/modules/taxonomy/src/Tests/TermLanguageTest.php index 71cacee..4096e4b 100644 --- a/core/modules/taxonomy/src/Tests/TermLanguageTest.php +++ b/core/modules/taxonomy/src/Tests/TermLanguageTest.php @@ -41,7 +41,7 @@ protected function setUp() { function testTermLanguage() { // Configure the vocabulary to not hide the language selector. $edit = array( - 'default_language[language_show]' => TRUE, + 'default_language[language_alterable]' => TRUE, ); $this->drupalPostForm('admin/structure/taxonomy/manage/' . $this->vocabulary->id(), $edit, t('Save')); @@ -77,7 +77,7 @@ function testDefaultTermLanguage() { // default language of the terms fixed. $edit = array( 'default_language[langcode]' => 'bb', - 'default_language[language_show]' => TRUE, + 'default_language[language_alterable]' => TRUE, ); $this->drupalPostForm('admin/structure/taxonomy/manage/' . $this->vocabulary->id(), $edit, t('Save')); $this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary->id() . '/add'); @@ -86,7 +86,7 @@ function testDefaultTermLanguage() { // Make the default language of the terms to be the current interface. $edit = array( 'default_language[langcode]' => 'current_interface', - 'default_language[language_show]' => TRUE, + 'default_language[language_alterable]' => TRUE, ); $this->drupalPostForm('admin/structure/taxonomy/manage/' . $this->vocabulary->id(), $edit, t('Save')); $this->drupalGet('aa/admin/structure/taxonomy/manage/' . $this->vocabulary->id() . '/add'); @@ -99,7 +99,7 @@ function testDefaultTermLanguage() { \Drupal::config('system.site')->set('langcode', 'cc')->save(); $edit = array( 'default_language[langcode]' => LanguageInterface::LANGCODE_SITE_DEFAULT, - 'default_language[language_show]' => TRUE, + 'default_language[language_alterable]' => TRUE, ); $this->drupalPostForm('admin/structure/taxonomy/manage/' . $this->vocabulary->id(), $edit, t('Save')); $this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary->id() . '/add'); diff --git a/core/modules/taxonomy/src/Tests/VocabularyLanguageTest.php b/core/modules/taxonomy/src/Tests/VocabularyLanguageTest.php index 07e3831..9298756 100644 --- a/core/modules/taxonomy/src/Tests/VocabularyLanguageTest.php +++ b/core/modules/taxonomy/src/Tests/VocabularyLanguageTest.php @@ -79,7 +79,7 @@ function testVocabularyDefaultLanguageForTerms() { 'name' => $this->randomMachineName(), 'vid' => Unicode::strtolower($this->randomMachineName()), 'default_language[langcode]' => 'bb', - 'default_language[language_show]' => TRUE, + 'default_language[language_alterable]' => TRUE, ); $vid = $edit['vid']; $this->drupalPostForm('admin/structure/taxonomy/add', $edit, t('Save')); @@ -91,39 +91,39 @@ function testVocabularyDefaultLanguageForTerms() { // Check that the language settings were saved. $language_settings = language_get_default_configuration('taxonomy_term', $edit['vid']); $this->assertEqual($language_settings['langcode'], 'bb', 'The langcode was saved.'); - $this->assertTrue($language_settings['language_show'], 'The visibility setting was saved.'); + $this->assertTrue($language_settings['language_alterable'], 'The visibility setting was saved.'); // Check that the correct options are selected in the interface. $this->assertOptionSelected('edit-default-language-langcode', 'bb', 'The correct default language for the terms of this vocabulary is selected.'); - $this->assertFieldChecked('edit-default-language-language-show', 'Show language selection option is checked.'); + $this->assertFieldChecked('edit-default-language-language-alterable', 'Show language selection option is checked.'); // Edit the vocabulary and check that the new settings are updated. $edit = array( 'default_language[langcode]' => 'aa', - 'default_language[language_show]' => FALSE, + 'default_language[language_alterable]' => FALSE, ); $this->drupalPostForm('admin/structure/taxonomy/manage/' . $vid, $edit, t('Save')); // And check again the settings and also the interface. $language_settings = language_get_default_configuration('taxonomy_term', $vid); $this->assertEqual($language_settings['langcode'], 'aa', 'The langcode was saved.'); - $this->assertFalse($language_settings['language_show'], 'The visibility setting was saved.'); + $this->assertFalse($language_settings['language_alterable'], 'The visibility setting was saved.'); $this->drupalGet('admin/structure/taxonomy/manage/' . $vid); $this->assertOptionSelected('edit-default-language-langcode', 'aa', 'The correct default language for the terms of this vocabulary is selected.'); - $this->assertNoFieldChecked('edit-default-language-language-show', 'Show language selection option is not checked.'); + $this->assertNoFieldChecked('edit-default-language-language-alterable', 'Show language selection option is not checked.'); // Check that language settings are changed after editing vocabulary. $edit = array( 'name' => $this->randomMachineName(), 'default_language[langcode]' => 'authors_default', - 'default_language[language_show]' => FALSE, + 'default_language[language_alterable]' => FALSE, ); $this->drupalPostForm('admin/structure/taxonomy/manage/' . $vid, $edit, t('Save')); // Check that we have the new settings. $new_settings = language_get_default_configuration('taxonomy_term', $vid); $this->assertEqual($new_settings['langcode'], 'authors_default', 'The langcode was saved.'); - $this->assertFalse($new_settings['language_show'], 'The new visibility setting was saved.'); + $this->assertFalse($new_settings['language_alterable'], 'The new visibility setting was saved.'); } } diff --git a/core/modules/taxonomy/src/VocabularyForm.php b/core/modules/taxonomy/src/VocabularyForm.php index 34dc3ed..08bf93b 100644 --- a/core/modules/taxonomy/src/VocabularyForm.php +++ b/core/modules/taxonomy/src/VocabularyForm.php @@ -93,12 +93,6 @@ protected function actions(array $form, FormStateInterface $form_state) { // If we are displaying the delete confirmation skip the regular actions. if (!$form_state->get('confirm_delete')) { $actions = parent::actions($form, $form_state); - // Add the language configuration submit handler. This is needed because - // the submit button has custom submit handlers. - if ($this->moduleHandler->moduleExists('language')) { - array_unshift($actions['submit']['#submit'], 'language_configuration_element_submit'); - array_unshift($actions['submit']['#submit'], '::languageConfigurationSubmit'); - } // We cannot leverage the regular submit handler definition because we // have button-specific ones here. Hence we need to explicitly set it for // the submit action, otherwise it would be ignored. @@ -113,22 +107,6 @@ protected function actions(array $form, FormStateInterface $form_state) { } /** - * Submit handler to update the bundle for the default language configuration. - */ - public function languageConfigurationSubmit(array &$form, FormStateInterface $form_state) { - $vocabulary = $this->entity; - // Delete the old language settings for the vocabulary, if the machine name - // is changed. - if ($vocabulary && $vocabulary->id() && $vocabulary->id() != $form_state->getValue('vid')) { - language_clear_default_configuration('taxonomy_term', $vocabulary->id()); - } - // Since the machine name is not known yet, and it can be changed anytime, - // we have to also update the bundle property for the default language - // configuration in order to have the correct bundle value. - $form_state->set(['language', 'default_language', 'bundle'], $form_state->getValue('vid')); - } - - /** * {@inheritdoc} */ public function save(array $form, FormStateInterface $form_state) { diff --git a/core/modules/views/src/Tests/SearchMultilingualTest.php b/core/modules/views/src/Tests/SearchMultilingualTest.php index 97213c3..4750f0b 100644 --- a/core/modules/views/src/Tests/SearchMultilingualTest.php +++ b/core/modules/views/src/Tests/SearchMultilingualTest.php @@ -45,7 +45,7 @@ public function testMultilingualSearchFilter() { // Create a content type and make it translatable. $type = $this->drupalCreateContentType(); $edit = array( - 'language_configuration[language_show]' => TRUE, + 'language_configuration[language_alterable]' => TRUE, ); $this->drupalPostForm('admin/structure/types/manage/' . $type->type, $edit, t('Save content type')); $edit = array(