Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
50.00% covered (danger)
50.00%
6 / 12
40.00% covered (danger)
40.00%
2 / 5
50.00% covered (danger)
50.00%
2 / 4
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
DisplayBuilderRoutes
50.00% covered (danger)
50.00%
6 / 12
40.00% covered (danger)
40.00%
2 / 5
50.00% covered (danger)
50.00%
2 / 4
66.67% covered (warning)
66.67%
2 / 3
6.00
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getSubscribedEvents
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 onAlterRoutes
25.00% covered (danger)
25.00%
2 / 8
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
3.69
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\display_builder_views\Routing;
6
7use Drupal\Core\Routing\RouteBuildEvent;
8use Drupal\Core\Routing\RoutingEvents;
9use Symfony\Component\DependencyInjection\Attribute\AutowireLocator;
10use Symfony\Component\EventDispatcher\EventSubscriberInterface;
11use Symfony\Contracts\Service\ServiceCollectionInterface;
12
13/**
14 * Provides routes for the Display Builder Views.
15 *
16 * @internal
17 *   Tagged services are internal.
18 */
19final class DisplayBuilderRoutes implements EventSubscriberInterface {
20
21  /**
22   * {@inheritdoc}
23   */
24  public function __construct(
25    #[AutowireLocator('paramconverter')]
26    private ServiceCollectionInterface $converters,
27  ) {}
28
29  /**
30   * {@inheritdoc}
31   */
32  public static function getSubscribedEvents(): array {
33    return [
34      RoutingEvents::ALTER => 'onAlterRoutes',
35    ];
36  }
37
38  /**
39   * Alters existing routes for a specific collection.
40   *
41   * @param \Drupal\Core\Routing\RouteBuildEvent $event
42   *   The route build event.
43   */
44  public function onAlterRoutes(RouteBuildEvent $event): void {
45    // From Drupal 11.3 to Drupal 11.4, converter route parameter has changed.
46    // The value in routing.yml is now the 11.4 one by default.
47    // Restore the 11.3 one if the 11.4 is not available.
48    // @see https://www.drupal.org/project/drupal/issues/3436295
49    // @todo Remove once Drupal 11.3 is not supported.
50    if ($this->converters->has('paramconverter.views_ui')) {
51      return;
52    }
53    /** @var \Symfony\Component\Routing\RouteCollection $collection */
54    $collection = $event->getRouteCollection();
55    $route = $collection->get('display_builder_views.views.manage');
56    $parameters = $route->getOption('parameters');
57    $parameters['view']['converter'] = 'drupal.proxy_original_service.paramconverter.views_ui';
58    $route->setOption('parameters', $parameters);
59    $collection->add('display_builder_views.views.manage', $route);
60  }
61
62}