Le jeton «utilisateur: connexion unique» n'est pas remplacé par token_replace


7

J'essaie d'envoyer des e-mails aux utilisateurs manuellement en utilisant le hook hook_mail_alter. Ce qui suit est ma fonction dans son intégralité:

function custom_module_mail_alter(&$message) {
    $email = '[user:name],

A site administrator at [site:name] has created an account for you. You may now log in by clicking this link or copying and pasting it to your browser:

[user:one-time-login-url]

This link can only be used once to log in and will lead you to a page where you can set your password.

After setting your password, you will be able to log in at [site:login-url] in the future using:

username: [user:name]
password: Your password

--  [site:name] team';

    $account = $message['params']['account'];
    $uid = $account->uid;

    $_user = user_load($uid);

    dpm(token_replace($email, array('user'=>$_user)));
}

La sortie ressemble à ceci:

Peter,

A site administrator at Website has created an account for you. You may now log in by clicking this link or copying and pasting it to your browser:

[user:one-time-login-url]

This link can only be used once to log in and will lead you to a page where you can set your password.

After setting your password, you will be able to log in at http://localhost/website/user in the future using:

username: Peter
password: Your password

--  Website team

Comme vous pouvez le voir, des choses comme [utilisateur: nom], [site: nom] et [site: login-url] sont correctement traitées. Le seul jeton non traité est [user: one-time-login-url]. Des idées pourquoi cela se produit?

EDIT: Juste pour référence, le jeton est traité dans les e-mails de bienvenue envoyés automatiquement par le système, donc le module de jeton est actif et fonctionne ... Il ne semble tout simplement pas être traité lorsque j'appelle manuellement token_replace ().


Avez-vous le token.module activé? Il semble que le jeton soit défini dans token_token_info () et non dans user_token_info ().
Berdir

Oui, le module Token est activé, et j'utilise la dernière Beta7 ... C'est plutôt étrange.
Peter

Réponses:


11

Pour remplacer ce jeton, vous devez appeler en token_replace()tant que token_replace($email, array('user' => $_user), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE)).

La fonction user_mail_tokens () est décrite dans la documentation comme:

Rappel de jeton pour ajouter des jetons dangereux pour les e-mails des utilisateurs.

Cette fonction est utilisée par l' appel token_replace () à la fin de _user_mail_text () pour configurer des jetons supplémentaires qui peuvent être utilisés dans les messages électroniques générés par user_mail () .

Le code utilisé par _user_mail_text()pour appeler ce rappel est le suivant.

// 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));

Le module Token n'est pas nécessaire pour remplacer les jetons, dans Drupal 7. Le code pour remplacer les jetons fait partie du code principal de Drupal 7; le module Token de Drupal 7 définit des jetons supplémentaires que les modules de base Drupal ne définissent pas.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.