entity_hierarchy-8.x-2.24/modules/entity_hierarchy_microsite/src/Controller/AddMenuOverride.php
modules/entity_hierarchy_microsite/src/Controller/AddMenuOverride.php
<?php namespace Drupal\entity_hierarchy_microsite\Controller; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; use Drupal\Core\Entity\EntityFormBuilderInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Menu\MenuLinkManagerInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Defines a class for a controller for adding a menu overrride. */ class AddMenuOverride implements ContainerInjectionInterface { /** * Form builder. * * @var \Drupal\Core\Entity\EntityFormBuilderInterface */ private $entityFormBuilder; /** * Menu link manager. * * @var \Drupal\Core\Menu\MenuLinkManagerInterface */ private $menuLinkManager; /** * Entity type manager. * * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ private $entityTypeManager; /** * Constructs a new AddMenuOverride. * * @param \Drupal\Core\Entity\EntityFormBuilderInterface $entityFormBuilder * Entity form builder. * @param \Drupal\Core\Menu\MenuLinkManagerInterface $menuLinkManager * Menu link manager. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager * Entity type manager. */ final public function __construct(EntityFormBuilderInterface $entityFormBuilder, MenuLinkManagerInterface $menuLinkManager, EntityTypeManagerInterface $entityTypeManager) { $this->entityFormBuilder = $entityFormBuilder; $this->menuLinkManager = $menuLinkManager; $this->entityTypeManager = $entityTypeManager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('entity.form_builder'), $container->get('plugin.manager.menu.link'), $container->get('entity_type.manager') ); } /** * Route callback for adding a new override. * * @param string $target * Target UUID. * * @return array * Form. */ public function addMenuOverride(string $target) { $plugin_id = 'entity_hierarchy_microsite:' . $target; if (!$this->menuLinkManager->hasDefinition($plugin_id)) { throw new NotFoundHttpException(); } $storage = $this->entityTypeManager->getStorage('eh_microsite_menu_override'); if ($storage->loadByProperties([ 'target' => $target, ])) { throw new NotFoundHttpException(); } /** @var \Drupal\entity_hierarchy_microsite\Plugin\Menu\MicrositeMenuItem $instance */ $instance = $this->menuLinkManager->createInstance($plugin_id); $override = $storage->create([ 'target' => $target, 'enabled' => $instance->isEnabled(), 'weight' => $instance->getWeight(), 'title' => $instance->getTitle(), 'parent' => $instance->getParent(), ]); return $this->entityFormBuilder->getForm($override); } /** * Title callback for adding a new override. * * @param string $target * Target UUID. * * @return string * Title. */ public function title(string $target) { $plugin_id = 'entity_hierarchy_microsite:' . $target; if (!$this->menuLinkManager->hasDefinition($plugin_id)) { return ''; } /** @var \Drupal\entity_hierarchy_microsite\Plugin\Menu\MicrositeMenuItem $instance */ $instance = $this->menuLinkManager->createInstance($plugin_id); return new TranslatableMarkup('Add an override for @label', [ '@label' => $instance->getTitle(), ]); } }