You are here

function domain_menus_form_alter in Domain Menus for Domains 3.x

Same name and namespace in other branches
  1. 9.x domain_menus.module \domain_menus_form_alter()
  2. 9.1.x domain_menus.module \domain_menus_form_alter()

Implements hook_form_alter().

File

./domain_menus.module, line 84
Domain menus implementation through entity create, delete, and access customizations.

Code

function domain_menus_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form_id == 'menu_add_form' || $form_id == 'menu_edit_form') {
    if (\Drupal::currentUser()
      ->hasPermission('administer menu')) {
      $menu = $form_state
        ->getFormObject()
        ->getEntity();
      $menu_auto_created = $menu
        ->getThirdPartySetting('domain_menus', 'auto-created', 0);
      if ($menu_auto_created != 1) {
        $options = _domain_menus_domain_options();
        $default_value = $menu
          ->getThirdPartySetting('domain_menus', 'domains', []);
        $form['domain_menus_menu_domains'] = array(
          '#type' => 'checkboxes',
          '#title' => t('Domain(s)'),
          '#description' => t('Select the domain assignment of this menu. Leave empty if menu should not be considered a domain menu.'),
          '#options' => $options,
          '#default_value' => $default_value,
        );
        $form['actions']['submit']['#submit'][] = "_domain_menus_menu_form_submit";
      }
    }
  }

  // Make add menu link use Domain Menus autocomplete selection handler that filters by domain.
  if (!empty(_domain_menus_get_setting('domain_menus_filter_node_autocomplete'))) {
    if ($form_id == 'menu_link_content_menu_link_content_form') {
      $menu_link_content = $form_state
        ->getFormObject()
        ->getEntity();
      $menu_name = $menu_link_content
        ->getMenuName();
      $menu = Menu::load($menu_name);
      if (_domain_menus_is_domain_menu($menu)) {
        $type = $form['link']['widget'][0]['uri']['#type'] ?? null;
        if ($type == 'entity_autocomplete') {
          $domain_id = $menu
            ->getThirdPartySetting('domain_menus', 'domains');

          // Use Drupal\domain_menus\Plugin\EntityReferenceSelection\DomainMenusSelection.
          $form['link']['widget'][0]['uri']['#selection_handler'] = 'domain_menus:node';
          $form['link']['widget'][0]['uri']['#selection_settings']['domain_id'] = $domain_id;
        }
      }
    }
  }
}