entity_generic-8.x-3.x-dev/src/Routing/GenericRouteProvider.php

src/Routing/GenericRouteProvider.php
<?php

namespace Drupal\entity_generic\Routing;

use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\entity\Routing\AdminHtmlRouteProvider;
use Symfony\Component\Routing\Route;

/**
 * Defines dynamic routes.
 */
class GenericRouteProvider extends AdminHtmlRouteProvider {

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

    $entity_type_id = $entity_type->id();
    $entity_bundle_id = $entity_type->getBundleEntityType();
    $entity_bundle = $entity_bundle_id ? \Drupal::service('entity_type.manager')->getDefinition($entity_bundle_id) : FALSE;

    $entity_bundle_links = $entity_bundle ? $entity_bundle->get('links') : [];
    $entity_type_links = $entity_type ? $entity_type->get('links') : [];
    $entity_type_callbacks = $entity_type && $entity_type->get('entity_generic') && isset($entity_type->get('entity_generic')['callbacks']) ? $entity_type->get('entity_generic')['callbacks'] : [];

    // Handle entities with bundles.
    if ($entity_bundle) {

      // Add entity with modal form.
      if (
        isset($entity_type_links['collection'])
        && isset($entity_type_callbacks['entity.' . $entity_type_id . '.add_entity_modal_title'])
        && isset($entity_type_callbacks['entity.' . $entity_type_id . '.add_entity_modal'])
      ) {
        $route = (new Route($entity_type_links['collection'] . '/add-modal/' . '{' . $entity_bundle_id . '}'))
          ->addDefaults([
            '_controller' => $entity_type_callbacks['entity.' . $entity_type_id . '.add_entity_modal'],
            '_title_callback' => $entity_type_callbacks['entity.' . $entity_type_id . '.add_entity_modal_title'],
          ])
          ->setOption('_admin_route', TRUE)
          ->setOption('operation', 'add')
          ->setOption('parameters',  array(
            $entity_bundle_id => array(
              'type' => 'entity:' . $entity_bundle_id,
              'with_config_overrides' => TRUE,
            ),
          ))
          ->setRequirement('_entity_create_access', $entity_type_id . ':{' . $entity_bundle_id . '}');
        $collection->add('entity.' . $entity_type_id . '.add_modal_form', $route);
      }

    }
    // Handle entities without bundles.
    else {

      // Add entity with modal form.
      if (isset($entity_type_links['add-modal-form'])) {
        $route = (new Route($entity_type_links['add-modal-form']))
          ->addDefaults([
            '_controller' => $entity_type_callbacks['entity.' . $entity_type_id . '.add_entity_modal'],
            '_title' => 'Add ' . $entity_type->getSingularLabel(),
          ])
          ->setRequirement('_permission', 'create ' . $entity_type_id)
          ->setOption('_admin_route', TRUE);
        $collection->add('entity.' . $entity_type_id . '.add_modal_form', $route);
      }

    }

    // Edit entity with modal form.
    if (
      isset($entity_type_links['edit-modal-form'])
      && isset($entity_type_callbacks['entity.' . $entity_type_id . '.edit_entity_modal'])
    ) {
      $route = (new Route($entity_type_links['edit-modal-form']))
        ->addDefaults([
          '_controller' => $entity_type_callbacks['entity.' . $entity_type_id . '.edit_entity_modal'],
          '_title' => 'Edit ' . $entity_type->getSingularLabel(),
        ])
        ->setRequirement($entity_type_id, '\d+')
        ->setRequirement('_entity_access', $entity_type_id . '.update');
      $collection->add('entity.' . $entity_type_id . '.edit_modal_form', $route);
    }

    // Delete entity with modal form.
    if (
      isset($entity_type_links['delete-modal-form'])
      && isset($entity_type_callbacks['entity.' . $entity_type_id . '.delete_entity_modal'])
    ) {
      $route = (new Route($entity_type_links['delete-modal-form']))
        ->addDefaults([
          '_controller' => $entity_type_callbacks['entity.' . $entity_type_id . '.delete_entity_modal'],
          '_title' => 'Delete ' . $entity_type->getSingularLabel(),
        ])
        ->setRequirement($entity_type_id, '\d+')
        ->setRequirement('_entity_access', $entity_type_id . '.delete');
      $collection->add('entity.' . $entity_type_id . '.delete_modal_form', $route);
    }

    // Toggle status.
    if (
      isset($entity_type_links['toggle-status-form'])
      && $entity_type_callbacks['entity.' . $entity_type_id . '.toggle_status']
    ) {
      $route = (new Route($entity_type_links['status-toggle']))
        ->addDefaults([
          '_controller' => $entity_type_callbacks['entity.' . $entity_type_id . '.status_toggle'],
          '_title' => 'Toggle status for ' . $entity_type->getSingularLabel(),
        ])
        ->setRequirement($entity_type_id, '\d+')
        ->setRequirement('_entity_access', $entity_type_id . '.update');
      $collection->add('entity.' . $entity_type_id . '.status_toggle', $route);
    }

    // Toggle status with AJAX.
    if (
      isset($entity_type_links['toggle-status-modal-form'])
      && $entity_type_callbacks['entity.' . $entity_type_id . '.toggle_status_modal']
    ) {
      $route = (new Route($entity_type_links['toggle-status-modal-form']))
        ->addDefaults([
          '_controller' => $entity_type_callbacks['entity.' . $entity_type_id . '.toggle_status_modal'],
          '_title' => 'Toggle status for ' . $entity_type->getSingularLabel(),
        ])
        ->setRequirement($entity_type_id, '\d+')
        ->setRequirement('_entity_access', $entity_type_id . '.update');
      $collection->add('entity.' . $entity_type_id . '.status_toggle_modal', $route);
    }

    if ($merge_multiple_route = $this->getMergeMultipleFormRoute($entity_type)) {
      $collection->add('entity.' . $entity_type->id() . '.merge_multiple_form', $merge_multiple_route);
    }

    return $collection;
  }

  /**
   * Returns the merge multiple form route.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
   *   The entity type.
   *
   * @return \Symfony\Component\Routing\Route|null
   *   The generated route, if available.
   */
  protected function getMergeMultipleFormRoute(EntityTypeInterface $entity_type) {
    if ($entity_type->hasLinkTemplate('merge-multiple-form') && $entity_type->hasHandlerClass('form', 'merge-multiple-confirm')) {
      $route = new Route($entity_type->getLinkTemplate('merge-multiple-form'));
      $route->setDefault('_form', $entity_type->getFormClass('merge-multiple-confirm'));
      $route->setDefault('entity_type_id', $entity_type->id());
      $route->setRequirement('_entity_generic_merge_multiple_access', $entity_type->id());
      return $route;
    }
  }

}

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

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