1 menu.tokens.inc | menu_tokens($type, $tokens, array $data = array(), array $options = array()) |
Implements hook_tokens() on behalf of menu.module.
File
- core/
modules/ menu/ menu.tokens.inc, line 65 - Builds placeholder replacement tokens for menu-related data.
Code
function menu_tokens($type, $tokens, array $data = array(), array $options = array()) {
$replacements = array();
$url_options = array('absolute' => TRUE);
$sanitize = !empty($options['sanitize']);
// Node tokens.
if ($type == 'node' && !empty($data['node'])) {
$node = $data['node'];
foreach ($tokens as $name => $original) {
switch ($name) {
case 'menu-link':
if ($link = _menu_token_node_link_load($node)) {
$replacements[$original] = $sanitize ? check_plain($link['title']) : $link['title'];
}
break;
}
// Chained token relationships.
if ($menu_tokens = token_find_with_prefix($tokens, 'menu-link')) {
if ($link = _menu_token_node_link_load($node)) {
$replacements += token_generate('menu-link', $menu_tokens, array('menu-link' => $link), $options);
}
}
}
}
// Menu link tokens.
elseif ($type == 'menu-link' && !empty($data['menu-link'])) {
$link = (array) $data['menu-link'];
// Set options for menu link tokens.
$url_options = array('absolute' => TRUE);
$sanitize = !empty($options['sanitize']);
if (!isset($link['title'])) {
// Re-load the link if it was not loaded via _menu_token_link_load().
$link = _menu_token_link_load($link['mlid']);
}
foreach ($tokens as $name => $original) {
switch ($name) {
case 'mlid':
$replacements[$original] = $link['mlid'];
break;
case 'title':
$replacements[$original] = $sanitize ? check_plain($link['title']) : $link['title'];
break;
case 'url':
$replacements[$original] = url($link['href'], $url_options);
break;
case 'parent':
if (!empty($link['plid']) && $parent = _menu_token_link_load($link['plid'])) {
$replacements[$original] = $sanitize ? check_plain($parent['title']) : $parent['title'];
}
break;
case 'parents':
if ($parents = _menu_token_link_load_all_parents($link['mlid'])) {
$replacements[$original] = token_render_array($parents, $options);
}
break;
case 'root':
if (!empty($link['p1']) && $link['p1'] != $link['mlid'] && $root = _menu_token_link_load($link['p1'])) {
$replacements[$original] = $sanitize ? check_plain($root['title']) : $root['title'];
}
break;
case 'menu':
if ($menu = menu_load($link['menu_name'])) {
$replacements[$original] = $sanitize ? check_plain($menu['title']) : $menu['title'];
}
break;
case 'edit-url':
$replacements[$original] = url("admin/structure/menu/item/{$link['mlid']}/edit", $url_options);
break;
}
}
// Chained token relationships.
if (!empty($link['plid']) && ($source_tokens = token_find_with_prefix($tokens, 'parent')) && $parent = _menu_token_link_load($link['plid'])) {
$replacements += token_generate('menu-link', $source_tokens, array('menu-link' => $parent), $options);
}
// [menu-link:parents:*] chained tokens.
if ($parents_tokens = token_find_with_prefix($tokens, 'parents')) {
if ($parents = _menu_token_link_load_all_parents($link['mlid'])) {
$replacements += token_generate('array', $parents_tokens, array('array' => $parents), $options);
}
}
if (!empty($link['p1']) && $link['p1'] != $link['mlid'] && ($root_tokens = token_find_with_prefix($tokens, 'root')) && $root = _menu_token_link_load($link['p1'])) {
$replacements += token_generate('menu-link', $root_tokens, array('menu-link' => $root), $options);
}
if ($url_tokens = token_find_with_prefix($tokens, 'url')) {
$replacements += token_generate('url', $url_tokens, array('path' => $link['href']), $options);
}
// Chained token relationships.
if (($menu_tokens = token_find_with_prefix($tokens, 'menu')) && $menu = menu_load($link['menu_name'])) {
$replacements += token_generate('menu', $menu_tokens, array('menu' => $menu), $options);
}
}
// Menu tokens.
elseif ($type == 'menu' && !empty($data['menu'])) {
$menu = (array) $data['menu'];
foreach ($tokens as $name => $original) {
switch ($name) {
case 'name':
$replacements[$original] = $sanitize ? check_plain($menu['title']) : $menu['title'];
break;
case 'machine-name':
// This is a machine name so does not ever need to be sanitized.
$replacements[$original] = $menu['menu_name'];
break;
case 'description':
$replacements[$original] = $sanitize ? filter_xss($menu['description']) : $menu['description'];
break;
case 'menu-link-count':
$query = db_select('menu_links');
$query->condition('menu_name', $menu['menu_name']);
$query->addTag('menu_menu_link_count');
$count = $query->countQuery()->execute()->fetchField();
$replacements[$original] = (int) $count;
break;
case 'edit-url':
$replacements[$original] = url("admin/structure/menu/manage/" . $menu['menu_name'], $url_options);
break;
}
}
}
return $replacements;
}