Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
DisplayBuilderSubscriber
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 4
90
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 / 15
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
42
 getEntityViewDisplayEntity
0.00% covered (danger)
0.00%
0 / 8
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
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\display_builder_entity_view\EventSubscriber;
6
7use Drupal\Core\Entity\EntityTypeManagerInterface;
8use Drupal\Core\Plugin\Context\ContextInterface;
9use Drupal\display_builder\DisplayBuildableInterface;
10use Drupal\display_builder\Event\DisplayBuilderEvent;
11use Drupal\display_builder\Event\DisplayBuilderEvents;
12use Drupal\display_builder_entity_view\Entity\EntityViewDisplay;
13use Drupal\display_builder_entity_view\Field\DisplayBuilderItemList;
14use Symfony\Component\EventDispatcher\EventSubscriberInterface;
15
16/**
17 * The event subscriber for display builder islands.
18 */
19class DisplayBuilderSubscriber implements EventSubscriberInterface {
20
21  public function __construct(
22    protected EntityTypeManagerInterface $entityTypeManager,
23  ) {}
24
25  /**
26   * {@inheritdoc}
27   */
28  public static function getSubscribedEvents(): array {
29    return [
30      DisplayBuilderEvents::ON_SAVE => 'onSave',
31    ];
32  }
33
34  /**
35   * Event handler for when a display builder is saved.
36   *
37   * @param \Drupal\display_builder\Event\DisplayBuilderEvent $event
38   *   The event object.
39   */
40  public function onSave(DisplayBuilderEvent $event): void {
41    $builder_id = $event->getBuilderId();
42    /** @var \Drupal\display_builder\InstanceInterface $instance */
43    $instance = $this->entityTypeManager->getStorage('display_builder_instance')->load($builder_id);
44    $contexts = $instance->getContexts();
45
46    // Entity view display overrides.
47    if ($params = DisplayBuilderItemList::checkInstanceId($builder_id)) {
48      /** @var \Drupal\Core\Entity\FieldableEntityInterface $entity */
49      $entity = $this->entityTypeManager->getStorage($params['entity_type_id'])
50        ->load($params['entity_id']);
51      /** @var \Drupal\display_builder\DisplayBuildableInterface $override */
52      $override = $entity->get($params['field_name']);
53
54      if ($override) {
55        $override->saveSources();
56      }
57    }
58
59    // Entity view displays.
60    elseif (EntityViewDisplay::checkInstanceId($builder_id)) {
61      if (!$instance->hasSaveContextsRequirement(EntityViewDisplay::getContextRequirement(), $contexts)) {
62        return;
63      }
64      // Entity view display parameters are also in route match.
65      /** @var \Drupal\display_builder\DisplayBuildableInterface|null $display */
66      $display = $this->getEntityViewDisplayEntity($contexts['entity'], $contexts['view_mode']);
67
68      if ($display) {
69        $display->saveSources();
70      }
71    }
72  }
73
74  /**
75   * Get entity view display entity.
76   *
77   * @param \Drupal\Core\Plugin\Context\ContextInterface $entity_context
78   *   The entity context.
79   * @param \Drupal\Core\Plugin\Context\ContextInterface $view_mode_context
80   *   The view mode context.
81   *
82   * @return \Drupal\display_builder\DisplayBuildableInterface|null
83   *   The entity view display entity or NULL if not found.
84   */
85  protected function getEntityViewDisplayEntity(ContextInterface $entity_context, ContextInterface $view_mode_context): ?DisplayBuildableInterface {
86    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
87    $entity = $entity_context->getContextValue();
88    $entity_type_id = $entity->getEntityTypeId();
89    $bundle = $entity->bundle();
90    $view_mode = $view_mode_context->getContextValue();
91    $display_id = "{$entity_type_id}.{$bundle}.{$view_mode}";
92
93    /** @var \Drupal\display_builder\DisplayBuildableInterface|null $display */
94    $display = $this->entityTypeManager->getStorage('entity_view_display')
95      ->load($display_id);
96
97    return $display;
98  }
99
100}

Paths

Below are the source code lines that represent each code path as identified by Xdebug. Please note a path is not necessarily coterminous with a line, a line may contain multiple paths and therefore show up more than once. Please also be aware that some paths may include implicit rather than explicit branches, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

