function i18n_book_navigation_tokens in Book translation 7.2
Implements hook_tokens().
Port of book_tokens() and part of token_tokens() from the token module. Will translate all the book tokens, and correctly implement the parents-join tokens (menu-link tokens).
See also
File
- ./
i18n_book_navigation.module, line 806 - Defines the Book translation module.
Code
function i18n_book_navigation_tokens($type, $tokens, $data = array(), $options = array()) {
$replacements = array();
$sanitize = !empty($options['sanitize']);
if (isset($options['language'])) {
$lan = $options['language']->language;
}
else {
$lan = NULL;
}
// Node tokens.
if ($type == 'node' && !empty($data['node'])) {
$node = i18n_book_navigation_get_original_node($data['node']);
if (!empty($node->book['mlid'])) {
$link = i18n_book_navigation_link_load($node->book['mlid'], $lan);
foreach ($tokens as $name => $original) {
switch ($name) {
case 'i18n-book':
if ($node->nid == $node->book['bid']) {
$title = $link['title'];
}
else {
$book = node_load($node->book['bid']);
$root_link = i18n_book_navigation_link_load($book->book['mlid'], $lan);
$title = $root_link['title'];
}
$replacements[$original] = $sanitize ? check_plain($title) : $title;
break;
}
}
// Chained token relationships.
if ($book_tokens = token_find_with_prefix($tokens, 'i18n-book')) {
$replacements += token_generate('i18n-book-menu-link', $book_tokens, array(
'menu-link' => $link,
), $options);
}
}
}
elseif ($type == 'i18n-book-menu-link' && !empty($data['menu-link'])) {
$url_options = array(
'absolute' => TRUE,
);
if (isset($options['language'])) {
$url_options['language'] = $options['language'];
}
$link = $data['menu-link'];
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 = i18n_book_navigation_link_load($link['plid'], $lan))) {
$replacements[$original] = $sanitize ? check_plain($parent['title']) : $parent['title'];
}
break;
case 'parents':
if ($parents = i18n_book_navigation_link_load_all_parents($link['mlid'], $lan)) {
$replacements[$original] = token_render_array($parents, $options);
}
break;
case 'root':
if (!empty($link['p1']) && $link['p1'] != $link['mlid'] && ($root = i18n_book_navigation_link_load($link['p1'], $lan))) {
$replacements[$original] = $sanitize ? check_plain($root['title']) : $root['title'];
}
break;
}
}
// Chained token relationships.
if (!empty($link['plid']) && ($source_tokens = token_find_with_prefix($tokens, 'parent')) && ($parent = i18n_book_navigation_link_load($link['plid'], $lan))) {
$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 = i18n_book_navigation_link_load_all_parents($link['mlid'], $lan)) {
$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 = i18n_book_navigation_link_load($link['p1'], $lan))) {
$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);
}
}
return $replacements;
}