You are here

menu_language.module in Menu per language - i18n menu overview 7

menu language module file displays menus per language

File

menu_language.module
View source
<?php

/**
 * @file
 * menu language module file
 * displays menus per language
 */

/**
 * Implements hook_init()
 * adds my css file
 */
function menu_language_init() {
  drupal_add_css(drupal_get_path('module', 'menu_language') . '/css/menu_language.css', array(
    'group' => CSS_DEFAULT,
  ));
}

/**
 * @return array
 * Implements hook_menu()
 */
function menu_language_menu() {
  $menus = _menu_language_get_enabled_menus();
  $enabled_menu_languages = _menu_language_get_enabled_languages();
  foreach ($enabled_menu_languages as $index => $enabled_mnu_language) {
    foreach ($menus as $menu) {
      $items['admin/structure/' . $menu . $enabled_mnu_language] = array(
        'title' => ucfirst($menu) . ' : ' . $enabled_mnu_language,
        'description' => 'This is the ' . $menu . ' edit page for language : ' . $enabled_mnu_language,
        'page callback' => 'drupal_get_form',
        'page arguments' => array(
          'menu_language_menulanguage_form',
          $menu,
          $enabled_mnu_language,
        ),
        'access callback' => TRUE,
        'file' => 'menu_language_form.inc',
        'access arguments' => array(
          'administer menu',
        ),
        'type' => MENU_NORMAL_ITEM,
      );
    }
  }

  /**
   * ADMIN SECTION
   */
  $items['admin/config/menu_language'] = array(
    'title' => 'Menu language',
    'description' => 'Configure the menu per language module.',
    'position' => 'left',
    'weight' => -20,
    'page callback' => 'system_admin_menu_block_page',
    'access arguments' => array(
      'access administration pages',
    ),
    'file' => 'system.admin.inc',
    'file path' => drupal_get_path('module', 'system'),
  );
  $items['admin/config/menu_language/config'] = array(
    'title' => 'Menu language configuration',
    'description' => 'Configure menu per language module.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'menu_language_settings',
    ),
    'access arguments' => array(
      'administer site configuration',
    ),
    'file' => 'menu_language.admin.inc',
  );
  return $items;
}

/**
 * Implements hook_theme().
 */
function menu_language_theme() {
  return array(
    'menu_language_menulanguage_form' => array(
      'render element' => 'form',
      'file' => 'menu_language_form.inc',
    ),
    'menu_language_page' => array(
      'variables' => array(
        'menu' => NULL,
        'table' => NULL,
        'remaining_form_elements' => NULL,
      ),
      'template' => 'theme/menu_language_page',
    ),
  );
}

/**
 * @return array
 * gets all enabled languages for the site
 */
function _menu_language_get_enabled_languages() {
  $languages = language_list();
  foreach ($languages as $lang) {
    if ($lang->enabled == 1) {
      $enabled_languages[] = $lang->language;
    }
  }
  return $enabled_languages;
}

/**
 * @param $enabled_language
 * @param string $which_menu
 *
 * GETS THE GIVEN MENU FOR THE GIVE LANGUAGE
 * using the Q builder:-)
 * DEFAULTS  * menu = main-menu
 */
function menu_language_get_menu_links_by_language($enabled_language, $which_menu = "main-menu") {
  $query = db_select('menu_links', 'ml');

  /**
   * FIELDS
   */
  $query
    ->fields('m', array(
    'load_functions',
    'to_arg_functions',
    'access_callback',
    'access_arguments',
    'page_callback',
    'page_arguments',
    'delivery_callback',
    'title',
    'title_callback',
    'title_arguments',
    'type',
    'description',
  ));
  $query
    ->fields('ml');

  /**
   * CONDITIONS
   */
  $query
    ->condition('ml.language', $enabled_language, '=');
  $query
    ->condition('ml.menu_name', $which_menu, '=');

  /**
   * JOINS
   */
  $query
    ->leftJoin('menu_router', 'm', 'm.path = ml.router_path');

  /**
   * ORDERING
   */
  $query
    ->orderBy('p1', 'ASC');
  $query
    ->orderBy('p2', 'ASC');
  $query
    ->orderBy('p3', 'ASC');
  $query
    ->orderBy('p4', 'ASC');
  $query
    ->orderBy('p5', 'ASC');
  $query
    ->orderBy('p6', 'ASC');
  $query
    ->orderBy('p7', 'ASC');
  $query
    ->orderBy('p8', 'ASC');
  $query
    ->orderBy('p9', 'ASC');

  /**
   * EXECUTE IT
   */
  return $query
    ->execute();
}

/**
 * @return array
 * Gets all the enabled menus
 */
function _menu_language_get_enabled_menus() {
  $menus = menu_get_names();
  foreach ($menus as $menu) {
    $is_enabled_menu = variable_get('menu_language_mng_' . $menu, FALSE);
    if ($is_enabled_menu) {
      $menu_language_enabled_menus[] = $menu;
    }
  }
  return $menu_language_enabled_menus;
}