diff --git a/core/includes/form.inc b/core/includes/form.inc index 926b149..d2cd5ce 100644 --- a/core/includes/form.inc +++ b/core/includes/form.inc @@ -1142,17 +1142,22 @@ function template_preprocess_radios(&$variables) { function form_process_password_confirm($element) { $element['pass1'] = array( '#type' => 'password', - '#title' => t('Password'), + '#title' => !empty($element['#title1']) ? $element['#title1'] : t('Password'), '#value' => empty($element['#value']) ? NULL : $element['#value']['pass1'], '#required' => $element['#required'], '#attributes' => array('class' => array('password-field')), ); $element['pass2'] = array( '#type' => 'password', - '#title' => t('Confirm password'), + '#title' => !empty($element['#title2']) ? $element['#title2'] : t('Confirm password'), '#value' => empty($element['#value']) ? NULL : $element['#value']['pass2'], '#required' => $element['#required'], '#attributes' => array('class' => array('password-confirm')), + '#states' => array( + 'visible' => array( + ':input[name="pass[pass1]"]' => array('filled' => TRUE), + ), + ), ); $element['#element_validate'] = array('password_confirm_validate'); $element['#tree'] = TRUE; diff --git a/core/modules/user/src/AccountForm.php b/core/modules/user/src/AccountForm.php index f4f718b..60d0e78 100644 --- a/core/modules/user/src/AccountForm.php +++ b/core/modules/user/src/AccountForm.php @@ -115,6 +115,9 @@ public function form(array $form, array &$form_state) { if (!$register) { $form['account']['pass'] = array( '#type' => 'password_confirm', + '#prefix' => '

' . $this->t('Change password') . '

', + '#title1' => $this->t('New password'), + '#title2' => $this->t('Confirm new password'), '#size' => 25, '#description' => $this->t('To change the current user password, enter the new password in both fields.'), ); @@ -130,9 +133,9 @@ public function form(array $form, array &$form_state) { // password if they logged in via a one-time login link. if (!$pass_reset) { $protected_values['mail'] = $form['account']['mail']['#title']; - $protected_values['pass'] = $this->t('Password'); + $protected_values['pass'] = $this->t('New password'); $request_new = l($this->t('Request new password'), 'user/password', array('attributes' => array('title' => $this->t('Request new password via email.')))); - $current_pass_description = $this->t('Required if you want to change the %mail or %pass below. !request_new.', array('%mail' => $protected_values['mail'], '%pass' => $protected_values['pass'], '!request_new' => $request_new)); + $current_pass_description = $this->t('Required if you want to change the %mail or %pass above. !request_new.', array('%mail' => $protected_values['mail'], '%pass' => $protected_values['pass'], '!request_new' => $request_new)); } // The user must enter their current password to change to a new one. @@ -148,11 +151,17 @@ public function form(array $form, array &$form_state) { '#size' => 25, '#access' => !empty($protected_values), '#description' => $current_pass_description, - '#weight' => -5, // Do not let web browsers remember this password, since we are // trying to confirm that the person submitting the form actually // knows the current one. '#attributes' => array('autocomplete' => 'off'), + '#states' => array( + // Only show this field when mail or new password has changed. + 'visible' => array( + array(':input[name="mail"]' => array('!value' => $account->getEmail())), + array(':input[name="pass[pass1]"]' => array('filled' => TRUE)), + ), + ), ); $form_state['user'] = $account; diff --git a/core/modules/user/src/Tests/UserEditTest.php b/core/modules/user/src/Tests/UserEditTest.php index 68747a1..0a626f6 100644 --- a/core/modules/user/src/Tests/UserEditTest.php +++ b/core/modules/user/src/Tests/UserEditTest.php @@ -58,7 +58,7 @@ function testUserEdit() { $edit['pass[pass1]'] = $new_pass = $this->randomName(); $edit['pass[pass2]'] = $new_pass; $this->drupalPostForm("user/" . $user1->id() . "/edit", $edit, t('Save')); - $this->assertRaw(t("Your current password is missing or incorrect; it's required to change the %name.", array('%name' => t('Password')))); + $this->assertRaw(t("Your current password is missing or incorrect; it's required to change the %name.", array('%name' => t('New password')))); // Try again with the current password. $edit['current_pass'] = $user1->pass_raw; diff --git a/core/modules/user/src/Tests/UserPasswordResetTest.php b/core/modules/user/src/Tests/UserPasswordResetTest.php index 41adecc..5ae1e6f 100644 --- a/core/modules/user/src/Tests/UserPasswordResetTest.php +++ b/core/modules/user/src/Tests/UserPasswordResetTest.php @@ -85,7 +85,7 @@ function testUserPasswordReset() { // Verify that the password reset session has been destroyed. $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText(t('Your current password is missing or incorrect; it\'s required to change the Password.'), 'Password needed to make profile changes.'); + $this->assertText(t('Your current password is missing or incorrect; it\'s required to change the New password.'), 'Password needed to make profile changes.'); // Log out, and try to log in again using the same one-time link. $this->drupalLogout();