Namespace
Drupal\devel
File
-
src/DevelLazyBuilders.php
View source
<?php
namespace Drupal\devel;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Config\ImmutableConfig;
use Drupal\Core\Menu\MenuLinkTreeInterface;
use Drupal\Core\Menu\MenuTreeParameters;
use Drupal\Core\Security\TrustedCallbackInterface;
class DevelLazyBuilders implements TrustedCallbackInterface {
protected ImmutableConfig $config;
public function __construct(protected MenuLinkTreeInterface $menuLinkTree, ConfigFactoryInterface $config_factory) {
$this->config = $config_factory->get('devel.toolbar.settings');
}
public static function trustedCallbacks() : array {
return [
'renderMenu',
];
}
public function renderMenu() : array {
$parameters = new MenuTreeParameters();
$parameters->onlyEnabledLinks()
->setTopLevelOnly();
$tree = $this->menuLinkTree
->load('devel', $parameters);
$manipulators = [
[
'callable' => 'menu.default_tree_manipulators:checkAccess',
],
[
'callable' => 'menu.default_tree_manipulators:generateIndexAndSort',
],
[
'callable' => fn(array $tree): array => $this->processTree($tree),
],
];
$tree = $this->menuLinkTree
->transform($tree, $manipulators);
$build = $this->menuLinkTree
->build($tree);
$build['#attributes']['class'] = [
'toolbar-menu',
];
CacheableMetadata::createFromRenderArray($build)->addCacheableDependency($this->config)
->applyTo($build);
return $build;
}
public function processTree(array $tree) : array {
$visible_items = $this->config
->get('toolbar_items') ?: [];
foreach ($tree as $element) {
$plugin_id = $element->link
->getPluginId();
if (!in_array($plugin_id, $visible_items)) {
$element->options['attributes']['class'][] = 'toolbar-horizontal-item-hidden';
}
}
return $tree;
}
}
Classes