Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 19
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 / 19
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
 onPublish
0.00% covered (danger)
0.00%
0 / 15
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\display_builder\DisplayBuildablePluginManager;
8use Drupal\display_builder\Event\DisplayBuilderEvent;
9use Drupal\display_builder\Event\DisplayBuilderEvents;
10use Drupal\display_builder_views\Plugin\display_builder\Buildable\ViewDisplay;
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 DisplayBuildablePluginManager $displayBuildableManager,
20  ) {}
21
22  /**
23   * {@inheritdoc}
24   */
25  public static function getSubscribedEvents(): array {
26    return [
27      DisplayBuilderEvents::ON_PUBLISH => 'onPublish',
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 onPublish(DisplayBuilderEvent $event): void {
38    $contexts = $event->getData();
39    /** @var \Drupal\display_builder\InstanceInterface $instance */
40    $instance = $event->getInstance();
41
42    if (!$instance->hasSaveContextsRequirement(ViewDisplay::getContextRequirement(), $contexts)) {
43      return;
44    }
45
46    /** @var \Drupal\views\Entity\View $view */
47    $view = $contexts['ui_patterns_views:view_entity']->getContextValue() ?? NULL;
48
49    if (!$view) {
50      return;
51    }
52    $display_id = ViewDisplay::checkInstanceId((string) $instance->id())['display'];
53    $view->getExecutable()->setDisplay($display_id);
54    $extenders = $view->getExecutable()->getDisplay()->getExtenders();
55
56    if (!isset($extenders['display_builder'])) {
57      return;
58    }
59    /** @var \Drupal\views\Plugin\views\PluginBase $extender */
60    $extender = $extenders['display_builder'];
61    /** @var \Drupal\display_builder\DisplayBuildableInterface $buildable */
62    $buildable = $this->displayBuildableManager->createInstance('view_display', ['extender' => $extender]);
63    $buildable->saveSources();
64  }
65
66}