229 lines
6.8 KiB
Plaintext

<?php
/**
* @file
* An example module showing how to define and use tokens.
*
* The Token module provides an API for providing tokens to other modules.
* Tokens are small bits of text that can be placed into larger documents
* via simple placeholders, like %site-name or [user].
*/
/**
* @defgroup token_example Example: Token API
* @ingroup examples
* @{
* Examples using the Token API.
*
* The Token module provides an API for providing tokens to other modules.
* Tokens are small bits of text that can be placed into larger documents
* via simple placeholders, like %site-name or [user].
*
* Drupal 7 documentation on Token can be found here:
* http://drupal.org/documentation/modules/token
*
* A list of existing tokens can be found here:
* http://drupal.org/node/390482#drupal7tokenslist
*
* This example is part of the Examples for Developers Project which you can
* download and experiment with here: http://drupal.org/project/examples
*/
/**
* Implements hook_menu().
*/
function token_example_menu() {
$items['examples/token'] = array(
'title' => 'Token example',
'description' => 'Test replacement tokens in real time.',
'page callback' => 'drupal_get_form',
'page arguments' => array('token_example_example_form'),
'access callback' => TRUE,
);
return $items;
}
/**
* Implements hook_entity_info_alter().
*
* @todo Remove this when the testbot can properly pick up dependencies
* for contrib modules.
*/
function token_example_entity_info_alter(&$info) {
if (isset($info['taxonomy_term'])) {
$info['taxonomy_term']['token type'] = 'term';
}
if (isset($info['taxonomy_vocabulary'])) {
$info['taxonomy_vocabulary']['token type'] = 'vocabulary';
}
}
/**
* Form builder; display lists of supported token entities and text to tokenize.
*/
function token_example_example_form($form, &$form_state) {
$entities = entity_get_info();
$token_types = array();
// Scan through the list of entities for supported token entities.
foreach ($entities as $entity => $info) {
$object_callback = "_token_example_get_{$entity}";
if (function_exists($object_callback) && $objects = $object_callback()) {
$form[$entity] = array(
'#type' => 'select',
'#title' => $info['label'],
'#options' => array(0 => t('Not selected')) + $objects,
'#default_value' => isset($form_state['storage'][$entity]) ? $form_state['storage'][$entity] : 0,
'#access' => !empty($objects),
);
// Build a list of supported token types based on the available entites.
if ($form[$entity]['#access']) {
$token_types[$entity] = !empty($info['token type']) ? $info['token type'] : $entity;
}
}
}
$form['text'] = array(
'#type' => 'textarea',
'#title' => t('Enter your text here'),
'#default_value' => 'Hello [current-user:name]!',
);
// Display the results of tokenized text.
if (!empty($form_state['storage']['text'])) {
$form['text']['#default_value'] = $form_state['storage']['text'];
$data = array();
foreach ($entities as $entity => $info) {
if (!empty($form_state['storage'][$entity])) {
$objects = entity_load($entity, array($form_state['storage'][$entity]));
if ($objects) {
$data[$token_types[$entity]] = reset($objects);
}
}
}
// Display the tokenized text.
$form['text_tokenized'] = array(
'#type' => 'item',
'#title' => t('Result'),
'#markup' => token_replace($form_state['storage']['text'], $data),
);
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
if (module_exists('token')) {
$form['token_tree'] = array(
'#theme' => 'token_tree',
'#token_types' => $token_types,
);
}
else {
$form['token_tree'] = array(
'#markup' => '<p>' . t('Enable the <a href="@drupal-token">Token module</a> to view the available token browser.', array('@drupal-token' => 'http://drupal.org/project/token')) . '</p>',
);
}
return $form;
}
/**
* Submit callback; store the submitted values into storage.
*/
function token_example_example_form_submit($form, &$form_state) {
$form_state['storage'] = $form_state['values'];
$form_state['rebuild'] = TRUE;
}
/**
* Builds a list of available content.
*/
function _token_example_get_node() {
if (!user_access('access content') && !user_access('bypass node access')) {
return array();
}
$node_query = db_select('node', 'n');
$node_query->fields('n', array('nid', 'title'));
$node_query->condition('n.status', NODE_PUBLISHED);
$node_query->orderBy('n.created', 'DESC');
$node_query->range(0, 10);
$node_query->addTag('node_access');
$nodes = $node_query->execute()->fetchAllKeyed();
$nodes = array_map('check_plain', $nodes);
return $nodes;
}
/**
* Builds a list of available comments.
*/
function _token_example_get_comment() {
if (!module_exists('comment') || (!user_access('access comments') && !user_access('administer comments'))) {
return array();
}
$comment_query = db_select('comment', 'c');
$comment_query->innerJoin('node', 'n', 'n.nid = c.nid');
$comment_query->fields('c', array('cid', 'subject'));
$comment_query->condition('n.status', NODE_PUBLISHED);
$comment_query->condition('c.status', COMMENT_PUBLISHED);
$comment_query->orderBy('c.created', 'DESC');
$comment_query->range(0, 10);
$comment_query->addTag('node_access');
$comments = $comment_query->execute()->fetchAllKeyed();
$comments = array_map('check_plain', $comments);
return $comments;
}
/**
* Builds a list of available user accounts.
*/
function _token_example_get_user() {
if (!user_access('access user profiles') &&
!user_access('administer users')) {
return array();
}
$account_query = db_select('users', 'u');
$account_query->fields('u', array('uid', 'name'));
$account_query->condition('u.uid', 0, '>');
$account_query->condition('u.status', 1);
$account_query->range(0, 10);
$accounts = $account_query->execute()->fetchAllKeyed();
$accounts = array_map('check_plain', $accounts);
return $accounts;
}
/**
* Builds a list of available taxonomy terms.
*/
function _token_example_get_taxonomy_term() {
$term_query = db_select('taxonomy_term_data', 'ttd');
$term_query->fields('ttd', array('tid', 'name'));
$term_query->range(0, 10);
$term_query->addTag('term_access');
$terms = $term_query->execute()->fetchAllKeyed();
$terms = array_map('check_plain', $terms);
return $terms;
}
/**
* Builds a list of available files.
*/
function _token_example_get_file() {
$file_query = db_select('file_managed', 'f');
$file_query->fields('f', array('fid', 'filename'));
$file_query->range(0, 10);
$files = $file_query->execute()->fetchAllKeyed();
$files = array_map('check_plain', $files);
return $files;
}
/**
* @} End of "defgroup token_example".
*/