Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
15.79% |
3 / 19 |
|
33.33% |
1 / 3 |
CRAP | |
0.00% |
0 / 1 |
DisplayBuilderSubscriber | |
15.79% |
3 / 19 |
|
33.33% |
1 / 3 |
27.50 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getSubscribedEvents | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
1 | |||
onSave | |
0.00% |
0 / 15 |
|
0.00% |
0 / 1 |
20 |
1 | <?php |
2 | |
3 | declare(strict_types=1); |
4 | |
5 | namespace Drupal\display_builder_views\EventSubscriber; |
6 | |
7 | use Drupal\Core\Entity\EntityTypeManagerInterface; |
8 | use Drupal\display_builder\Event\DisplayBuilderEvent; |
9 | use Drupal\display_builder\Event\DisplayBuilderEvents; |
10 | use Drupal\display_builder_views\Plugin\views\display_extender\DisplayExtender; |
11 | use Symfony\Component\EventDispatcher\EventSubscriberInterface; |
12 | |
13 | /** |
14 | * The event subscriber for display builder views. |
15 | */ |
16 | class 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 | } |