Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
38.10% covered (danger)
38.10%
8 / 21
25.00% covered (danger)
25.00%
2 / 8
33.33% covered (danger)
33.33%
2 / 6
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
EntityViewDisplay
38.10% covered (danger)
38.10%
8 / 21
25.00% covered (danger)
25.00%
2 / 8
33.33% covered (danger)
33.33%
2 / 6
66.67% covered (warning)
66.67%
2 / 3
12.41
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getDisplayInfos
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
12
 initialImport
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\display_builder_entity_view\Entity;
6
7use Drupal\Core\Entity\Entity\EntityViewDisplay as CoreEntityViewDisplay;
8use Drupal\Core\Entity\EntityTypeManagerInterface;
9use Drupal\Core\Extension\ModuleExtensionList;
10use Drupal\display_builder\InstanceInterface;
11use Drupal\display_builder_entity_view\BuilderDataConverter;
12use Drupal\ui_patterns\Element\ComponentElementBuilder;
13use Drupal\ui_patterns\Entity\SampleEntityGeneratorInterface;
14use Drupal\ui_patterns\SourcePluginManager;
15
16/**
17 * Provides an entity view display entity that has a display builder.
18 *
19 * When Layout Builder is not activated, extends the default entity view
20 * display ("Manage display").
21 *
22 * @see \Drupal\display_builder_entity_view\Hook\DisplayBuilderEntityViewHook::entityTypeAlter()
23 * @see \Drupal\display_builder_entity_view\Entity\LayoutBuilderEntityViewDisplay
24 */
25class EntityViewDisplay extends CoreEntityViewDisplay implements DisplayBuilderEntityDisplayInterface, DisplayBuilderOverridableInterface {
26
27  use EntityViewDisplayTrait;
28
29  /**
30   * The source plugin manager.
31   */
32  protected SourcePluginManager $sourcePluginManager;
33
34  /**
35   * The entity type manager.
36   */
37  protected EntityTypeManagerInterface $entityTypeManager;
38
39  /**
40   * The component element builder service.
41   */
42  protected ComponentElementBuilder $componentElementBuilder;
43
44  /**
45   * The sample entity generator.
46   */
47  protected SampleEntityGeneratorInterface $sampleEntityGenerator;
48
49  /**
50   * The list of modules.
51   */
52  protected ModuleExtensionList $modules;
53
54  /**
55   * The data converter from Manage Display and Layout Builder.
56   */
57  protected BuilderDataConverter $dataConverter;
58
59  /**
60   * The loaded display builder instance.
61   */
62  protected ?InstanceInterface $instance;
63
64  /**
65   * Constructs the EntityViewDisplay.
66   *
67   * @param array $values
68   *   The values to initialize the entity with.
69   * @param string $entity_type
70   *   The entity type ID.
71   */
72  public function __construct(array $values, $entity_type) {
73    parent::__construct($values, $entity_type);
74    $this->sourcePluginManager = \Drupal::service('plugin.manager.ui_patterns_source');
75    $this->entityTypeManager = \Drupal::service('entity_type.manager');
76    $this->componentElementBuilder = \Drupal::service('ui_patterns.component_element_builder');
77    $this->sampleEntityGenerator = \Drupal::service('ui_patterns.sample_entity_generator');
78    $this->modules = \Drupal::service('extension.list.module');
79    $this->dataConverter = \Drupal::service('display_builder_entity_view.builder_data_converter');
80  }
81
82  /**
83   * Gets entity_view_display information grouped by entity type.
84   *
85   * @todo To remove.
86   * https://www.drupal.org/project/display_builder/issues/3542273
87   *
88   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entityTypeManager
89   *   The entity type manager service.
90   *
91   * @return array
92   *   An array of display information keyed with 'node', then 'modes' and
93   *   'bundles':
94   *
95   *   @code
96   *   [
97   *     'node' => [
98   *       'modes' => [
99   *         'teaser' => 'Teaser',
100   *       ],
101   *      'bundles' => [
102   *        'article' => [
103   *          'teaser' => 'Teaser',
104   *        ],
105   *      ],
106   *    ],
107   *   ];
108   *
109   *   @endcode
110   */
111  public static function getDisplayInfos(EntityTypeManagerInterface $entityTypeManager): array {
112    /** @var \Drupal\display_builder_entity_view\Entity\EntityViewDisplay[] $displays */
113    $displays = $entityTypeManager
114      ->getStorage('entity_view_display')
115      ->loadMultiple();
116    $view_mode_storage = $entityTypeManager->getStorage('entity_view_mode');
117    $tabs_info = [];
118
119    foreach ($displays as $display) {
120      if (!$display->getDisplayBuilderOverrideField()) {
121        continue;
122      }
123
124      $entity_type_id = $display->getTargetEntityTypeId();
125      $view_mode = $view_mode_storage->load(\sprintf('%s.%s', $entity_type_id, $display->getMode()));
126      $tabs_info[$entity_type_id]['modes'][$display->getMode()] = $view_mode?->label() ?? t('Default');
127      $tabs_info[$entity_type_id]['bundles'][$display->getTargetBundle()][$display->getMode()] = $view_mode?->label() ?? t('Default');
128    }
129
130    return $tabs_info;
131  }
132
133  /**
134   * Initial import from existing data.
135   *
136   * @return array
137   *   List of UI Patterns sources.
138   *
139   * @see EntityViewDisplayTrait::initInstanceIfMissing()
140   * @see LayoutBuilderEntityViewDisplay::initialImport()
141   */
142  protected function initialImport(): array {
143    return $this->dataConverter->convertFromManageDisplay($this->getTargetEntityTypeId(), $this->getTargetBundle(), $this->content);
144  }
145
146}

