You are here

function token_get_info in Token 7

Retrieve, sort, store token info from the cache.

Parameters

$token_type: The optional token type that if specified will return $info['types'][$token_type].

$token: The optional token name if specified will return $info['tokens'][$token_type][$token].

Return value

An array of all token information from hook_token_info(), or the array of a token type or specific token.

See also

hook_token_info()

hook_token_info_alter()

8 calls to token_get_info()
theme_token_tree in ./token.pages.inc
Provide a 'tree' display of nested tokens.
token_get_global_token_types in ./token.module
Get a list of token types that can be used without any context (global).
token_get_invalid_tokens in ./token.module
Validate an array of tokens based on their token type.
token_get_invalid_tokens_by_context in ./token.module
Validate an tokens in raw text based on possible contexts.
token_tokens in ./token.tokens.inc
Implements hook_tokens().

... See full list

1 string reference to 'token_get_info'
token_clear_cache in ./token.module
Clear token caches and static variables.

File

./token.module, line 502
Enhances the token API in core: adds a browseable UI, missing tokens, etc.

Code

function token_get_info($token_type = NULL, $token = NULL) {
  global $language;

  // Use the advanced drupal_static() pattern, since this is called very often.
  static $drupal_static_fast;
  if (!isset($drupal_static_fast)) {
    $drupal_static_fast['token_info'] =& drupal_static(__FUNCTION__);
  }
  $token_info =& $drupal_static_fast['token_info'];
  if (empty($token_info)) {
    $cid = "info:{$language->language}";
    if ($cache = cache_get($cid, 'cache_token')) {
      $token_info = $cache->data;
    }
    else {
      $token_info = token_info();
      foreach (array_keys($token_info['types']) as $type_key) {
        if (isset($token_info['types'][$type_key]['type'])) {
          $base_type = $token_info['types'][$type_key]['type'];

          // If this token type extends another token type, then merge in
          // the base token type's tokens.
          if (isset($token_info['tokens'][$base_type])) {
            $token_info['tokens'] += array(
              $type_key => array(),
            );
            $token_info['tokens'][$type_key] += $token_info['tokens'][$base_type];
          }
        }
        else {

          // Add a 'type' value to each token type so we can properly use
          // token_type_load().
          $token_info['types'][$type_key]['type'] = $type_key;
        }
      }

      // Pre-sort tokens.
      uasort($token_info['types'], 'token_asort_tokens');
      foreach (array_keys($token_info['tokens']) as $type) {
        uasort($token_info['tokens'][$type], 'token_asort_tokens');
      }

      // Store info in cache for future use.
      cache_set($cid, $token_info, 'cache_token');
    }
  }
  if (isset($token_type) && isset($token)) {
    return isset($token_info['tokens'][$token_type][$token]) ? $token_info['tokens'][$token_type][$token] : NULL;
  }
  elseif (isset($token_type)) {
    return isset($token_info['types'][$token_type]) ? $token_info['types'][$token_type] : NULL;
  }
  else {
    return $token_info;
  }
}