You are here

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

book_tokens()

token_tokens()

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;
}