Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
92.00% covered (success)
92.00%
23 / 25
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProfileRouteProvider
92.00% covered (success)
92.00%
23 / 25
50.00% covered (danger)
50.00%
1 / 2
7.03
0.00% covered (danger)
0.00%
0 / 1
 getRoutes
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 getEditPluginFormRoute
90.00% covered (success)
90.00%
18 / 20
0.00% covered (danger)
0.00%
0 / 1
5.03
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\display_builder\Routing;
6
7use Drupal\Core\Entity\EntityTypeInterface;
8use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
9use Symfony\Component\Routing\Route;
10
11/**
12 * Provides routes for display builder entities.
13 */
14class ProfileRouteProvider extends AdminHtmlRouteProvider {
15
16  /**
17   * {@inheritdoc}
18   */
19  public function getRoutes(EntityTypeInterface $entity_type) {
20    $collection = parent::getRoutes($entity_type);
21    $entity_type_id = $entity_type->id();
22
23    if ($add_page_route = $this->getEditPluginFormRoute($entity_type)) {
24      $collection->add("entity.{$entity_type_id}.edit_plugin_form", $add_page_route);
25    }
26
27    return $collection;
28  }
29
30  /**
31   * Gets the edit-plugin-form route.
32   *
33   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
34   *   The entity type.
35   *
36   * @return \Symfony\Component\Routing\Route|null
37   *   The generated route, if available.
38   */
39  protected function getEditPluginFormRoute(EntityTypeInterface $entity_type): ?Route {
40    if ($entity_type->hasLinkTemplate('edit-plugin-form')
41      && \is_string($entity_type->getLinkTemplate('edit-plugin-form'))) {
42      $entity_type_id = $entity_type->id();
43      $route = new Route($entity_type->getLinkTemplate('edit-plugin-form'));
44      // Use the edit form handler, if available, otherwise default.
45      $operation = 'default';
46
47      if ($entity_type->getFormClass('edit-plugin')) {
48        $operation = 'edit-plugin';
49      }
50      $route
51        ->setDefaults([
52          '_entity_form' => "{$entity_type_id}.{$operation}",
53          '_title_callback' => '\Drupal\display_builder\Form\ProfileIslandPluginForm::editFormTitle',
54        ])
55        ->setRequirement('_entity_access', "{$entity_type_id}.update")
56        ->setOption('parameters', [
57          $entity_type_id => ['type' => 'entity:' . $entity_type_id],
58        ]);
59
60      // Entity types with serial IDs can specify this in their route
61      // requirements, improving the matching process.
62      if ($this->getEntityTypeIdKeyType($entity_type) === 'integer') {
63        $route->setRequirement($entity_type_id, '\d+');
64      }
65
66      return $route;
67    }
68
69    return NULL;
70  }
71
72}