MenuForm::buildOverviewTreeForm

protected MenuForm::buildOverviewTreeForm($tree, $delta)

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.

File

core/modules/menu_ui/src/MenuForm.php, line 338

Class

MenuForm
Base form for menu edit forms.

Namespace

Drupal\menu_ui

Code

protected function buildOverviewTreeForm($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;
    if ($link) {
      $id = 'menu_plugin_id:' . $link->getPluginId();
      $form[$id]['#item'] = $element;
      $form[$id]['#attributes'] = $link->isEnabled() ? array('class' => array('menu-enabled')) : array('class' => array('menu-disabled'));
      $form[$id]['title'] = Link::fromTextAndUrl($link->getTitle(), $link->getUrlObject())->toRenderable();
      if (!$link->isEnabled()) {
        $form[$id]['title']['#suffix'] = ' (' . $this->t('disabled') . ')';
      }
      // @todo Remove this in https://www.drupal.org/node/2568785.
      elseif ($id === 'menu_plugin_id:user.logout') {
        $form[$id]['title']['#suffix'] = ' (' . $this->t('<q>Log in</q> for anonymous users') . ')';
      }
      // @todo Remove this in https://www.drupal.org/node/2568785.
      elseif (($url = $link->getUrlObject()) && $url->isRouted() && $url->getRouteName() == 'user.page') {
        $form[$id]['title']['#suffix'] = ' (' . $this->t('logged in users only') . ')';
      }

      $form[$id]['enabled'] = array(
        '#type' => 'checkbox',
        '#title' => $this->t('Enable @title menu link', array('@title' => $link->getTitle())),
        '#title_display' => 'invisible',
        '#default_value' => $link->isEnabled(),
      );
      $form[$id]['weight'] = array(
        '#type' => 'weight',
        '#delta' => $delta,
        '#default_value' => $link->getWeight(),
        '#title' => $this->t('Weight for @title', array('@title' => $link->getTitle())),
        '#title_display' => 'invisible',
      );
      $form[$id]['id'] = array(
        '#type' => 'hidden',
        '#value' => $link->getPluginId(),
      );
      $form[$id]['parent'] = array(
        '#type' => 'hidden',
        '#default_value' => $link->getParent(),
      );
      // Build a list of operations.
      $operations = array();
      $operations['edit'] = array(
        'title' => $this->t('Edit'),
      );
      // Allow for a custom edit link per plugin.
      $edit_route = $link->getEditRoute();
      if ($edit_route) {
        $operations['edit']['url'] = $edit_route;
        // Bring the user back to the menu overview.
        $operations['edit']['query'] = $this->getDestinationArray();
      }
      else {
        // Fall back to the standard edit link.
        $operations['edit'] += array(
          'url' => Url::fromRoute('menu_ui.link_edit', ['menu_link_plugin' => $link->getPluginId()]),
        );
      }
      // Links can either be reset or deleted, not both.
      if ($link->isResettable()) {
        $operations['reset'] = array(
          'title' => $this->t('Reset'),
          'url' => Url::fromRoute('menu_ui.link_reset', ['menu_link_plugin' => $link->getPluginId()]),
        );
      }
      elseif ($delete_link = $link->getDeleteRoute()) {
        $operations['delete']['url'] = $delete_link;
        $operations['delete']['query'] = $this->getDestinationArray();
        $operations['delete']['title'] = $this->t('Delete');
      }
      if ($link->isTranslatable()) {
        $operations['translate'] = array(
          'title' => $this->t('Translate'),
          'url' => $link->getTranslateRoute(),
        );
      }
      $form[$id]['operations'] = array(
        '#type' => 'operations',
        '#links' => $operations,
      );
    }

    if ($element->subtree) {
      $this->buildOverviewTreeForm($element->subtree, $delta);
    }
  }

  $tree_access_cacheability
  ->merge(CacheableMetadata::createFromRenderArray($form))
    ->applyTo($form);

  return $form;
}
doc_Drupal
2016-10-29 09:26:16
Comments
Leave a Comment

Please login to continue.