Branches

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

EntityViewDisplay->__construct
72  public function __construct(array $values, $entity_type) {
73    parent::__construct($values, $entity_type);
74    $this->sourcePluginManager = \Drupal::service('plugin.manager.ui_patterns_source');
75    $this->entityTypeManager = \Drupal::service('entity_type.manager');
76    $this->componentElementBuilder = \Drupal::service('ui_patterns.component_element_builder');
77    $this->sampleEntityGenerator = \Drupal::service('ui_patterns.sample_entity_generator');
78    $this->modules = \Drupal::service('extension.list.module');
79    $this->dataConverter = \Drupal::service('display_builder_entity_view.builder_data_converter');
80  }
EntityViewDisplay->getDisplayInfos
111  public static function getDisplayInfos(EntityTypeManagerInterface $entityTypeManager): array {
112    /** @var \Drupal\display_builder_entity_view\Entity\EntityViewDisplay[] $displays */
113    $displays = $entityTypeManager
114      ->getStorage('entity_view_display')
115      ->loadMultiple();
116    $view_mode_storage = $entityTypeManager->getStorage('entity_view_mode');
117    $tabs_info = [];
118
119    foreach ($displays as $display) {
119    foreach ($displays as $display) {
120      if (!$display->getDisplayBuilderOverrideField()) {
121        continue;
119    foreach ($displays as $display) {
120      if (!$display->getDisplayBuilderOverrideField()) {
121        continue;
122      }
123
124      $entity_type_id = $display->getTargetEntityTypeId();
119    foreach ($displays as $display) {
120      if (!$display->getDisplayBuilderOverrideField()) {
121        continue;
122      }
123
124      $entity_type_id = $display->getTargetEntityTypeId();
125      $view_mode = $view_mode_storage->load(\sprintf('%s.%s', $entity_type_id, $display->getMode()));
126      $tabs_info[$entity_type_id]['modes'][$display->getMode()] = $view_mode?->label() ?? t('Default');
127      $tabs_info[$entity_type_id]['bundles'][$display->getTargetBundle()][$display->getMode()] = $view_mode?->label() ?? t('Default');
128    }
129
130    return $tabs_info;
EntityViewDisplay->initialImport
143    return $this->dataConverter->convertFromManageDisplay($this->getTargetEntityTypeId(), $this->getTargetBundle(), $this->content);