diff --git a/core/modules/language/language.module b/core/modules/language/language.module index b0ad752..68404dc 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -863,7 +863,7 @@ function language_set_browser_drupal_langcode_mappings($mappings) { } /** - * Updates locked system languages weight. + * Updates locked system language weights. * */ function language_update_locked_weights() { @@ -871,7 +871,7 @@ function language_update_locked_weights() { $max_weight = db_query('SELECT MAX(weight) FROM {language} WHERE locked = 0')->fetchField(); // Loop locked languages to maintain the existing order. foreach (language_list(LANGUAGE_LOCKED) as $language) { - $max_weight ++; + $max_weight++; // Update system languages weight. db_update('language') ->fields(array('weight' => $max_weight)) diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageConfigurationTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageConfigurationTest.php index e54b248..ebea58d 100644 --- a/core/modules/language/lib/Drupal/language/Tests/LanguageConfigurationTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageConfigurationTest.php @@ -107,46 +107,54 @@ function testLanguageConfigurationWeight() { // User to add and remove language. $admin_user = $this->drupalCreateUser(array('administer languages', 'access administration pages')); $this->drupalLogin($admin_user); - $this->assertTrue($this->hasHighWeight(), 'System languages has high weight by default'); + $this->checkConfigurableLanguageWeight(); // Add predefined language. $edit = array( 'predefined_langcode' => 'fr', ); $this->drupalPost('admin/config/regional/language/add', $edit, 'Add language'); - $this->assertTrue($this->hasHighWeight(), 'System languages has high weight after adding new language'); + $this->checkConfigurableLanguageWeight('after adding new language'); // Re-ordering languages. $edit = array( - 'languages[en][weight]' => $this->getHighWeight() + 1, + 'languages[en][weight]' => $this->getHighestConfigurableLanguageWeight() + 1, ); $this->drupalPost('admin/config/regional/language', $edit, 'Save configuration'); - $this->assertTrue($this->hasHighWeight(), 'System languages has high weight after re-ordering languages'); - + $this->checkConfigurableLanguageWeight('after re-ordering'); // Remove predefined language. $edit = array( 'confirm' => 1, ); $this->drupalPost('admin/config/regional/language/delete/fr', $edit, 'Delete'); - $this->assertTrue($this->hasHighWeight(), 'System languages has high weight after deleting a language'); + $this->checkConfigurableLanguageWeight('after deleting a language'); } /** - * Helper to check high weight of system languages; + * Helper to validate all system languages have higher weight. + * + * @param string $event + * Event of check. e.g. reoder, save, delete. * * @return bool */ - protected function hasHighWeight() { - $system_lang_weight = db_query('SELECT weight FROM {language} WHERE locked = 1 limit 1')->fetchField(); - return $system_lang_weight >= $this->getHighWeight(); + protected function checkConfigurableLanguageWeight($event = 'by default') { + // Reset language list. + drupal_static_reset('language_list'); + $system_lang_weight = $this->getHighestConfigurableLanguageWeight(); + $replacements = array('@event' => $event); + foreach (language_list(LANGUAGE_LOCKED) as $language) { + $replacements['%language'] = $language->name; + $this->assertTrue($language->weight >= $system_lang_weight, t('System language %language has higher weight than configurable languages @event', $replacements)); + } } /** - * Helper to get high weight of unlocked languages list. + * Helper to get maximum weight of configurable (or unlocked) languages. * * @return int */ - protected function getHighWeight(){ + protected function getHighestConfigurableLanguageWeight(){ return db_query('SELECT MAX(weight) FROM {language} WHERE locked = 0')->fetchField(); } }