You are here

function menu_admin_per_menu_form_alter in Menu Admin per Menu 6

Same name and namespace in other branches
  1. 7 menu_admin_per_menu.module \menu_admin_per_menu_form_alter()

Implementation of hook_form_alter()

File

./menu_admin_per_menu.module, line 93
menu_admin_per_menu.module Main file for the menu_admin_per_menu module.

Code

function menu_admin_per_menu_form_alter(&$form, $form_state, $form_id) {
  if (isset($form['menu']['parent']) && !user_access('administer menu')) {
    if ($form_id == 'menu_edit_item' && isset($form['menu']['#access']) && !$form['menu']['#access']) {
      return;
    }
    $form['menu']['#access'] = FALSE;
    $perm_menus = array();
    $menus = menu_get_menus();
    foreach ($menus as $name => $title) {
      if (user_access('administer ' . $name . ' menu items')) {
        $perm_menus[] = $name;
      }
    }
    if (count($perm_menus) > 0 && is_array($form['menu']['parent']['#options'])) {
      $has_mlid = !empty($form['menu']['mlid']['#value']);
      $default_value = $form['menu']['parent']['#default_value'];
      $option_keys = array_keys($form['menu']['parent']['#options']);
      foreach ($option_keys as $option_key) {
        list($menu, $item) = explode(':', $option_key);
        if (!in_array($menu, $perm_menus)) {
          unset($form['menu']['parent']['#options'][$option_key]);
          if ($has_mlid && $option_key == $default_value) {
            return;
          }
        }
      }
      $option_keys = array_keys($form['menu']['parent']['#options']);
      if (count($option_keys) > 0) {
        $form['menu']['#access'] = TRUE;
        if (!$has_mlid && !in_array($default_value, $option_keys)) {
          $form['menu']['parent']['#default_value'] = $option_keys[0];
        }
      }
    }
  }
}