O token “user: one-time-login-url” não foi substituído por token_replace


7

Estou tentando enviar e-mails aos usuários manualmente usando o gancho hook_mail_alter. A seguir, é minha função em sua totalidade:

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

A saída é assim:

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

Como você pode ver, coisas como [usuário: nome], [site: nome] e [site: login-url] são processadas corretamente. O único token que não é processado é [user: one-time-login-url]. Alguma idéia de por que isso está acontecendo?

EDIT: Apenas para referência, o token é processado nos e-mails de boas-vindas enviados automaticamente pelo sistema, para que o módulo do token esteja ativo e funcionando ... Apenas não parece ser processado quando eu chamo manualmente token_replace ()


Você tem o token.module ativado? Parece que esse token é definido em token_token_info () e não em user_token_info ().
Berdir 7/11

Sim, o módulo Token está ativado e estou usando o Beta7 mais recente ... Isso é bastante estranho.
Peter

Respostas:


11

Para substituir esse token, você precisa chamar token_replace()como token_replace($email, array('user' => $_user), array('callback' => 'user_mail_tokens', 'sanitize' => FALSE)).

A função user_mail_tokens () é descrita na documentação como:

Retorno de chamada de token para adicionar tokens não seguros para e-mails de usuários.

Essa função é usada pela chamada token_replace () no final de _user_mail_text () para configurar alguns tokens adicionais que podem ser usados ​​em mensagens de email geradas por user_mail () .

O código usado _user_mail_text()para chamar esse retorno de chamada é o seguinte.

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

O módulo Token não é necessário para substituir tokens, no Drupal 7. O código para substituir tokens faz parte do código principal do Drupal 7; o módulo Token no Drupal 7 define tokens extras que os módulos principais do Drupal não definem.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.