You are here

function menu_admin_per_menu_form_node_form_alter in Menu Admin per Menu 8

Implements hook_form_ID_alter() for 'node_form'.

File

./menu_admin_per_menu.module, line 61
Module file for menu_admin_per_menu.

Code

function menu_admin_per_menu_form_node_form_alter(&$form, FormStateInterface $form_state) {
  $account = \Drupal::currentUser();
  if (!$account
    ->hasPermission('administer menu')) {

    /** @var \Drupal\menu_admin_per_menu\MenuAdminPerMenuAccessInterface $allowedMenusService */
    $allowedMenusService = \Drupal::service('menu_admin_per_menu.allowed_menus');
    $allowed_menus = $allowedMenusService
      ->getPerMenuPermissions($account);
    $default_value =& $form['menu']['link']['menu_parent']['#default_value'];
    list($current_menu) = explode(':', $default_value, 2);

    // Disallow editing the menu item if there is a pre-existing menu item
    // belonging to a menu the user does not have permission to access.
    if (!empty($current_menu) && !in_array($current_menu, $allowed_menus)) {
      $form['menu']['#access'] = FALSE;
      return;
    }
    $options =& $form['menu']['link']['menu_parent']['#options'];
    $options = menu_admin_per_menu_filter_parent_options($account, $options ? $options : []);
    $form['menu']['#access'] = count($options) > 0;
  }
}