DisplayBuilderSubscriber->__construct
21  public function __construct(
22    protected EntityTypeManagerInterface $entityTypeManager,
23  ) {}
DisplayBuilderSubscriber->getEntityViewDisplayEntity
85  protected function getEntityViewDisplayEntity(ContextInterface $entity_context, ContextInterface $view_mode_context): ?DisplayBuildableInterface {
86    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
87    $entity = $entity_context->getContextValue();
88    $entity_type_id = $entity->getEntityTypeId();
89    $bundle = $entity->bundle();
90    $view_mode = $view_mode_context->getContextValue();
91    $display_id = "{$entity_type_id}.{$bundle}.{$view_mode}";
92
93    /** @var \Drupal\display_builder\DisplayBuildableInterface|null $display */
94    $display = $this->entityTypeManager->getStorage('entity_view_display')
95      ->load($display_id);
96
97    return $display;
DisplayBuilderSubscriber->getSubscribedEvents
30      DisplayBuilderEvents::ON_SAVE => 'onSave',
DisplayBuilderSubscriber->onSave
40  public function onSave(DisplayBuilderEvent $event): void {
41    $builder_id = $event->getBuilderId();
42    /** @var \Drupal\display_builder\InstanceInterface $instance */
43    $instance = $this->entityTypeManager->getStorage('display_builder_instance')->load($builder_id);
44    $contexts = $instance->getContexts();
45
46    // Entity view display overrides.
47    if ($params = DisplayBuilderItemList::checkInstanceId($builder_id)) {
 
49      $entity = $this->entityTypeManager->getStorage($params['entity_type_id'])
50        ->load($params['entity_id']);
51      /** @var \Drupal\display_builder\DisplayBuildableInterface $override */
52      $override = $entity->get($params['field_name']);
53
54      if ($override) {
 
47    if ($params = DisplayBuilderItemList::checkInstanceId($builder_id)) {
48      /** @var \Drupal\Core\Entity\FieldableEntityInterface $entity */
49      $entity = $this->entityTypeManager->getStorage($params['entity_type_id'])
50        ->load($params['entity_id']);
51      /** @var \Drupal\display_builder\DisplayBuildableInterface $override */
52      $override = $entity->get($params['field_name']);
53
54      if ($override) {
55        $override->saveSources();
 
72  }
40  public function onSave(DisplayBuilderEvent $event): void {
41    $builder_id = $event->getBuilderId();
42    /** @var \Drupal\display_builder\InstanceInterface $instance */
43    $instance = $this->entityTypeManager->getStorage('display_builder_instance')->load($builder_id);
44    $contexts = $instance->getContexts();
45
46    // Entity view display overrides.
47    if ($params = DisplayBuilderItemList::checkInstanceId($builder_id)) {
 
49      $entity = $this->entityTypeManager->getStorage($params['entity_type_id'])
50        ->load($params['entity_id']);
51      /** @var \Drupal\display_builder\DisplayBuildableInterface $override */
52      $override = $entity->get($params['field_name']);
53
54      if ($override) {
 
72  }
40  public function onSave(DisplayBuilderEvent $event): void {
41    $builder_id = $event->getBuilderId();
42    /** @var \Drupal\display_builder\InstanceInterface $instance */
43    $instance = $this->entityTypeManager->getStorage('display_builder_instance')->load($builder_id);
44    $contexts = $instance->getContexts();
45
46    // Entity view display overrides.
47    if ($params = DisplayBuilderItemList::checkInstanceId($builder_id)) {
 
60    elseif (EntityViewDisplay::checkInstanceId($builder_id)) {
 
61      if (!$instance->hasSaveContextsRequirement(EntityViewDisplay::getContextRequirement(), $contexts)) {
 
62        return;
40  public function onSave(DisplayBuilderEvent $event): void {
41    $builder_id = $event->getBuilderId();
42    /** @var \Drupal\display_builder\InstanceInterface $instance */
43    $instance = $this->entityTypeManager->getStorage('display_builder_instance')->load($builder_id);
44    $contexts = $instance->getContexts();
45
46    // Entity view display overrides.
47    if ($params = DisplayBuilderItemList::checkInstanceId($builder_id)) {
 
60    elseif (EntityViewDisplay::checkInstanceId($builder_id)) {
 
61      if (!$instance->hasSaveContextsRequirement(EntityViewDisplay::getContextRequirement(), $contexts)) {
 
66      $display = $this->getEntityViewDisplayEntity($contexts['entity'], $contexts['view_mode']);
67
68      if ($display) {
 
69        $display->saveSources();
70      }
71    }
72  }
 
72  }
40  public function onSave(DisplayBuilderEvent $event): void {
41    $builder_id = $event->getBuilderId();
42    /** @var \Drupal\display_builder\InstanceInterface $instance */
43    $instance = $this->entityTypeManager->getStorage('display_builder_instance')->load($builder_id);
44    $contexts = $instance->getContexts();
45
46    // Entity view display overrides.
47    if ($params = DisplayBuilderItemList::checkInstanceId($builder_id)) {
 
60    elseif (EntityViewDisplay::checkInstanceId($builder_id)) {
 
61      if (!$instance->hasSaveContextsRequirement(EntityViewDisplay::getContextRequirement(), $contexts)) {
 
66      $display = $this->getEntityViewDisplayEntity($contexts['entity'], $contexts['view_mode']);
67
68      if ($display) {
 
72  }
40  public function onSave(DisplayBuilderEvent $event): void {
41    $builder_id = $event->getBuilderId();
42    /** @var \Drupal\display_builder\InstanceInterface $instance */
43    $instance = $this->entityTypeManager->getStorage('display_builder_instance')->load($builder_id);
44    $contexts = $instance->getContexts();
45
46    // Entity view display overrides.
47    if ($params = DisplayBuilderItemList::checkInstanceId($builder_id)) {
 
60    elseif (EntityViewDisplay::checkInstanceId($builder_id)) {
 
72  }