158 lines
4.6 KiB
PHP
158 lines
4.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* User page callbacks for the token module.
|
|
*/
|
|
|
|
/**
|
|
* For a given context, builds a formatted list of tokens and descriptions
|
|
* of their replacement values.
|
|
*
|
|
* @param types
|
|
* The token types to display documentation for. Can be either a single
|
|
* string or an array of token types. Defaults to 'all'.
|
|
* @param prefix
|
|
* The prefix your module will use when parsing tokens. Defaults to '['
|
|
* @param suffix
|
|
* The suffix your module will use when parsing tokens. Defaults to ']'
|
|
* @return An HTML table containing the formatting docs.
|
|
*
|
|
* @ingroup themeable
|
|
*/
|
|
function theme_token_help($types = 'all', $prefix = TOKEN_PREFIX, $suffix = TOKEN_SUFFIX) {
|
|
token_include();
|
|
$full_list = token_get_list($types);
|
|
|
|
$headers = array(t('Token'), t('Replacement value'));
|
|
$rows = array();
|
|
foreach ($full_list as $key => $category) {
|
|
$rows[] = array(array('data' => t('@type tokens', array('@type' => drupal_ucfirst($key))), 'class' => 'region', 'colspan' => 2));
|
|
foreach ($category as $token => $description) {
|
|
$row = array();
|
|
$row[] = $prefix . $token . $suffix;
|
|
$row[] = $description;
|
|
$rows[] = $row;
|
|
}
|
|
}
|
|
|
|
$output = theme('table', $headers, $rows, array('class' => 'description'));
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Provide a 'tree' display of nested tokens.
|
|
*
|
|
* @ingroup themeable
|
|
*/
|
|
function theme_token_tree($token_types = array(), $global_types = TRUE, $click_insert = TRUE) {
|
|
if ($token_types == 'all' || !is_array($token_types) || in_array('all', $token_types)) {
|
|
$token_types = array('all');
|
|
}
|
|
elseif ($global_types) {
|
|
$token_types[] = 'global';
|
|
}
|
|
else {
|
|
$global_key = array_search('global', $token_types);
|
|
if ($global_key !== FALSE) {
|
|
unset($token_types[$global_key]);
|
|
}
|
|
}
|
|
|
|
// Check for token type validity and sort.
|
|
$token_types = array_unique($token_types);
|
|
$info = token_get_list($token_types);
|
|
//$token_types = array_intersect($token_types, array_keys($info));
|
|
$token_types = array_keys($info);
|
|
sort($token_types);
|
|
|
|
$header = array(
|
|
t('Token'),
|
|
t('Description'),
|
|
);
|
|
$rows = array();
|
|
|
|
foreach ($token_types as $type) {
|
|
$parent = NULL;
|
|
|
|
if (count($token_types) > 1) {
|
|
$rows[] = _token_token_tree_format_row($type, array(), TRUE);
|
|
$parent = $type;
|
|
}
|
|
|
|
foreach ($info[$type] as $token => $description) {
|
|
$rows[] = _token_token_tree_format_row("[$token]", array('description' => $description, 'parent' => $parent));
|
|
}
|
|
}
|
|
|
|
if (count($rows)) {
|
|
drupal_add_js(drupal_get_path('module', 'token') . '/jquery.treeTable.js');
|
|
drupal_add_css(drupal_get_path('module', 'token') . '/jquery.treeTable.css');
|
|
drupal_add_js(drupal_get_path('module', 'token') . '/token.js');
|
|
drupal_add_css(drupal_get_path('module', 'token') . '/token.css');
|
|
}
|
|
else {
|
|
$rows[] = array(array(
|
|
'data' => t('No tokens available.'),
|
|
'colspan' => 2,
|
|
));
|
|
}
|
|
|
|
$table_options = array(
|
|
'attributes' => array('class' => 'token-tree'),
|
|
'caption' => '',
|
|
);
|
|
if ($click_insert) {
|
|
$table_options['caption'] = t('Click a token to insert it into the field you\'ve last clicked.');
|
|
$table_options['attributes']['class'] .= ' token-click-insert';
|
|
}
|
|
return theme('table', $header, $rows, $table_options['attributes'], $table_options['caption']);
|
|
}
|
|
|
|
/**
|
|
* Build a row in the token tree.
|
|
*/
|
|
function _token_token_tree_format_row($token, $token_info = array(), $is_group = FALSE) {
|
|
$row = array(
|
|
'id' => _token_clean_css_identifier($token),
|
|
'class' => array(),
|
|
'data' => array(
|
|
'token' => '',
|
|
'description' => !empty($token_info['description']) ? $token_info['description'] : '',
|
|
),
|
|
);
|
|
|
|
if ($is_group) {
|
|
// This is a token type/group.
|
|
$row['data']['token'] = drupal_ucfirst($token);
|
|
$row['class'][] = 'token-group';
|
|
$row['id'] .= '-group';
|
|
}
|
|
else {
|
|
// This is a token.
|
|
$row['data']['token'] = array(
|
|
'data' => $token,
|
|
'class' => 'token-key',
|
|
);
|
|
if (!empty($token_info['parent'])) {
|
|
$row['class'][] = 'child-of-' . _token_clean_css_identifier($token_info['parent']) . '-group';
|
|
}
|
|
}
|
|
|
|
$row['class'] = implode(' ', $row['class']);
|
|
|
|
return $row;
|
|
}
|
|
|
|
function _token_clean_css_identifier($id) {
|
|
return 'token-' . rtrim(str_replace(array('][', '_', ' ', ':'), '-', trim($id, '[]')), '-');
|
|
}
|
|
|
|
/**
|
|
* Menu callback; prints the available tokens and values for an object.
|
|
*/
|
|
function token_devel_token_object($entity, $object) {
|
|
$tokens = token_get_values($entity, $object);
|
|
$tokens = array_combine($tokens->tokens, $tokens->values);
|
|
return kdevel_print_object($tokens);
|
|
}
|