1 token.inc | _token_build_tree($token_type, array $options, $parent_restricted = FALSE) |
Recursive helper for token_build_tree().
File
- core/
includes/ token.inc, line 593 - Backdrop placeholder/token replacement system.
Code
function _token_build_tree($token_type, array $options, $parent_restricted = FALSE) {
$options += array(
'parents' => array(),
);
$info = token_get_info();
if ($options['depth'] <= 0 || !isset($info['types'][$token_type]) || !isset($info['tokens'][$token_type])) {
return array();
}
$tree = array();
foreach ($info['tokens'][$token_type] as $token => $token_info) {
// Build the raw token string.
$token_parents = $options['parents'];
if (empty($token_parents)) {
// If the parents array is currently empty, assume the token type is its
// parent.
$token_parents[] = $token_type;
}
elseif (in_array($token, array_slice($token_parents, 1))) {
// Prevent duplicate recursive tokens. For example, this will prevent
// the tree from generating the following tokens or deeper:
// [comment:parent:parent]
// [comment:parent:root:parent]
continue;
}
elseif (!empty($token_info['restricted']) && !$options['restricted']) {
// Do not include restricted tokens if the restricted option is FALSE.
continue;
}
$token_parents[] = $token;
if (!empty($token_info['dynamic'])) {
$token_parents[] = '?';
}
$raw_token = '[' . implode(':', $token_parents) . ']';
$tree[$raw_token] = $token_info;
$tree[$raw_token]['raw token'] = $raw_token;
// Add the token's real name (leave out the base token type).
$tree[$raw_token]['token'] = implode(':', array_slice($token_parents, 1));
// Add the token's parent as its raw token value.
if (!empty($options['parents'])) {
$tree[$raw_token]['parent'] = '[' . implode(':', $options['parents']) . ']';
}
// Inherit the parent token's restricted access flag.
if ($parent_restricted) {
$tree[$raw_token]['restricted'] = TRUE;
}
// Fetch the child tokens.
if (!empty($token_info['type'])) {
$child_options = $options;
$child_options['depth']--;
$child_options['parents'] = $token_parents;
$child_parent_restricted = $parent_restricted || !empty($tree[$raw_token]['restricted']) || !empty($token_info['restricted']);
$tree[$raw_token]['children'] = _token_build_tree($token_info['type'], $child_options, $child_parent_restricted);
}
}
return $tree;
}