--- advuser.module	2010-04-27 06:32:12.000000000 -0500
+++ advuserNEW.module	2010-07-04 17:02:39.000000000 -0500
@@ -12,33 +12,34 @@
  * @defgroup advuser_constants Advanced User constants
  * @{
  */
-define('ADVUSER_SUBSTITUTION_TEXT', '<strong>Substitution variables</strong> available in subject and email body<br/><em> %user_name, %user_email, %user_status, %user_created, %user_theme, %user_timezone, %user_language, %user_signature, %site, %uri</em>');
+define('ADVUSER_SUBSTITUTION_TEXT', '<strong>Substitution variables</strong> available in subject and email body:<br/>!tokens');
 
-define('ADVUSER_DEFAULT_NEW_SUBJECT', '[%site] On %user_created a new user registered as %user_name.');
+define('ADVUSER_DEFAULT_NEW_SUBJECT', '[[site-url]] On [advuser-created] a new user registered as [user].');
 
 define('ADVUSER_DEFAULT_NEW_MAIL', "=====  New User Information:  =====
-    User: %user_name 
-    Mail: %user_email
- Created: %user_created 
-  Status: %user_status
-Timezone: %user_timezone
-Language: %user_language
-   Theme: %user_theme
+    User: [user]
+    Mail: [mail]
+ Created: [advuser-created]
+  Status: [advuser-status]
+Timezone: [advuser-timezone]
+Language: [advuser-language]
+   Theme: [advuser-theme]
+Administrator user at [account-edit] for [site-name]");
 
-Administor user at %uri for %site");
-
-define('ADVUSER_DEFAULT_MODIFY_SUBJECT', '[%site] User %user_name has modified their account.');
+define('ADVUSER_DEFAULT_MODIFY_SUBJECT', '[[site-url]] User [user] has modified their account.');
 
 define('ADVUSER_DEFAULT_MODIFY_MAIL', "=====  Updated User Information:  =====
-    User: %user_name 
-    Mail: %user_email
- Created: %user_created 
-  Status: %user_status
-Timezone: %user_timezone
-Language: %user_language
-   Theme: %user_theme
-
-Administor user at %uri for %site");
+    User: [user]
+    Mail: [mail]
+ Created: [advuser-created]
+  Status: [advuser-status]
+Timezone: [advuser-timezone]
+Language: [advuser-language]
+   Theme: [advuser-theme]
+
+Administrator user at [account-edit] for [site-name]");
+define('ADVUSER_TOKEN_PREFIX', '[');
+define('ADVUSER_TOKEN_SUFFIX', ']');
 
 /**
  * @} End of "defgroup advuser_constants".
@@ -288,26 +289,6 @@ function advuser_mail($key, &$message, $
 }
 
 /**
- * Get a list of substitution variables for the user account
- * @param $user the user account
- * @return An associative array of substitution variables 
- */
-function _advuser_get_variables($user) {
-  return array(
-    '%user_name' => $user->name,
-    '%site' => variable_get("site_name", "drupal"), 
-    '%uri' => url('user/'. $user->uid, array('absolute' => TRUE)), 
-    '%user_email' => $user->mail,
-    '%user_status' => t($user->status ? 'Active' : 'Blocked'),
-    '%user_theme' => empty($user->theme) ? t('DEFAULT') : $user->theme,
-    '%user_created' => strftime('%x %X', $user->created),
-    '%user_language' => empty($user->language) ? t('DEFAULT') : $user->language,
-    '%user_timezone' => empty($user->timezone) ? '0' : "$user->timezone",
-    '%user_signature' => $user->signature,
-  );
-}
-
-/**
  * @private
  * Return a list of users to send notification of user changes.
  *
@@ -370,9 +351,20 @@ function _advuser_receive_notification_b
     } break;
   }
 
-  $variables = _advuser_get_variables($account);
-  $subject = strtr($subject, $variables);
-  $body = strtr($body, $variables);
+  $types = array('user' => $account);
+  $subject = token_replace_multiple(
+    $subject,
+    $types,
+    ADVUSER_TOKEN_PREFIX,
+    ADVUSER_TOKEN_SUFFIX
+  );
+  $body = token_replace_multiple(
+    $body,
+    $types,
+    ADVUSER_TOKEN_PREFIX,
+    ADVUSER_TOKEN_SUFFIX
+  );
+  unset($types);
 
   if ($notify) {
     if (variable_get('advuser_log_notifications', FALSE)) {
@@ -849,4 +841,39 @@ function advuser_reset_variables() {
   $advuser['deselected'] = array();
 }
 
+/**
+ * Implementation of hook_token_values().
+ */
+function advuser_token_values($type, $object = NULL, $options = array()) {
+  if ($type == 'user') {
+    $user = $object;
+    $tokens = array();
+    $tokens['advuser-status'] = $user->status ? t('Active') : t('Blocked');
+    $tokens['advuser-theme'] = empty($user->theme) ? t('DEFAULT') : $user->theme;
+    $tokens['advuser-created'] = strftime('%x %X', $user->created);
+    $tokens['advuser-language'] = empty($user->language) ? t('DEFAULT') : $user->language;
+    $tokens['advuser-timezone'] = empty($user->timezone) ? '0' : "$user->timezone";
+    $tokens['advuser-signature'] = check_plain($user->signature);
+    $tokens['advuser-signature-raw'] = $user->signature;
+    return $tokens;
+  }
+}
+
+/**
+ * Implementation of hook_token_list().
+ */
+function advuser_token_list($type = 'all') {
+  if ($type == 'user' || $type == 'all') {
+    $tokens = array();
+    $tokens['user']['advuser-status'] = t("The !this_module module user's status (either '!active' or '!blocked').", array('!active' => t('Active'), '!blocked' => t('Blocked'), '!this_module' => t('Advanced User')));
+    $tokens['user']['advuser-theme'] = t("The !this_module module user's theme (or '!default' if not defined).", array('!default' => t('DEFAULT'), '!this_module' => t('Advanced User')));
+    $tokens['user']['advuser-created'] = t("The !this_module module user's created date and time.", array('!this_module' => t('Advanced User')));
+    $tokens['user']['advuser-language'] = t("The !this_module module user's language (or '!default' if not defined).", array('!default' => t('DEFAULT'), '!this_module' => t('Advanced User')));
+    $tokens['user']['advuser-timezone'] = t("The !this_module module user's timezone (or '0' if not defined).", array('!this_module' => t('Advanced User')));
+    $tokens['user']['advuser-signature'] = t("The !this_module module user's signature.", array('!this_module' => t('Advanced User')));
+    $tokens['user']['advuser-signature-raw'] = t("The !this_module module unfiltered user's signature. WARNING - raw user input.", array('!this_module' => t('Advanced User')));
+    return $tokens;
+  }
+}
+
 // vim:ft=php:sts=2:sw=2:ts=2:et:ai:sta:ff=unix
