- Patch #1539072 by Gábor Hojtsy: Fixed Support for disabled languages broken, drop it.

8.0.x
Dries 2012-04-25 16:44:20 -07:00
parent 4ef74ecd98
commit bac3ed7764
23 changed files with 88 additions and 280 deletions

View File

@ -2549,43 +2549,32 @@ function language_multilingual() {
/**
* Returns a list of configured languages.
*
* @param $only_enabled
* (optional) Whether to return only enabled languages.
*
* @return
* An associative array of languages, keyed by the language code, ordered by
* weight ascending and name ascending.
*/
function language_list($only_enabled = FALSE) {
function language_list() {
$languages = &drupal_static(__FUNCTION__);
// Initialize master language list.
if (!isset($languages)) {
// Initialize local language list caches.
$languages = array('all' => array(), 'enabled' => array());
// Fill in master language list based on current configuration.
$default = language_default();
if (language_multilingual() || module_exists('language')) {
// Use language module configuration if available.
$languages['all'] = db_query('SELECT * FROM {language} ORDER BY weight ASC, name ASC')->fetchAllAssoc('langcode');
$languages = db_query('SELECT * FROM {language} ORDER BY weight ASC, name ASC')->fetchAllAssoc('langcode');
}
else {
// No language module, so use the default language only.
$languages['all'][$default->langcode] = $default;
$languages = array($default->langcode => $default);
}
// Initialize default property so callers have an easy reference and can
// save the same object without data loss. Also fill in the filtered list
// of enabled languages only.
foreach ($languages['all'] as $langcode => $language) {
$languages['all'][$langcode]->default = ($langcode == $default->langcode);
if ($language->enabled) {
$languages['enabled'][$langcode] = $languages['all'][$langcode];
}
// save the same object without data loss.
foreach ($languages as $langcode => $language) {
$languages[$langcode]->default = ($langcode == $default->langcode);
}
}
return $only_enabled ? $languages['enabled'] : $languages['all'];
return $languages;
}
/**
@ -2636,7 +2625,6 @@ function language_default() {
'langcode' => 'en',
'name' => 'English',
'direction' => 0,
'enabled' => 1,
'weight' => 0,
));
$default->default = TRUE;

View File

@ -342,8 +342,7 @@ function language_negotiation_method_invoke($method_id, $method = NULL) {
if (!isset($results[$method_id])) {
global $user;
// Get the enabled languages only.
$languages = language_list(TRUE);
$languages = language_list();
if (!isset($method)) {
$negotiation_info = language_negotiation_info();

View File

@ -184,20 +184,42 @@ function update_prepare_d8_language() {
db_drop_field('languages', 'prefix');
db_drop_field('languages', 'domain');
db_drop_field('languages', 'native');
db_drop_field('languages', 'enabled');
// Update language count.
variable_set('language_count', db_query('SELECT COUNT(language) FROM {languages}')->fetchField());
// Rename the languages table to language.
db_rename_table('languages', 'language');
// Finally install/enable the language module. We need to use the update
// specific version of this function to ensure schema conflicts don't happen
// due to our updated data.
// Install/enable the language module. We need to use the update specific
// version of this function to ensure schema conflicts don't happen due to
// our updated data.
$modules = array('language');
update_module_add_to_system($modules);
update_module_enable($modules);
// Rename 'language' column to 'langcode'.
require_once DRUPAL_ROOT . '/core/modules/language/language.install';
language_update_8000();
db_drop_primary_key('language');
$langcode_spec = array(
'type' => 'varchar',
'length' => 12,
'not null' => TRUE,
'default' => '',
'description' => "Language code, e.g. 'de' or 'en-US'.",
);
db_change_field('language', 'language', 'langcode', $langcode_spec, array('primary key' => array('langcode')));
// Update the 'language_default' system variable with the langcode change.
$language_default = variable_get('language_default');
if (!empty($language_default)) {
if (isset($language_default->language)) {
$language_default->langcode = $language_default->language;
unset($language_default->language);
}
unset($language_default->enabled);
variable_set('language_default', $language_default);
}
}
}

View File

@ -19,7 +19,6 @@ function language_admin_overview_form($form, &$form_state) {
'#tree' => TRUE,
'#header' => array(
t('Name'),
t('Enabled'),
t('Default'),
t('Weight'),
t('Operations'),
@ -32,13 +31,6 @@ function language_admin_overview_form($form, &$form_state) {
$form['languages'][$langcode]['name'] = array(
'#markup' => check_plain($language->name),
);
$form['languages'][$langcode]['enabled'] = array(
'#type' => 'checkbox',
'#title' => t('Enable @title', array('@title' => $language->name)),
'#title_display' => 'invisible',
'#default_value' => (int) $language->enabled,
'#disabled' => $langcode == $default->langcode,
);
$form['languages'][$langcode]['default'] = array(
'#type' => 'radio',
'#parents' => array('site_default'),
@ -154,21 +146,6 @@ function language_admin_overview_form_submit($form, &$form_state) {
foreach ($languages as $langcode => $language) {
$language->default = ($form_state['values']['site_default'] == $langcode);
$language->weight = $form_state['values']['languages'][$langcode]['weight'];
if ($language->default || $old_default->langcode == $langcode) {
// Automatically enable the default language and the language which was
// default previously (because we will not get the value from that
// disabled checkbox).
$form_state['values']['languages'][$langcode]['enabled'] = 1;
}
$language->enabled = (int) !empty($form_state['values']['languages'][$langcode]['enabled']);
// If the interface language has been disabled make sure that the form
// redirect includes the new default language as a query parameter.
if ($language->enabled == FALSE && $langcode == $GLOBALS['language_interface']->langcode) {
$form_state['redirect'] = array('admin/config/regional/language', array('language' => $languages[$form_state['values']['site_default']]));
}
language_save($language);
}
@ -483,7 +460,6 @@ function language_negotiation_configure_form_table(&$form, $type) {
'#language_negotiation_info' => array(),
'#show_operations' => FALSE,
'weight' => array('#tree' => TRUE),
'enabled' => array('#tree' => TRUE),
);
$negotiation_info = $form['#language_negotiation_info'];
@ -694,8 +670,7 @@ function language_negotiation_configure_url_form($form, &$form_state) {
),
);
// Get the enabled languages only.
$languages = language_list(TRUE);
$languages = language_list();
$prefixes = language_negotiation_url_prefixes();
$domains = language_negotiation_url_domains();
foreach ($languages as $langcode => $language) {
@ -731,8 +706,7 @@ function language_negotiation_configure_url_form($form, &$form_state) {
* the prefix and domain are only blank for the default.
*/
function language_negotiation_configure_url_form_validate($form, &$form_state) {
// Get the enabled languages only.
$languages = language_list(TRUE);
$languages = language_list();
// Count repeated values for uniqueness check.
$count = array_count_values($form_state['values']['prefix']);

View File

@ -76,12 +76,6 @@ function language_schema() {
'default' => 0,
'description' => 'Direction of language (Left-to-Right = 0, Right-to-Left = 1).',
),
'enabled' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'description' => 'Enabled flag (1 = Enabled, 0 = Disabled).',
),
'weight' => array(
'type' => 'int',
'not null' => TRUE,
@ -96,31 +90,3 @@ function language_schema() {
);
return $schema;
}
/**
* Rename {language}.language to {language}.langcode.
*
* @see update_prepare_d8_language()
*/
function language_update_8000() {
// Rename language column to langcode and set it again as the primary key.
if (db_field_exists('language', 'language')) {
db_drop_primary_key('language');
$langcode_spec = array(
'type' => 'varchar',
'length' => 12,
'not null' => TRUE,
'default' => '',
'description' => "Language code, e.g. 'de' or 'en-US'.",
);
db_change_field('language', 'language', 'langcode', $langcode_spec, array('primary key' => array('langcode')));
}
// Update the 'language_default' system variable, if configured.
$language_default = variable_get('language_default');
if (!empty($language_default) && isset($language_default->language)) {
$language_default->langcode = $language_default->language;
unset($language_default->language);
variable_set('language_default', $language_default);
}
}

View File

@ -165,10 +165,6 @@ function language_save($language) {
$language->direction = isset($predefined[$language->langcode][2]) ? $predefined[$language->langcode][2] : LANGUAGE_LTR;
}
// Set to enabled for the default language and unless specified otherwise.
if (!empty($language->default) || !isset($language->enabled)) {
$language->enabled = TRUE;
}
// Let other modules modify $language before saved.
module_invoke_all('language_presave', $language);
@ -192,7 +188,7 @@ function language_save($language) {
}
// Update language count based on enabled language count.
variable_set('language_count', db_query('SELECT COUNT(langcode) FROM {language} WHERE enabled = 1')->fetchField());
variable_set('language_count', db_query('SELECT COUNT(langcode) FROM {language}')->fetchField());
// Kill the static cache in language_list().
drupal_static_reset('language_list');
@ -220,9 +216,7 @@ function language_delete($langcode) {
->condition('langcode', $language->langcode)
->execute();
if ($language->enabled) {
variable_set('language_count', variable_get('language_count', 1) - 1);
}
variable_set('language_count', variable_get('language_count', 1) - 1);
drupal_static_reset('language_list');

View File

@ -293,8 +293,7 @@ function language_url_fallback($language = NULL, $language_type = LANGUAGE_TYPE_
* Translation links may be provided by other modules.
*/
function language_switcher_url($type, $path) {
// Get the enabled languages only.
$languages = language_list(TRUE);
$languages = language_list();
$links = array();
foreach ($languages as $language) {
@ -316,8 +315,7 @@ function language_switcher_session($type, $path) {
$param = variable_get('language_negotiation_session_param', 'language');
$language_query = isset($_SESSION[$param]) ? $_SESSION[$param] : $GLOBALS[$type]->langcode;
// Get the enabled languages only.
$languages = language_list(TRUE);
$languages = language_list();
$links = array();
$query = $_GET;
@ -353,8 +351,7 @@ function language_url_rewrite_url(&$path, &$options) {
$languages = &$drupal_static_fast['languages'];
if (!isset($languages)) {
// Get the enabled languages only.
$languages = language_list(TRUE);
$languages = language_list();
$languages = array_flip(array_keys($languages));
}
@ -439,8 +436,7 @@ function language_url_rewrite_session(&$path, &$options) {
if (!isset($query_rewrite)) {
global $user;
if (!$user->uid) {
// Get the enabled languages only.
$languages = language_list(TRUE);
$languages = language_list();
$query_param = check_plain(variable_get('language_negotiation_session_param', 'language'));
$query_value = isset($_GET[$query_param]) ? check_plain($_GET[$query_param]) : NULL;
$query_rewrite = isset($languages[$query_value]) && language_negotiation_method_enabled(LANGUAGE_NEGOTIATION_SESSION);

View File

@ -74,20 +74,6 @@ class LanguageListTest extends DrupalWebTestCase {
$this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), t('Correct page redirection.'));
$this->assertText(t('The default language cannot be deleted.'), t('Failed to delete the default language.'));
// Check if we can disable a language.
$edit = array(
'languages[en][enabled]' => FALSE,
);
$this->drupalPost(NULL, $edit, t('Save configuration'));
$this->assertNoFieldChecked('edit-languages-en-enabled', t('Language disabled.'));
// Set disabled language to be the default and ensure it is re-enabled.
$edit = array(
'site_default' => 'en',
);
$this->drupalPost(NULL, $edit, t('Save configuration'));
$this->assertFieldChecked('edit-languages-en-enabled', t('Default language re-enabled.'));
// Ensure 'edit' link works.
$this->clickLink(t('edit'));
$this->assertTitle(t('Edit language | Drupal'), t('Page title is "Edit language".'));
@ -100,11 +86,16 @@ class LanguageListTest extends DrupalWebTestCase {
$this->assertRaw($name, t('The language has been updated.'));
$this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), t('Correct page redirection.'));
// Change back the default language.
$edit = array(
'site_default' => 'en',
);
$this->drupalPost(NULL, $edit, t('Save configuration'));
// Ensure 'delete' link works.
$this->drupalGet('admin/config/regional/language');
$this->clickLink(t('delete'));
$this->assertText(t('Are you sure you want to delete the language'), t('"delete" link is correct.'));
// Delete an enabled language.
// Delete a language.
$this->drupalGet('admin/config/regional/language/delete/' . $langcode);
// First test the 'cancel' link.
$this->clickLink(t('Cancel'));
@ -122,20 +113,13 @@ class LanguageListTest extends DrupalWebTestCase {
$this->assertResponse(404, t('Language no longer found.'));
// Make sure the "language_count" variable has been updated correctly.
drupal_static_reset('language_list');
$enabled_languages = language_list(TRUE);
$this->assertEqual(variable_get('language_count', 1), count($enabled_languages), t('Language count is correct.'));
// Delete a disabled language.
// Disable an enabled language.
$edit = array(
'languages[fr][enabled]' => FALSE,
);
$this->drupalPost($path, $edit, t('Save configuration'));
$this->assertNoFieldChecked('edit-languages-fr-enabled', t('French language disabled.'));
// Get the count of enabled languages.
drupal_static_reset('language_list');
$enabled_languages = language_list(TRUE);
// Delete the disabled language.
$languages = language_list();
$this->assertEqual(variable_get('language_count', 1), count($languages), t('Language count is correct.'));
// Delete French.
$this->drupalPost('admin/config/regional/language/delete/fr', array(), t('Delete'));
// Get the count of languages.
drupal_static_reset('language_list');
$languages = language_list();
// We need raw here because %language and %langcode will add HTML.
$t_args = array('%language' => 'French', '%langcode' => 'fr');
$this->assertRaw(t('The %language (%langcode) language has been removed.', $t_args), t('Disabled language has been removed.'));
@ -144,7 +128,7 @@ class LanguageListTest extends DrupalWebTestCase {
$this->drupalGet('admin/config/regional/language/delete/fr');
$this->assertResponse(404, t('Language no longer found.'));
// Make sure the "language_count" variable has not changed.
$this->assertEqual(variable_get('language_count', 1), count($enabled_languages), t('Language count is correct.'));
$this->assertEqual(variable_get('language_count', 1), count($languages), t('Language count is correct.'));
// Ensure we can delete the English language. Right now English is the only
// language so we must add a new language and make it the default before
@ -245,7 +229,6 @@ class LanguageDependencyInjectionTest extends DrupalWebTestCase {
'langcode' => 'fr',
'name' => 'French',
'direction' => 0,
'enabled' => 1,
'weight' => 0,
'default' => TRUE,
);

View File

@ -45,9 +45,7 @@ function locale_date_format_language_overview_page() {
array('data' => t('Operations'), 'colspan' => '2'),
);
// Get the enabled languages only.
$languages = language_list(TRUE);
$languages = language_list();
foreach ($languages as $langcode => $language) {
$row = array();
$row[] = $language->name;

View File

@ -12,7 +12,7 @@ include_once DRUPAL_ROOT . '/core/includes/gettext.inc';
*/
function locale_translate_import_form($form, &$form_state) {
drupal_static_reset('language_list');
$languages = language_list(TRUE);
$languages = language_list();
// Initialize a language list to the ones available, including English if we
// are to translate Drupal to English as well.
@ -127,7 +127,7 @@ function locale_translate_import_form_submit($form, &$form_state) {
* Builds form to export Gettext translation files.
*/
function locale_translate_export_form($form, &$form_state) {
$languages = language_list(TRUE);
$languages = language_list();
$language_options = array();
foreach ($languages as $langcode => $language) {
if ($langcode != 'en' || locale_translate_english()) {

View File

@ -156,7 +156,7 @@ function locale_translation_filters() {
// Get all languages, except English
drupal_static_reset('language_list');
$languages = language_list(TRUE);
$languages = language_list();
$language_options = array();
foreach ($languages as $langcode => $language) {
if ($langcode != 'en' || locale_translate_english()) {

View File

@ -1930,24 +1930,6 @@ class LocaleUserLanguageFunctionalTest extends DrupalWebTestCase {
'direction' => '0',
);
$this->drupalPost('admin/config/regional/language/add', $edit, t('Add custom language'));
// Add custom language and disable it.
// Code for the language.
$langcode_disabled = 'xx-yy';
// The English name for the language. This will be translated.
$name_disabled = $this->randomName(16);
$edit = array(
'predefined_langcode' => 'custom',
'langcode' => $langcode_disabled,
'name' => $name_disabled,
'direction' => '0',
);
$this->drupalPost('admin/config/regional/language/add', $edit, t('Add custom language'));
// Disable the language.
$edit = array(
'languages[' . $langcode_disabled . '][enabled]' => FALSE,
);
$this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
$this->drupalLogout();
// Login as normal user and edit account settings.
@ -1958,8 +1940,6 @@ class LocaleUserLanguageFunctionalTest extends DrupalWebTestCase {
$this->assertText(t('Language'), t('Language selector available.'));
// Ensure custom language is present.
$this->assertText($name, t('Language present on form.'));
// Ensure disabled language isn't present.
$this->assertNoText($name_disabled, t('Disabled language not present on form.'));
// Switch to our custom language.
$edit = array(
'preferred_langcode' => $langcode,
@ -2289,25 +2269,6 @@ class LocaleContentFunctionalTest extends DrupalWebTestCase {
);
$this->drupalPost('admin/config/regional/language/add', $edit, t('Add custom language'));
// Add disabled custom language.
// Code for the language.
$langcode_disabled = 'xx-yy';
// The English name for the language.
$name_disabled = $this->randomName(16);
$edit = array(
'predefined_langcode' => 'custom',
'langcode' => $langcode_disabled,
'name' => $name_disabled,
'direction' => '0',
);
$this->drupalPost('admin/config/regional/language/add', $edit, t('Add custom language'));
// Disable second custom language.
$path = 'admin/config/regional/language';
$edit = array(
'languages[' . $langcode_disabled . '][enabled]' => FALSE,
);
$this->drupalPost($path, $edit, t('Save configuration'));
// Set "Basic page" content type to use multilingual support.
$this->drupalGet('admin/structure/types/manage/page');
$this->assertText(t('Multilingual support'), t('Multilingual support fieldset present on content type configuration form.'));
@ -2328,10 +2289,8 @@ class LocaleContentFunctionalTest extends DrupalWebTestCase {
$this->drupalGet('node/add/page');
// Verify language select list is present.
$this->assertFieldByName('langcode', NULL, t('Language select present on add Basic page form.'));
// Ensure enabled language appears.
$this->assertText($name, t('Enabled language present.'));
// Ensure disabled language doesn't appear.
$this->assertNoText($name_disabled, t('Disabled language not present.'));
// Ensure language appears.
$this->assertText($name, t('Language present.'));
// Create "Basic page" content.
$node_title = $this->randomName();
@ -2520,7 +2479,7 @@ class LocaleUILanguageNegotiationTest extends DrupalWebTestCase {
// is for some reason not found when doing translate search. This might
// be some bug.
drupal_static_reset('language_list');
$languages = language_list(TRUE);
$languages = language_list();
variable_set('language_default', $languages['vi']);
// First visit this page to make sure our target string is searchable.
$this->drupalGet('admin/config');
@ -2780,15 +2739,6 @@ class LocaleUrlRewritingTest extends DrupalWebTestCase {
$edit['predefined_langcode'] = 'fr';
$this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
// Install Italian language.
$edit = array();
$edit['predefined_langcode'] = 'it';
$this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
// Disable Italian language.
$edit = array('languages[it][enabled]' => FALSE);
$this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
// Enable URL language detection and selection.
$edit = array('language_interface[enabled][language-url]' => 1);
$this->drupalPost('admin/config/regional/language/detection', $edit, t('Save settings'));
@ -2800,13 +2750,9 @@ class LocaleUrlRewritingTest extends DrupalWebTestCase {
}
/**
* Check that disabled or non-installed languages are not considered.
* Check that non-installed languages are not considered.
*/
function testUrlRewritingEdgeCases() {
// Check URL rewriting with a disabled language.
$languages = language_list();
$this->checkUrl($languages['it'], t('Path language is ignored if language is disabled.'), t('URL language negotiation does not work with disabled languages'));
// Check URL rewriting with a non-installed language.
$non_existing = language_default();
$non_existing->langcode = $this->randomName();

View File

@ -106,7 +106,7 @@ function node_filters() {
// Language filter if language support is present.
if (language_multilingual()) {
$languages = language_list(TRUE);
$languages = language_list();
$language_options = array(LANGUAGE_NOT_SPECIFIED => t('- None -'));
foreach ($languages as $langcode => $language) {
$language_options[$langcode] = $language->name;

View File

@ -2857,7 +2857,7 @@ function node_form_search_form_alter(&$form, $form_state) {
// Languages:
$language_options = array();
foreach (language_list(TRUE) as $langcode => $language) {
foreach (language_list() as $langcode => $language) {
$language_options[$langcode] = $language->name;
}
if (count($language_options) > 1) {

View File

@ -176,7 +176,7 @@ function node_form($form, &$form_state, $node) {
$form['#node'] = $node;
if (variable_get('node_type_language_' . $node->type, 0) && module_exists('language')) {
$languages = language_list(TRUE);
$languages = language_list();
$language_options = array();
foreach ($languages as $langcode => $language) {
$language_options[$langcode] = $language->name;

View File

@ -263,7 +263,7 @@ function openid_form_user_register_form_alter(&$form, &$form_state) {
$candidate_langcodes[] = $parts[0] . '-' . $parts[2];
$candidate_langcodes[] = $parts[0] . '-' . $parts[1] . '-' . $parts[2];
}
$enabled_languages = language_list(TRUE);
$enabled_languages = language_list();
// Iterate over the generated permutations starting with the longest (most
// specific) strings.
foreach (array_reverse($candidate_langcodes) as $candidate_langcode) {

View File

@ -145,7 +145,7 @@ function path_admin_form($form, &$form_state, $path = array('source' => '', 'ali
// A hidden value unless language.module is enabled.
if (module_exists('language')) {
$languages = language_list(TRUE);
$languages = language_list();
foreach ($languages as $langcode => $language) {
$language_options[$langcode] = $language->name;
}

View File

@ -532,9 +532,8 @@ class PathMonolingualTestCase extends PathTestCase {
$edit = array('site_default' => 'fr');
$this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
// Disable English.
$edit = array('languages[en][enabled]' => FALSE);
$this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
// Delete English.
$this->drupalPost('admin/config/regional/language/delete/en', array(), t('Delete'));
// Verify that French is the only language.
$this->assertFalse(language_multilingual(), t('Site is mono-lingual'));

View File

@ -1986,16 +1986,14 @@ class SearchLanguageTestCase extends SearchWebTestCase {
$this->drupalPost('search/node', $edit, t('Advanced search'));
$this->assertFieldByXPath('//input[@name="keys"]', 'language:fr', t('Language filter added to query.'));
// Change the default language and disable English.
// Change the default language and delete English.
$path = 'admin/config/regional/language';
$this->drupalGet($path);
$this->assertFieldChecked('edit-site-default-en', t('English is the default language.'));
$edit = array('site_default' => 'fr');
$this->drupalPost(NULL, $edit, t('Save configuration'));
$this->assertNoFieldChecked('edit-site-default-en', t('Default language updated.'));
$edit = array('languages[en][enabled]' => FALSE);
$this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
$this->assertNoFieldChecked('edit-languages-en-enabled', t('Language disabled.'));
$this->drupalPost('admin/config/regional/language/delete/en', array(), t('Delete'));
// Check that there are again no languages displayed.
$this->drupalGet('search/node');

View File

@ -3921,17 +3921,15 @@ function system_date_format_save($date_format, $dfid = 0) {
drupal_write_record('date_formats', $info, $keys);
}
// Retrieve an array of language objects for enabled languages.
$languages = language_list(TRUE);
$languages = language_list();
$locale_format = array();
$locale_format['type'] = $date_format['type'];
$locale_format['format'] = $date_format['format'];
// Check if the suggested language codes are configured and enabled.
// Check if the suggested language codes are configured.
if (!empty($date_format['locales'])) {
foreach ($date_format['locales'] as $langcode) {
// Only proceed if language is enabled.
if (isset($languages[$langcode])) {
$is_existing = (bool) db_query_range('SELECT 1 FROM {date_format_locale} WHERE type = :type AND language = :language', 0, 1, array(':type' => $date_format['type'], ':language' => $langcode))->fetchField();
if (!$is_existing) {

View File

@ -136,28 +136,6 @@ function translation_form_node_form_alter(&$form, &$form_state) {
if (translation_supported_type($form['#node']->type)) {
$node = $form['#node'];
// Build two lists with the disabled and enabled languages.
$languages = language_list();
$grouped_languages = array();
foreach ($languages as $langcode => $language) {
$grouped_languages[(int) $language->enabled][$langcode] = $language;
}
$translator_widget = !empty($grouped_languages[0]) && user_access('translate content');
$groups = array(t('Disabled'), t('Enabled'));
// Allow translators to enter content in disabled languages. Translators
// might need to distinguish between enabled and disabled languages, hence
// we divide them in two option groups.
if ($translator_widget) {
$options = array($groups[1] => array(LANGUAGE_NOT_SPECIFIED => t('- None -')));
foreach (array(1, 0) as $status) {
$group = $groups[$status];
foreach ($grouped_languages[$status] as $langcode => $language) {
$options[$group][$langcode] = $language->name;
}
}
$form['langcode']['#options'] = $options;
}
if (!empty($node->translation_source)) {
// We are creating a translation. Add values and lock language field.
$form['translation_source'] = array('#type' => 'value', '#value' => $node->translation_source);
@ -170,13 +148,7 @@ function translation_form_node_form_alter(&$form, &$form_state) {
unset($form['langcode']['#options'][LANGUAGE_NOT_SPECIFIED]);
foreach (translation_node_get_translations($node->tnid) as $langcode => $translation) {
if ($translation->nid != $node->nid) {
if ($translator_widget) {
$group = $groups[(int)!isset($disabled_languages[$langcode])];
unset($form['langcode']['#options'][$group][$langcode]);
}
else {
unset($form['langcode']['#options'][$langcode]);
}
unset($form['langcode']['#options'][$langcode]);
}
}
// Add translation values and workflow options.
@ -223,7 +195,7 @@ function translation_node_view($node, $view_mode) {
// If the site has no translations or is not multilingual we have no content
// translation links to display.
if (isset($node->tnid) && language_multilingual() && $translations = translation_node_get_translations($node->tnid)) {
$languages = language_list(TRUE);
$languages = language_list();
// There might be a language provider enabled defining custom language
// switch links which need to be taken into account while generating the
@ -236,8 +208,7 @@ function translation_node_view($node, $view_mode) {
$links = array();
foreach ($translations as $langcode => $translation) {
// Do not show links to the same node, to unpublished translations or to
// translations in disabled languages.
// Do not show links to the same node or to unpublished translations.
if ($translation->status && isset($languages[$langcode]) && $langcode != $node->langcode) {
$language = $languages[$langcode];
$key = "translation_$langcode";

View File

@ -33,11 +33,6 @@ class TranslationTestCase extends DrupalWebTestCase {
// Add languages.
$this->addLanguage('en');
$this->addLanguage('es');
$this->addLanguage('it');
// Disable Italian to test the translation behavior with disabled languages.
$edit = array('languages[it][enabled]' => FALSE);
$this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
// Set "Basic page" content type to use multilingual support with
// translation.
@ -126,13 +121,6 @@ class TranslationTestCase extends DrupalWebTestCase {
$this->drupalPost('node/' . $node_translation->nid . '/edit', $edit, t('Save'));
$this->assertRaw(t('Basic page %title has been updated.', array('%title' => $node_translation_title)), t('Translated node updated.'));
// Confirm that disabled languages are an option for translators when
// creating nodes.
$this->drupalGet('node/add/page');
$this->assertFieldByXPath('//select[@name="langcode"]//option', 'it', t('Italian (disabled) is available in language selection.'));
$translation_it = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'it');
$this->assertRaw($translation_it->body[LANGUAGE_NOT_SPECIFIED][0]['value'], t('Content created in Italian (disabled).'));
// Confirm that language neutral is an option for translators when there are
// disabled languages.
$this->drupalGet('node/add/page');
@ -140,11 +128,10 @@ class TranslationTestCase extends DrupalWebTestCase {
$node2 = $this->createPage($this->randomName(), $this->randomName(), LANGUAGE_NOT_SPECIFIED);
$this->assertRaw($node2->body[LANGUAGE_NOT_SPECIFIED][0]['value'], t('Language neutral content created with disabled languages available.'));
// Leave just one language enabled and check that the translation overview
// Leave just one language installed and check that the translation overview
// page is still accessible.
$this->drupalLogin($this->admin_user);
$edit = array('languages[es][enabled]' => FALSE);
$this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
$this->drupalPost('admin/config/regional/language/delete/es', array(), t('Delete'));
$this->drupalLogin($this->translator);
$this->drupalGet('node/' . $node->nid . '/translate');
$this->assertRaw(t('Translations of %title', array('%title' => $node->title)), t('Translation overview page available with only one language enabled.'));
@ -154,17 +141,14 @@ class TranslationTestCase extends DrupalWebTestCase {
* Checks that the language switch links behave properly.
*/
function testLanguageSwitchLinks() {
// Create a Basic page in English and its translations in Spanish and
// Italian.
// Create a Basic page in English and its translation in Spanish.
$node = $this->createPage($this->randomName(), $this->randomName(), 'en');
$translation_es = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'es');
$translation_it = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'it');
// Check that language switch links are correctly shown only for enabled
// languages.
// Check that language switch links are correctly shown for languages
// we have translations for.
$this->assertLanguageSwitchLinks($node, $translation_es);
$this->assertLanguageSwitchLinks($translation_es, $node);
$this->assertLanguageSwitchLinks($node, $translation_it, FALSE);
// Check that links to the displayed translation appear only in the language
// switcher block.
@ -195,10 +179,9 @@ class TranslationTestCase extends DrupalWebTestCase {
* Tests that the language switcher block alterations work as intended.
*/
function testLanguageSwitcherBlockIntegration() {
// Enable Italian to have three items in the language switcher block.
// Add Italian to have three items in the language switcher block.
$this->drupalLogin($this->admin_user);
$edit = array('languages[it][enabled]' => TRUE);
$this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
$this->addLanguage('it');
$this->resetCaches();
$this->drupalLogin($this->translator);
@ -286,7 +269,7 @@ class TranslationTestCase extends DrupalWebTestCase {
// Check to make sure that language has not already been installed.
$this->drupalGet('admin/config/regional/language');
if (strpos($this->drupalGetContent(), 'languages[' . $language_code . '][enabled]') === FALSE) {
if (strpos($this->drupalGetContent(), 'languages[' . $language_code . ']') === FALSE) {
// Doesn't have language installed so add it.
$edit = array();
$edit['predefined_langcode'] = $language_code;
@ -301,15 +284,9 @@ class TranslationTestCase extends DrupalWebTestCase {
$this->assertRaw(t('The language %language has been created and can now be used.', array('%language' => $languages[$language_code]->name)), t('Language has been created.'));
}
}
elseif ($this->xpath('//input[@type="checkbox" and @name=:name and @checked="checked"]', array(':name' => 'languages[' . $language_code . '][enabled]'))) {
// It's installed and enabled. No need to do anything.
$this->assertTrue(true, 'Language [' . $language_code . '] already installed and enabled.');
}
else {
// It's installed but not enabled. Enable it.
// It's installed. No need to do anything.
$this->assertTrue(true, 'Language [' . $language_code . '] already installed.');
$this->drupalPost(NULL, array('languages[' . $language_code . '][enabled]' => TRUE), t('Save configuration'));
$this->assertRaw(t('Configuration saved.'), t('Language successfully enabled.'));
}
}

View File

@ -1094,8 +1094,7 @@ function user_account_form(&$form, &$form_state) {
$form['#validate'][] = 'user_validate_picture';
if (module_exists('language') && language_multilingual()) {
// Get list of enabled languages only.
$languages = language_list(TRUE);
$languages = language_list();
// If the user is being created, we set the user language to the page language.
$user_preferred_language = $register ? $language_interface : user_preferred_language($account);