You are here

protected function MenuItemExtrasViewModesSettingsForm::buildOverviewTreeForm in Menu Item Extras 8.2

Recursive helper function for buildOverviewForm().

Parameters

\Drupal\Core\Menu\MenuLinkTreeElement[] $tree: The tree retrieved by \Drupal\Core\Menu\MenuLinkTreeInterface::load().

int $delta: The default number of menu items used in the menu weight selector is 50.

Return value

array The overview tree form.

1 call to MenuItemExtrasViewModesSettingsForm::buildOverviewTreeForm()
MenuItemExtrasViewModesSettingsForm::buildOverviewForm in src/MenuItemExtrasViewModesSettingsForm.php
Form constructor to edit an entire menu tree at once.

File

src/MenuItemExtrasViewModesSettingsForm.php, line 229

Class

MenuItemExtrasViewModesSettingsForm
Base form for menu view modes settings edit forms.

Namespace

Drupal\menu_item_extras

Code

protected function buildOverviewTreeForm(array $tree, $delta) {
  $form =& $this->overviewTreeForm;
  $tree_access_cacheability = new CacheableMetadata();
  foreach ($tree as $element) {
    $tree_access_cacheability = $tree_access_cacheability
      ->merge(CacheableMetadata::createFromObject($element->access));

    // Only render accessible links.
    if (!$element->access
      ->isAllowed()) {
      continue;
    }

    /** @var \Drupal\Core\Menu\MenuLinkInterface $link */
    $link = $element->link;
    $metadata = $link
      ->getMetaData();
    if ($link && !empty($metadata['entity_id'])) {
      $entity_id = $metadata['entity_id'];
      $form[$entity_id]['#item'] = $element;
      $form[$entity_id]['#attributes'] = $link
        ->isEnabled() ? [
        'class' => [
          'menu-enabled',
        ],
      ] : [
        'class' => [
          'menu-disabled',
        ],
      ];
      $form[$entity_id]['title'] = Link::fromTextAndUrl($link
        ->getTitle(), $link
        ->getUrlObject())
        ->toRenderable();
      $form[$entity_id]['entity_id'] = [
        '#type' => 'hidden',
        '#value' => $entity_id,
      ];
      $form[$entity_id]['parent'] = [
        '#type' => 'hidden',
        '#default_value' => $link
          ->getParent(),
      ];
      $options = $this->entityDisplayRepository
        ->getViewModeOptionsByBundle('menu_link_content', $this->entity
        ->id());
      if (empty($options)) {
        $options['default'] = $this
          ->t('Default');
      }
      $form[$entity_id]['view_mode'] = [
        '#type' => 'select',
        '#options' => $options,
        '#default_value' => $this->menuLinkTreeHandler
          ->getMenuLinkItemViewMode($link),
      ];
    }
    if ($element->subtree) {
      $this
        ->buildOverviewTreeForm($element->subtree, $delta);
    }
  }
  $tree_access_cacheability
    ->merge(CacheableMetadata::createFromRenderArray($form))
    ->applyTo($form);
  return $form;
}