Създаване на собствен token

Поставяме кода за нашия токен във файл mymodule.tokens.inc

/**
 * Implements hook_token_info().
 */
function mymodule_token_info() {
  $info['tokens']['user']['custom-one-time-login-url'] = array(
    'name' => t('Custom - One-time login URL'),
    'description' => t('Custom URL for the one-time login page for the user account (path arg1 changed).'),
    'restricted' => TRUE,
  );
 
  return $info;
}
 
/**
 * Implements hook_tokens().
 */
function mymodule_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();
 
  if ($type == 'user' && !empty($data['user'])) {
    //use this token on new regitered user mail message instead [user:one-time-login-url]
    $replacements['[user:custom-one-time-login-url]'] = custom_user_pass_reset_url($data['user']);
  }
 
  return $replacements;
}
 
function custom_user_pass_reset_url($account) {
  $timestamp = REQUEST_TIME;
  return url("user/set-passwd/$account->uid/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login), array('absolute' => TRUE));
}

Дотук имаме собствен token [user:custom-one-time-login-url], който е нови път за задаване на парола при първоначална регистрация, направена от потребител. Разликата с оригиналния token е, че връща различен път за задаване на парола като е заменена reset на set-passwd.

За да се случва нещо на урл-то, което даваме, трябва да го регистрираме:

/**
 * Implements hook_menu().
 */
function mymodule_menu() {
  $items = array();
 
  $items['user/set-passwd/%/%/%'] = array(
    'title' => 'Set password',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('overided_user_pass_reset', 2, 3, 4),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );
 
  return $items;
}
Category: