diff --git a/modules/locale/locale.module b/modules/locale/locale.module index 906aaf4c63ea12c43ded17f9fed925a5db2c933c..20e94ff5984b6d26f8edd8dcb6f7077369bf48cc 100644 --- a/modules/locale/locale.module +++ b/modules/locale/locale.module @@ -319,6 +319,7 @@ function locale_language_selector_form(&$form, &$form_state, $user) { '#type' => 'fieldset', '#title' => t('Language settings'), '#weight' => 1, + '#access' => ($form['#user_category'] == 'account' || ($form['#user_category'] == 'register' && user_access('administer users'))), ); // Get language negotiation settings. @@ -381,7 +382,7 @@ function locale_form_alter(&$form, &$form_state, $form_id) { if (drupal_multilingual()) { // Display language selector when either creating a user on the admin // interface or editing a user account. - if (($form_id == 'user_register_form' && user_access('administer users')) || ($form_id == 'user_profile_form' && $form['#user_category'] == 'account')) { + if ($form_id == 'user_register_form' || ($form_id == 'user_profile_form' && $form['#user_category'] == 'account')) { locale_language_selector_form($form, $form_state, $form['#user']); } } diff --git a/modules/locale/locale.test b/modules/locale/locale.test index 3b605672a6bc791a48a9f9d20b8e1b6107ec2a4c..d9c638671691165c3e9b1359ad109951f1369c9a 100644 --- a/modules/locale/locale.test +++ b/modules/locale/locale.test @@ -1270,6 +1270,107 @@ class LocaleUserLanguageFunctionalTest extends DrupalWebTestCase { } } +/** + * Functional test for language handling during user creation. + */ +class LocalUserCreationTest extends DrupalWebTestCase { + + public static function getInfo() { + return array( + 'name' => 'User creation', + 'description' => 'Tests whether proper language is stored for new users and access to language selector.', + 'group' => 'Locale', + ); + } + + function setUp() { + parent::setUp('locale'); + } + + /** + * Functional test for language handling during user creation. + */ + function testLocalUserCreation() { + // User to add and remove language and create new users. + $admin_user = $this->drupalCreateUser(array('administer languages', 'access administration pages', 'administer users')); + $this->drupalLogin($admin_user); + + // Add predefined language. + $langcode = 'fr'; + $edit = array( + 'langcode' => 'fr', + ); + $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language')); + $this->assertText($langcode, t('Language added successfully.')); + $this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), t('Correct page redirection.')); + + // Set language negotiation. + $edit = array( + 'language[enabled][locale-url]' => TRUE, + ); + $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings')); + $this->assertText(t('Language negotiation configuration saved.'), t('Set language negotiation.')); + + // Check if the language selector is available on admin/people/create and + // set to the currently active language. + $this->drupalGet($langcode . '/admin/people/create'); + $this->assertFieldChecked("edit-language-$langcode", t('Global language set in the language selector.')); + + // Create a user with the admin/people/create form and check if the correct + // language is set. + $username = $this->randomName(10); + $edit = array( + 'name' => $username, + 'mail' => $this->randomName(4) . '@example.com', + 'pass[pass1]' => $username, + 'pass[pass2]' => $username, + ); + + $this->drupalPost($langcode . '/admin/people/create', $edit, t('Create new account')); + + $user = user_load_by_name($username); + $this->assertEqual($user->language, $langcode, t('New user has correct language set.')); + + // Register a new user and check if the language selector is hidden. + $this->drupalLogout(); + + $this->drupalGet($langcode . '/user/register'); + $this->assertNoFieldByName('language[fr]', t('Language selector is not accessible.')); + + $username = $this->randomName(10); + $edit = array( + 'name' => $username, + 'mail' => $this->randomName(4) . '@example.com', + ); + + $this->drupalPost($langcode . '/user/register', $edit, t('Create new account')); + + $user = user_load_by_name($username); + $this->assertEqual($user->language, $langcode, t('New user has correct language set.')); + + // Test if the admin can use the language selector and if the + // correct language is was saved. + $user_edit = $langcode . '/user/' . $user->uid . '/edit'; + + $this->drupalLogin($admin_user); + $this->drupalGet($user_edit); + $this->assertFieldChecked("edit-language-$langcode", t('Language selector is accessible and correct language is selected.')); + + // Set pass_raw so we can login the new user. + $user->pass_raw = $this->randomName(10); + $edit = array( + 'pass[pass1]' => $user->pass_raw, + 'pass[pass2]' => $user->pass_raw, + ); + + $this->drupalPost($user_edit, $edit, t('Save')); + + $this->drupalLogin($user); + $this->drupalGet($user_edit); + $this->assertFieldChecked("edit-language-$langcode", t('Language selector is accessible and correct language is selected.')); + } +} + /** * Functional tests for configuring a different path alias per language. */