You are here

function menu_reference_get_menu_hierarchy in Menu Reference 7

Return list of all menu links as options list for field widget.

Parameters

$menu_name: Machine-readable menu name to load links for.

Return value

array Array of menu items.

2 calls to menu_reference_get_menu_hierarchy()
menu_references_filter_handler::get_value_options in views/handlers/menu_references_filter_handler.inc
Child classes should be used to override this function and set the 'value options', unless 'options callback' is defined as a valid function or static public method to generate these values.
menu_reference_field_widget_form in ./menu_reference.module
Implements hook_field_widget_form().

File

./menu_reference.module, line 223
Primarily Drupal hooks and global API functions for module Menu Reference.

Code

function menu_reference_get_menu_hierarchy($menu_name, $languages = array(), $items = array(), $level = 0) {
  if (empty($items)) {
    $args = array(
      ':menu' => $menu_name,
    );
    $query = "SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.delivery_callback, m.title, m.title_callback, m.title_arguments, m.type, m.description, ml.*\n    FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path\n    WHERE ml.menu_name = :menu";
    if (!empty($languages)) {
      $query .= " AND ml.language IN (:languages)";
      $args[':languages'] = $languages;
    }
    $query .= " ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ASC";
    $result = db_query($query, $args, array(
      'fetch' => PDO::FETCH_ASSOC,
    ));
    $links = array();
    foreach ($result as $item) {
      $links[] = $item;
    }
    $items = menu_tree_data($links);
  }
  $language_list = language_list();
  $options = array();
  foreach ($items as $item) {
    $level_prefix = $level > 0 ? str_repeat('--', $level) . ' ' : '';
    $text = $level_prefix . $item['link']['link_title'];
    if (empty($languages) && isset($item['link']['language']) && $item['link']['language'] != LANGUAGE_NONE) {
      $text .= ' (' . $language_list[$item['link']['language']]->native . ')';
    }
    $options[$item['link']['mlid']] = $text;
    if (!empty($item['below'])) {
      $options += menu_reference_get_menu_hierarchy($menu_name, $languages, $item['below'], $level + 1);
    }
  }
  return $options;
}