group_content_menu-8.x-1.0-rc3/src/Routing/GroupContentMenuRouteProvider.php

src/Routing/GroupContentMenuRouteProvider.php
<?php

declare(strict_types=1);

namespace Drupal\group_content_menu\Routing;

use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\group_content_menu\Entity\GroupContentMenuType;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Routing\Route;

/**
 * Provides routes for group_content_menu content.
 */
class GroupContentMenuRouteProvider extends DefaultHtmlRouteProvider {

  public function __construct(
    $entity_type_manager,
    $entity_field_manager,
    protected ModuleHandlerInterface $moduleHandler,
  ) {
    parent::__construct($entity_type_manager, $entity_field_manager);
  }

  /**
   * {@inheritdoc}
   */
  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
    return new static(
      $container->get('entity_type.manager'),
      $container->get('entity_field.manager'),
      $container->get('module_handler'),
    );
  }

  /**
   * {@inheritdoc}
   */
  public function getRoutes(EntityTypeInterface $entity_type) {
    $collection = parent::getRoutes($entity_type);

    if ($add_menu_link = $this->getAddMenuLink($entity_type)) {
      $collection->add('entity.group_content_menu.add_menu_link', $add_menu_link);
    }
    if ($edit_menu_link = $this->getEditMenuLink($entity_type)) {
      $collection->add('entity.group_content_menu.edit_menu_link', $edit_menu_link);
    }
    if ($translation_menu_overview = $this->getTranslationMenuOverview($entity_type)) {
      $collection->add('entity.group_content_menu.content-translation-overview', $translation_menu_overview);
    }
    if ($delete_menu_link = $this->getDeleteMenuLink($entity_type)) {
      $collection->add('entity.group_content_menu.delete_menu_link', $delete_menu_link);
    }
    if ($translations_menu_link = $this->getTranslationMenuItemLink($entity_type)) {
      $collection->add('entity.group_content_menu.translate_menu_link', $translations_menu_link);
    }
    if ($translations_menu_add_link = $this->getTranslationMenuItemAddLink($entity_type)) {
      $collection->add('entity.group_content_menu.translate_menu_add_link', $translations_menu_add_link);
    }
    if ($translations_menu_edit_link = $this->getTranslationMenuItemEditLink($entity_type)) {
      $collection->add('entity.group_content_menu.translate_menu_edit_link', $translations_menu_edit_link);
    }
    if ($translations_menu_edit_link = $this->getTranslationMenuItemDeleteLink($entity_type)) {
      $collection->add('entity.group_content_menu.translate_menu_delete_link', $translations_menu_edit_link);
    }

    return $collection;
  }

  /**
   * Gets the add-menu-link route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|void
   *   The generated route, if available.
   */
  protected function getAddMenuLink(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('add-menu-link')) {
      $route = new Route($entity_type->getLinkTemplate('add-menu-link'));
      return $route
        ->setDefaults([
          '_title' => 'Add menu link',
          '_controller' => 'Drupal\group_content_menu\Controller\GroupContentMenuController::addLink',
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu menu items')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
        ])
        ->setOption('_group_operation_route', TRUE);
    }
  }

  /**
   * Gets the edit-menu-link route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|void
   *   The generated route, if available.
   */
  protected function getEditMenuLink(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('edit-menu-link')) {
      $route = new Route($entity_type->getLinkTemplate('edit-menu-link'));
      return $route
        ->setDefaults([
          '_title' => 'Edit menu link',
          '_controller' => 'Drupal\group_content_menu\Controller\GroupContentMenuController::editLink',
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu menu items')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
          'menu_link_content' => ['type' => 'entity:menu_link_content'],
        ])
        ->setOption('_group_operation_route', TRUE);
    }
  }

  /**
   * Gets the delete-menu-link route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|void
   *   The generated route, if available.
   */
  protected function getDeleteMenuLink(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('delete-menu-link')) {
      $route = new Route($entity_type->getLinkTemplate('delete-menu-link'));
      return $route
        ->setDefaults([
          '_title' => 'Delete menu link',
          '_controller' => 'Drupal\group_content_menu\Controller\GroupContentMenuController::deleteLink',
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu menu items')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
          'menu_link_content' => ['type' => 'entity:menu_link_content'],
        ])
        ->setOption('_group_operation_route', TRUE);
    }
  }

  /**
   * Gets the content-translation-overview route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|void
   *   The generated route, if available.
   */
  protected function getTranslationMenuOverview(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('content-translation-overview') && $this->moduleHandler->moduleExists('content_translation')) {
      $route = new Route($entity_type->getLinkTemplate('content-translation-overview'));
      return $route
        ->setDefaults([
          '_title' => 'Translation overview',
          '_controller' => '\Drupal\content_translation\Controller\ContentTranslationController::overview',
          'entity_type_id' => $entity_type->id(),
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu menu item translations')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setRequirement('_access', 'TRUE')
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          $entity_type->id() => [
            'type' => 'entity:' . $entity_type->id(),
            'load_latest_revision' => TRUE,
          ],
        ])
        ->setOption('_group_operation_route', TRUE)
        ->setOption('_admin_route', TRUE);
    }
  }

  /**
   * Gets the translate-menu-link route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|void
   *   The generated route, if available.
   */
  protected function getTranslationMenuItemLink(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('translate-menu-link') && $this->moduleHandler->moduleExists('content_translation')) {
      $route = new Route($entity_type->getLinkTemplate('translate-menu-link'));
      return $route
        ->setDefaults([
          '_title' => 'Translation overview',
          '_controller' => 'Drupal\group_content_menu\Controller\GroupContentMenuTranslationController::overview',
          'entity_type_id' => 'menu_link_content',
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu menu item translations')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setRequirement('_access', 'TRUE')
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
          'menu_link_content' => [
            'type' => 'entity:menu_link_content',
            'load_latest_revision' => TRUE,
          ],
        ])
        ->setOption('_group_operation_route', TRUE)
        ->setOption('_admin_route', TRUE);
    }
  }

  /**
   * Gets the translate-menu-add-link route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|void
   *   The generated route, if available.
   */
  protected function getTranslationMenuItemAddLink(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('translate-menu-add-link') && $this->moduleHandler->moduleExists('content_translation')) {
      $route = new Route($entity_type->getLinkTemplate('translate-menu-add-link'));
      return $route
        ->setDefaults([
          '_title' => 'Add translation',
          '_controller' => '\Drupal\content_translation\Controller\ContentTranslationController::add',
          'entity_type_id' => 'menu_link_content',
          'source' => NULL,
          'target' => NULL,
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu menu item translations')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setRequirement('_access', 'TRUE')
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
          'menu_link_content' => [
            'type' => 'entity:menu_link_content',
            'load_latest_revision' => TRUE,
          ],
          'source' => ['type' => 'language'],
          'target' => ['type' => 'language'],
        ])
        ->setOption('_group_operation_route', TRUE)
        ->setOption('_admin_route', TRUE);
    }
  }

  /**
   * Gets the translate-menu-edit-link route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|void
   *   The generated route, if available.
   */
  protected function getTranslationMenuItemEditLink(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('translate-menu-edit-link') && $this->moduleHandler->moduleExists('content_translation')) {
      $route = new Route($entity_type->getLinkTemplate('translate-menu-edit-link'));
      return $route
        ->setDefaults([
          '_title' => 'Edit translation',
          '_controller' => '\Drupal\content_translation\Controller\ContentTranslationController::edit',
          'entity_type_id' => 'menu_link_content',
          'language' => NULL,
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu menu item translations')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
          'menu_link_content' => [
            'type' => 'entity:menu_link_content',
            'load_latest_revision' => TRUE,
          ],
          'language' => ['type' => 'language'],
        ])
        ->setOption('_group_operation_route', TRUE)
        ->setOption('_admin_route', TRUE);
    }
  }

  /**
   * Gets the translate-menu-delete-link route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|void
   *   The generated route, if available.
   */
  protected function getTranslationMenuItemDeleteLink(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('translate-menu-delete-link') && $this->moduleHandler->moduleExists('content_translation')) {
      $route = new Route($entity_type->getLinkTemplate('translate-menu-delete-link'));
      return $route
        ->setDefaults([
          '_title' => 'Delete translation',
          '_entity_form' => 'menu_link_content.content_translation_deletion',
          'entity_type_id' => 'menu_link_content',
          'language' => NULL,
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu menu item translations')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
          'menu_link_content' => [
            'type' => 'entity:menu_link_content',
            'load_latest_revision' => TRUE,
          ],
          'language' => ['type' => 'language'],
        ])
        ->setOption('_group_operation_route', TRUE)
        ->setOption('_admin_route', TRUE);
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function getAddPageRoute(EntityTypeInterface $entity_type) {
    if ($route = parent::getAddPageRoute($entity_type)) {
      $requirements = $route->getRequirements();
      // Remove entity access requirement since we only want group permissions,
      // not some global user permission.
      unset($requirements['_entity_create_any_access']);
      $route->setRequirements($requirements);
      return $route
        ->setDefaults([
          '_title' => 'Add new menu',
          '_controller' => 'Drupal\group_content_menu\Controller\GroupContentMenuController::addPage',
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
          'menu_link_content' => ['type' => 'entity:menu_link_content'],
        ])
        ->setOption('_group_operation_route', TRUE);
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function getAddFormRoute(EntityTypeInterface $entity_type) {
    if ($route = parent::getAddFormRoute($entity_type)) {
      $requirements = $route->getRequirements();
      // Remove entity access requirement since we only want group permissions,
      // not some global user permission.
      unset($requirements['_entity_create_access']);
      $route->setRequirements($requirements);
      return $route
        ->setDefaults([
          '_title' => 'Add new menu',
          '_controller' => 'Drupal\group_content_menu\Controller\GroupContentMenuController::createForm',
        ])
        ->setRequirement('_group_permission', 'manage group_content_menu')
        ->setRequirement('_group_installed_content', implode('+', $this->getPluginIds()))
        ->setOption('_group_operation_route', TRUE);
    }
  }

  /**
   * Gets the collection route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|void
   *   The generated route, if available.
   */
  protected function getCollectionRoute(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('collection') && $entity_type->hasListBuilderClass()) {
      /** @var \Drupal\Core\StringTranslation\TranslatableMarkup $label */
      $label = $entity_type->getCollectionLabel();
      $route = new Route($entity_type->getLinkTemplate('collection'));
      return $route
        ->addDefaults([
          '_entity_list' => $entity_type->id(),
          '_title' => $label->getUntranslatedString(),
          '_title_arguments' => $label->getArguments(),
          '_title_context' => $label->getOption('context'),
        ])
        ->setOption('_group_operation_route', TRUE)
        ->setRequirement('_group_permission', 'access group content menu overview')
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
        ]);
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function getCanonicalRoute(EntityTypeInterface $entity_type) {
    if ($route = parent::getCanonicalRoute($entity_type)) {
      $requirements = $route->getRequirements();
      // Remove entity access requirement since we only want group permissions,
      // not some global user permission.
      unset($requirements['_entity_access']);
      $route->setRequirements($requirements);
      return $route
        ->setRequirement('_group_menu_owns_content', 'TRUE')
        ->setRequirement('_group_permission', 'manage group_content_menu')
        ->setOption('_group_operation_route', TRUE)
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
        ]);
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function getEditFormRoute(EntityTypeInterface $entity_type) {
    if ($route = parent::getEditFormRoute($entity_type)) {
      $requirements = $route->getRequirements();
      // Remove entity access requirement since we only want group permissions,
      // not some global user permission.
      unset($requirements['_entity_access']);
      $route->setRequirements($requirements);
      return $route
        ->setRequirement('_group_menu_owns_content', 'TRUE')
        ->setRequirement('_group_permission', 'manage group_content_menu menu items')
        ->setOption('_group_operation_route', TRUE)
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
        ]);
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function getDeleteFormRoute(EntityTypeInterface $entity_type) {
    if ($route = parent::getDeleteFormRoute($entity_type)) {
      $requirements = $route->getRequirements();
      // Remove entity access requirement since we only want group permissions,
      // not some global user permission.
      unset($requirements['_entity_access']);
      $route->setRequirements($requirements);
      return $route
        ->setRequirement('_group_menu_owns_content', 'TRUE')
        ->setRequirement('_group_permission', 'manage group_content_menu')
        ->setOption('_group_operation_route', TRUE)
        ->setOption('parameters', [
          'group' => ['type' => 'entity:group'],
          'group_content_menu' => ['type' => 'entity:group_content_menu'],
        ]);
    }
  }

  /**
   * Get plugin IDs.
   *
   * @return array
   *   The plugin IDs.
   */
  protected function getPluginIds(): array {
    $plugin_ids = [];
    foreach (array_keys(GroupContentMenuType::loadMultiple()) as $entity_type_id) {
      $plugin_ids[] = "group_content_menu:$entity_type_id";
    }
    return $plugin_ids ?: ['group_content_menu'];
  }

}

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

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