You are here

function token_example_tokens in Examples for Developers 7

Implements hook_tokens().

Related topics

File

token_example/token_example.tokens.inc, line 62
Token callbacks for the token_example module.

Code

function token_example_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();
  $sanitize = !empty($options['sanitize']);

  // Text format tokens.
  if ($type == 'format' && !empty($data['format'])) {
    $format = $data['format'];
    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'id':

          // Since {filter_format}.format is an integer and not user-entered
          // text, it does not need to ever be sanitized.
          $replacements[$original] = $format->format;
          break;
        case 'name':

          // Since the format name is user-entered text, santize when requested.
          $replacements[$original] = $sanitize ? filter_xss($format->name) : $format->name;
          break;
      }
    }
  }

  // Default format tokens.
  if ($type == 'default-format') {
    $default_id = filter_default_format();
    $default_format = filter_format_load($default_id);
    $replacements += token_generate('format', $tokens, array(
      'format' => $default_format,
    ), $options);
  }

  // Node tokens.
  if ($type == 'node' && !empty($data['node'])) {
    $node = $data['node'];
    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'body-format':
          if ($items = field_get_items('node', $node, 'body')) {
            $format = filter_format_load($items[0]['format']);
            $replacements[$original] = $sanitize ? filter_xss($format->name) : $format->name;
          }
          break;
      }
    }

    // Chained token relationships.
    if ($format_tokens = token_find_with_prefix($tokens, 'body-format')) {
      if ($items = field_get_items('node', $node, 'body')) {
        $body_format = filter_format_load($items[0]['format']);
        $replacements += token_generate('format', $format_tokens, array(
          'format' => $body_format,
        ), $options);
      }
    }
  }

  // Comment tokens.
  if ($type == 'comment' && !empty($data['comment'])) {
    $comment = $data['comment'];
    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'body-format':
          if ($items = field_get_items('comment', $comment, 'comment_body')) {
            $format = filter_format_load($items[0]['format']);
            $replacements[$original] = $sanitize ? filter_xss($format->name) : $format->name;
          }
          break;
      }
    }

    // Chained token relationships.
    if ($format_tokens = token_find_with_prefix($tokens, 'body-format')) {
      if ($items = field_get_items('comment', $comment, 'comment_body')) {
        $body_format = filter_format_load($items[0]['format']);
        $replacements += token_generate('format', $format_tokens, array(
          'format' => $body_format,
        ), $options);
      }
    }
  }
  return $replacements;
}