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