You are here

function i18n_menu_node_tokens in Menu translation - Node 7

Implementation of hook_tokens().

File

./i18n_menu_node.module, line 583
Menu translation (Node).

Code

function i18n_menu_node_tokens($type, $tokens, $data = array(), $options = array()) {
  $replacements = array();
  if ($type == 'node' && !empty($data['node'])) {
    $node = $data['node'];
    $trail_raw = array();
    $item = FALSE;

    // If there are menu-link-i18n tokens
    if ($parents_tokens = token_find_with_prefix($tokens, 'menu-link-i18n')) {

      // If the current node has no menu item we use the source node one.
      if (empty($node->menu['mlid'])) {
        $tnid = _i18n_menu_node_get_node_tnid($node);
        if (!empty($tnid) && $tnid != $node->nid) {
          $tnode = (object) array(
            'nid' => $tnid,
          );
          menu_node_prepare($tnode);

          // We use the source node menu item only if node translation is enabled.
          $item = !empty($tnode->menu['mlid']) && i18n_menu_node_enabled($tnode->menu) ? $tnode->menu : FALSE;
        }
      }
      else {
        $item = $node->menu;
      }
      while ($item) {
        array_unshift($trail_raw, _i18n_menu_node_get_item_title($item, FALSE, $node->language));
        $item = empty($item['plid']) ? FALSE : menu_link_load($item['plid']);
      }
      $replacements += token_generate('array', $parents_tokens, array(
        'array' => $trail_raw,
      ), $options);
    }
  }
  return $replacements;
}