one-time-login-url localized
http://drupal.org/node/1754162#comment-6399678 Signed-off-by: bachy <git@g-u-i.net>
This commit is contained in:
		
							
								
								
									
										155
									
								
								1754162-15-language-in-login-cancel-links.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								1754162-15-language-in-login-cancel-links.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,155 @@ | ||||
| diff --git a/modules/user/user.module b/modules/user/user.module | ||||
| index 47ac642..c204f6d 100644 | ||||
| --- a/modules/user/user.module | ||||
| +++ b/modules/user/user.module | ||||
| @@ -2286,14 +2286,26 @@ function user_external_login_register($name, $module) { | ||||
|   * | ||||
|   * @param object $account | ||||
|   *   An object containing the user account. | ||||
| + * @param array $options | ||||
| + *   (optional) A keyed array of settings. Supported options are: | ||||
| + *   - langcode: A language code to be used when generating locale-sensitive | ||||
| + *    urls. If langcode is NULL the users preferred language is used. | ||||
|   * | ||||
|   * @return | ||||
|   *   A unique URL that provides a one-time log in for the user, from which | ||||
|   *   they can change their password. | ||||
|   */ | ||||
| -function user_pass_reset_url($account) { | ||||
| +function user_pass_reset_url($account, $options = array()) { | ||||
|    $timestamp = REQUEST_TIME; | ||||
| -  return url("user/reset/$account->uid/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login), array('absolute' => TRUE)); | ||||
| +  $url_options = array('absolute' => TRUE); | ||||
| +  if (isset($options['langcode'])) { | ||||
| +    $languages = language_list(); | ||||
| +    $url_options['language'] = $languages[$options['langcode']]; | ||||
| +  } | ||||
| +  else { | ||||
| +    $url_options['language'] = user_preferred_language($account); | ||||
| +  } | ||||
| +  return url("user/reset/$account->uid/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login), $url_options); | ||||
|  } | ||||
|   | ||||
|  /** | ||||
| @@ -2305,6 +2317,10 @@ function user_pass_reset_url($account) { | ||||
|   *   - uid: The user uid number. | ||||
|   *   - pass: The hashed user password string. | ||||
|   *   - login: The user login name. | ||||
| + * @param array $options | ||||
| + *   (optional) A keyed array of settings. Supported options are: | ||||
| + *   - langcode: A language code to be used when generating locale-sensitive | ||||
| +  *    urls. If langcode is NULL the users preferred language is used. | ||||
|   * | ||||
|   * @return | ||||
|   *   A unique URL that may be used to confirm the cancellation of the user | ||||
| @@ -2313,9 +2329,17 @@ function user_pass_reset_url($account) { | ||||
|   * @see user_mail_tokens() | ||||
|   * @see user_cancel_confirm() | ||||
|   */ | ||||
| -function user_cancel_url($account) { | ||||
| +function user_cancel_url($account, $options = array()) { | ||||
|    $timestamp = REQUEST_TIME; | ||||
| -  return url("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login), array('absolute' => TRUE)); | ||||
| +  $url_options = array('absolute' => TRUE); | ||||
| +  if (isset($options['langcode'])) { | ||||
| +    $languages = language_list(); | ||||
| +    $url_options['language'] = $languages[$options['langcode']]; | ||||
| +  } | ||||
| +  else { | ||||
| +    $url_options['language'] = user_preferred_language($account); | ||||
| +  } | ||||
| +  return url("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login), $url_options); | ||||
|  } | ||||
|   | ||||
|  /** | ||||
| @@ -2752,7 +2776,7 @@ Your account on [site:name] has been canceled. | ||||
|    if ($replace) { | ||||
|      // We do not sanitize the token replacement, since the output of this | ||||
|      // replacement is intended for an e-mail message, not a web browser. | ||||
| -    return token_replace($text, $variables, array('language' => $language, 'callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
| +    return token_replace($text, $variables, array('langcode' => $langcode, 'callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
|    } | ||||
|   | ||||
|    return $text; | ||||
| @@ -2779,8 +2803,8 @@ Your account on [site:name] has been canceled. | ||||
|   */ | ||||
|  function user_mail_tokens(&$replacements, $data, $options) { | ||||
|    if (isset($data['user'])) { | ||||
| -    $replacements['[user:one-time-login-url]'] = user_pass_reset_url($data['user']); | ||||
| -    $replacements['[user:cancel-url]'] = user_cancel_url($data['user']); | ||||
| +    $replacements['[user:one-time-login-url]'] = user_pass_reset_url($data['user'], $options); | ||||
| +    $replacements['[user:cancel-url]'] = user_cancel_url($data['user'], $options); | ||||
|    } | ||||
|  } | ||||
|   | ||||
| diff --git a/modules/user/user.test b/modules/user/user.test | ||||
| index b53db07..0417642 100644 | ||||
| --- a/modules/user/user.test | ||||
| +++ b/modules/user/user.test | ||||
| @@ -2012,6 +2012,26 @@ class UserTokenReplaceTestCase extends DrupalWebTestCase { | ||||
|      ); | ||||
|    } | ||||
|   | ||||
| +  public function setUp() { | ||||
| +    parent::setUp('locale'); | ||||
| + | ||||
| +    $account = $this->drupalCreateUser(array('access administration pages', 'administer languages')); | ||||
| +    $this->drupalLogin($account); | ||||
| + | ||||
| +    // Add language. | ||||
| +    $edit = array('langcode' => 'de'); | ||||
| +    $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language')); | ||||
| + | ||||
| +    // Enable URL language detection and selection. | ||||
| +    $edit = array('language[enabled][locale-url]' => 1); | ||||
| +    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings')); | ||||
| + | ||||
| +    // Reset static caching. | ||||
| +    drupal_static_reset('language_list'); | ||||
| +    drupal_static_reset('locale_url_outbound_alter'); | ||||
| +    drupal_static_reset('locale_language_url_rewrite_url'); | ||||
| +  } | ||||
| + | ||||
|    /** | ||||
|     * Creates a user, then tests the tokens generated from it. | ||||
|     */ | ||||
| @@ -2062,6 +2082,39 @@ class UserTokenReplaceTestCase extends DrupalWebTestCase { | ||||
|        $output = token_replace($input, array('user' => $account), array('language' => $language, 'sanitize' => FALSE)); | ||||
|        $this->assertEqual($output, $expected, t('Unsanitized user token %token replaced.', array('%token' => $input))); | ||||
|      } | ||||
| + | ||||
| +    $languages = language_list(); | ||||
| + | ||||
| +    // Generate login and cancel link. | ||||
| +    $tests = array(); | ||||
| +    $tests['[user:one-time-login-url]'] = user_pass_reset_url($account); | ||||
| +    $tests['[user:cancel-url]'] = user_cancel_url($account); | ||||
| + | ||||
| +    // Generate tokens with interface language. | ||||
| +    $link = url('user', array('absolute' => TRUE)); | ||||
| +    foreach ($tests as $input => $expected) { | ||||
| +      $output = token_replace($input, array('user' => $account), array('langcode' => $language->language, 'callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
| +      $this->assertTrue(strpos($output, $link) === 0, 'Generated URL is in interface language.'); | ||||
| +    } | ||||
| + | ||||
| +    // Generate tokens with the user's preferred language. | ||||
| +    $edit['language'] = 'de'; | ||||
| +    $account = user_save($account, $edit); | ||||
| +    $link = url('user', array('language' => $languages[$account->language], 'absolute' => TRUE)); | ||||
| +    foreach ($tests as $input => $expected) { | ||||
| +      $output = token_replace($input, array('user' => $account), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
| +      $this->assertTrue(strpos($output, $link) === 0, "Generated URL is in the user's preferred language."); | ||||
| +    } | ||||
| + | ||||
| +    // Generate tokens with one specific language. | ||||
| +    $link = url('user', array('language' => $languages['de'], 'absolute' => TRUE)); | ||||
| +    foreach ($tests as $input => $expected) { | ||||
| +      foreach (array($user1, $user2) as $account) { | ||||
| +        $output = token_replace($input, array('user' => $account), array('langcode' => 'de', 'callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
| +        $this->assertTrue(strpos($output, $link) === 0, "Generated URL in in the requested language."); | ||||
| +      } | ||||
| +    } | ||||
| + | ||||
|    } | ||||
|  } | ||||
|   | ||||
| @@ -2285,14 +2285,26 @@ function user_external_login_register($name, $module) { | ||||
|  * | ||||
|  * @param object $account | ||||
|  *   An object containing the user account. | ||||
|  * @param array $options | ||||
|  *   (optional) A keyed array of settings. Supported options are: | ||||
|  *   - langcode: A language code to be used when generating locale-sensitive | ||||
|  *    urls. If langcode is NULL the users preferred language is used. | ||||
|  * | ||||
|  * @return | ||||
|  *   A unique URL that provides a one-time log in for the user, from which | ||||
|  *   they can change their password. | ||||
|  */ | ||||
| function user_pass_reset_url($account) { | ||||
| function user_pass_reset_url($account, $options = array()) { | ||||
|   $timestamp = REQUEST_TIME; | ||||
|   return url("user/reset/$account->uid/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login), array('absolute' => TRUE)); | ||||
|   $url_options = array('absolute' => TRUE); | ||||
|   if (isset($options['langcode'])) { | ||||
|     $languages = language_list(); | ||||
|     $url_options['language'] = $languages[$options['langcode']]; | ||||
|   } | ||||
|   else { | ||||
|     $url_options['language'] = user_preferred_language($account); | ||||
|   } | ||||
|   return url("user/reset/$account->uid/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login), $url_options); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -2304,6 +2316,10 @@ function user_pass_reset_url($account) { | ||||
|  *   - uid: The user uid number. | ||||
|  *   - pass: The hashed user password string. | ||||
|  *   - login: The user login name. | ||||
|  * @param array $options | ||||
|  *   (optional) A keyed array of settings. Supported options are: | ||||
|  *   - langcode: A language code to be used when generating locale-sensitive | ||||
|   *    urls. If langcode is NULL the users preferred language is used. | ||||
|  * | ||||
|  * @return | ||||
|  *   A unique URL that may be used to confirm the cancellation of the user | ||||
| @@ -2312,9 +2328,17 @@ function user_pass_reset_url($account) { | ||||
|  * @see user_mail_tokens() | ||||
|  * @see user_cancel_confirm() | ||||
|  */ | ||||
| function user_cancel_url($account) { | ||||
| function user_cancel_url($account, $options = array()) { | ||||
|   $timestamp = REQUEST_TIME; | ||||
|   return url("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login), array('absolute' => TRUE)); | ||||
|   $url_options = array('absolute' => TRUE); | ||||
|   if (isset($options['langcode'])) { | ||||
|     $languages = language_list(); | ||||
|     $url_options['language'] = $languages[$options['langcode']]; | ||||
|   } | ||||
|   else { | ||||
|     $url_options['language'] = user_preferred_language($account); | ||||
|   } | ||||
|   return url("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login), $url_options); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -2763,7 +2787,7 @@ Your account on [site:name] has been canceled. | ||||
|   if ($replace) { | ||||
|     // We do not sanitize the token replacement, since the output of this | ||||
|     // replacement is intended for an e-mail message, not a web browser. | ||||
|     return token_replace($text, $variables, array('language' => $language, 'callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
|     return token_replace($text, $variables, array('langcode' => $langcode, 'callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
|   } | ||||
|  | ||||
|   return $text; | ||||
| @@ -2790,8 +2814,8 @@ Your account on [site:name] has been canceled. | ||||
|  */ | ||||
| function user_mail_tokens(&$replacements, $data, $options) { | ||||
|   if (isset($data['user'])) { | ||||
|     $replacements['[user:one-time-login-url]'] = user_pass_reset_url($data['user']); | ||||
|     $replacements['[user:cancel-url]'] = user_cancel_url($data['user']); | ||||
|     $replacements['[user:one-time-login-url]'] = user_pass_reset_url($data['user'], $options); | ||||
|     $replacements['[user:cancel-url]'] = user_cancel_url($data['user'], $options); | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										3963
									
								
								modules/user/user.module.orig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3963
									
								
								modules/user/user.module.orig
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -2046,6 +2046,26 @@ class UserTokenReplaceTestCase extends DrupalWebTestCase { | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   public function setUp() { | ||||
|     parent::setUp('locale'); | ||||
|  | ||||
|     $account = $this->drupalCreateUser(array('access administration pages', 'administer languages')); | ||||
|     $this->drupalLogin($account); | ||||
|  | ||||
|     // Add language. | ||||
|     $edit = array('langcode' => 'de'); | ||||
|     $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language')); | ||||
|  | ||||
|     // Enable URL language detection and selection. | ||||
|     $edit = array('language[enabled][locale-url]' => 1); | ||||
|     $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings')); | ||||
|  | ||||
|     // Reset static caching. | ||||
|     drupal_static_reset('language_list'); | ||||
|     drupal_static_reset('locale_url_outbound_alter'); | ||||
|     drupal_static_reset('locale_language_url_rewrite_url'); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Creates a user, then tests the tokens generated from it. | ||||
|    */ | ||||
| @@ -2096,6 +2116,39 @@ class UserTokenReplaceTestCase extends DrupalWebTestCase { | ||||
|       $output = token_replace($input, array('user' => $account), array('language' => $language, 'sanitize' => FALSE)); | ||||
|       $this->assertEqual($output, $expected, t('Unsanitized user token %token replaced.', array('%token' => $input))); | ||||
|     } | ||||
|  | ||||
|     $languages = language_list(); | ||||
|  | ||||
|     // Generate login and cancel link. | ||||
|     $tests = array(); | ||||
|     $tests['[user:one-time-login-url]'] = user_pass_reset_url($account); | ||||
|     $tests['[user:cancel-url]'] = user_cancel_url($account); | ||||
|  | ||||
|     // Generate tokens with interface language. | ||||
|     $link = url('user', array('absolute' => TRUE)); | ||||
|     foreach ($tests as $input => $expected) { | ||||
|       $output = token_replace($input, array('user' => $account), array('langcode' => $language->language, 'callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
|       $this->assertTrue(strpos($output, $link) === 0, 'Generated URL is in interface language.'); | ||||
|     } | ||||
|  | ||||
|     // Generate tokens with the user's preferred language. | ||||
|     $edit['language'] = 'de'; | ||||
|     $account = user_save($account, $edit); | ||||
|     $link = url('user', array('language' => $languages[$account->language], 'absolute' => TRUE)); | ||||
|     foreach ($tests as $input => $expected) { | ||||
|       $output = token_replace($input, array('user' => $account), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
|       $this->assertTrue(strpos($output, $link) === 0, "Generated URL is in the user's preferred language."); | ||||
|     } | ||||
|  | ||||
|     // Generate tokens with one specific language. | ||||
|     $link = url('user', array('language' => $languages['de'], 'absolute' => TRUE)); | ||||
|     foreach ($tests as $input => $expected) { | ||||
|       foreach (array($user1, $user2) as $account) { | ||||
|         $output = token_replace($input, array('user' => $account), array('langcode' => 'de', 'callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE)); | ||||
|         $this->assertTrue(strpos($output, $link) === 0, "Generated URL in in the requested language."); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										2330
									
								
								modules/user/user.test.orig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2330
									
								
								modules/user/user.test.orig
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user
	 bachy
					bachy