wse-1.0.x-dev/modules/wse_menu/src/WseMenuLinkTree.php

modules/wse_menu/src/WseMenuLinkTree.php
<?php

namespace Drupal\wse_menu;

use Drupal\Core\Cache\Cache;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Menu\MenuLinkTreeInterface;
use Drupal\Core\Menu\MenuTreeParameters;
use Drupal\workspaces\WorkspaceManagerInterface;

/**
 * Implements the loading, transforming and rendering of menu link trees.
 */
class WseMenuLinkTree implements MenuLinkTreeInterface {

  /**
   * Constructs a WseMenuLinkTree object.
   */
  public function __construct(
    protected MenuLinkTreeInterface $inner,
    protected WorkspaceManagerInterface $workspaceManager,
    protected EntityTypeManagerInterface $entityTypeManager,
  ) {}

  /**
   * {@inheritdoc}
   */
  public function getCurrentRouteMenuTreeParameters($menu_name) {
    return $this->inner->getCurrentRouteMenuTreeParameters($menu_name);
  }

  /**
   * {@inheritdoc}
   */
  public function load($menu_name, MenuTreeParameters $parameters) {
    return $this->inner->load($menu_name, $parameters);
  }

  /**
   * {@inheritdoc}
   */
  public function transform(array $tree, array $manipulators) {
    return $this->inner->transform($tree, $manipulators);
  }

  /**
   * {@inheritdoc}
   */
  public function build(array $tree) {
    $build = $this->inner->build($tree);

    if ($this->workspaceManager->hasActiveWorkspace()) {
      // @todo Look into workspace-specific cache tags.
      $workspace_cache_tags = $this->workspaceManager->getActiveWorkspace()->getCacheTags();
      $build['#cache']['tags'] = Cache::mergeTags($build['#cache']['tags'], $workspace_cache_tags);

      // Ensure that menu trees are cached per workspace.
      $build['#cache']['contexts'][] = 'workspace';
    }
    return $build;
  }

  /**
   * {@inheritdoc}
   */
  public function maxDepth() {
    return $this->inner->maxDepth();
  }

  /**
   * {@inheritdoc}
   */
  public function getSubtreeHeight($id) {
    return $this->inner->getSubtreeHeight($id);
  }

  /**
   * {@inheritdoc}
   */
  public function getExpanded($menu_name, array $parents) {
    return $this->inner->getExpanded($menu_name, $parents);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc