Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
15.79% covered (danger)
15.79%
3 / 19
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
DisplayBuilderSubscriber
15.79% covered (danger)
15.79%
3 / 19
33.33% covered (danger)
33.33%
1 / 3
27.50
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getSubscribedEvents
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 onSave
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\display_builder_views\EventSubscriber;
6
7use Drupal\Core\Entity\EntityTypeManagerInterface;
8use Drupal\display_builder\Event\DisplayBuilderEvent;
9use Drupal\display_builder\Event\DisplayBuilderEvents;
10use Drupal\display_builder_views\Plugin\views\display_extender\DisplayExtender;
11use Symfony\Component\EventDispatcher\EventSubscriberInterface;
12
13/**
14 * The event subscriber for display builder views.
15 */
16class DisplayBuilderSubscriber implements EventSubscriberInterface {
17
18  public function __construct(
19    private EntityTypeManagerInterface $entityTypeManager,
20  ) {}
21
22  /**
23   * {@inheritdoc}
24   */
25  public static function getSubscribedEvents(): array {
26    return [
27      DisplayBuilderEvents::ON_SAVE => 'onSave',
28    ];
29  }
30
31  /**
32   * Event handler for when a display builder is saved.
33   *
34   * @param \Drupal\display_builder\Event\DisplayBuilderEvent $event
35   *   The event object.
36   */
37  public function onSave(DisplayBuilderEvent $event): void {
38    $builder_id = $event->getBuilderId();
39    $contexts = $event->getData();
40    /** @var \Drupal\display_builder\InstanceInterface $instance */
41    $instance = $this->entityTypeManager->getStorage('display_builder_instance')->load($builder_id);
42
43    if (!$instance->hasSaveContextsRequirement(DisplayExtender::getContextRequirement(), $contexts)) {
44      return;
45    }
46
47    /** @var \Drupal\views\Entity\View $view */
48    $view = $contexts['ui_patterns_views:view_entity']->getContextValue() ?? NULL;
49
50    if (!$view) {
51      return;
52    }
53    $display_id = DisplayExtender::checkInstanceId($builder_id)['display'];
54    $view->getExecutable()->setDisplay($display_id);
55    $extenders = $view->getExecutable()->getDisplay()->getExtenders();
56
57    if (!isset($extenders['display_builder'])) {
58      return;
59    }
60    /** @var \Drupal\display_builder\DisplayBuildableInterface $extender */
61    $extender = $extenders['display_builder'];
62    $extender->saveSources();
63  }
64
65}