Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 38
n/a
0 / 0
n/a
0 / 0
0.00% covered (danger)
0.00%
0 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
InstanceListBuilder
0.00% covered (danger)
0.00%
0 / 38
n/a
0 / 0
n/a
0 / 0
0.00% covered (danger)
0.00%
0 / 7
110
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
n/a
0 / 0
n/a
0 / 0
0.00% covered (danger)
0.00%
0 / 1
2
 createInstance
0.00% covered (danger)
0.00%
0 / 5
n/a
0 / 0
n/a
0 / 0
0.00% covered (danger)
0.00%
0 / 1
2
 getFormId
0.00% covered (danger)
0.00%
0 / 1
n/a
0 / 0
n/a
0 / 0
0.00% covered (danger)
0.00%
0 / 1
2
 buildHeader
0.00% covered (danger)
0.00%
0 / 8
n/a
0 / 0
n/a
0 / 0
0.00% covered (danger)
0.00%
0 / 1
2
 render
0.00% covered (danger)
0.00%
0 / 7
n/a
0 / 0
n/a
0 / 0
0.00% covered (danger)
0.00%
0 / 1
2
 buildRow
0.00% covered (danger)
0.00%
0 / 15
n/a
0 / 0
n/a
0 / 0
0.00% covered (danger)
0.00%
0 / 1
20
 getEntityIds
0.00% covered (danger)
0.00%
0 / 1
n/a
0 / 0
n/a
0 / 0
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\display_builder_ui;
6
7use Drupal\Core\Datetime\DateFormatterInterface;
8use Drupal\Core\Entity\EntityInterface;
9use Drupal\Core\Entity\EntityListBuilder;
10use Drupal\Core\Entity\EntityStorageInterface;
11use Drupal\Core\Entity\EntityTypeInterface;
12use Drupal\display_builder\DisplayBuilderHelpers;
13use Symfony\Component\DependencyInjection\ContainerInterface;
14
15/**
16 * Provides a listing of display builders instances.
17 */
18final class InstanceListBuilder extends EntityListBuilder {
19
20  /**
21   * {@inheritdoc}
22   */
23  public function __construct(
24    protected EntityTypeInterface $entity_type,
25    EntityStorageInterface $storage,
26    private readonly DateFormatterInterface $dateFormatter,
27  ) {
28    parent::__construct($entity_type, $storage);
29  }
30
31  /**
32   * {@inheritdoc}
33   */
34  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type): self {
35    return new self(
36      $entity_type,
37      $container->get('entity_type.manager')->getStorage($entity_type->id()),
38      $container->get('date.formatter'),
39    );
40  }
41
42  /**
43   * {@inheritdoc}
44   */
45  public function getFormId(): string {
46    return 'display_builder_instance_list_builder';
47  }
48
49  /**
50   * {@inheritdoc}
51   */
52  public function buildHeader(): array {
53    $header = [
54      'id' => $this->t('Instance'),
55      'profile' => $this->t('Profile'),
56      'context' => $this->t('Context'),
57      'updated' => $this->t('Updated'),
58      'log' => $this->t('Last log'),
59    ];
60
61    return $header + parent::buildHeader();
62  }
63
64  /**
65   * {@inheritdoc}
66   */
67  public function render(): array {
68    $build = parent::render();
69    $build['notice'] = [
70      '#markup' => '<p>' . $this->t('Instances are versions of displays (entity views, page layouts, views...) currently under work.') . ' '
71      . $this->t('They are created automatically from the displays and must be managed from them.') . '</p>',
72      '#weight' => -100,
73    ];
74
75    return $build;
76  }
77
78  /**
79   * {@inheritdoc}
80   */
81  public function buildRow(EntityInterface $instance): array {
82    /** @var \Drupal\display_builder\InstanceInterface $instance */
83    $instance_id = (string) $instance->id();
84    $row = [];
85
86    $type = '-';
87    $providers = $this->moduleHandler->invokeAll('display_builder_provider_info');
88
89    foreach ($providers as $provider) {
90      if (\str_starts_with($instance_id, $provider['prefix'])) {
91        $type = $provider['label'];
92
93        break;
94      }
95    }
96
97    $row['id']['data'] = $instance_id;
98    $row['profile']['data'] = $instance->getProfile()->label();
99    $row['context']['data'] = $type;
100
101    /** @var \Drupal\display_builder\HistoryStep $present */
102    $present = $instance->getCurrent();
103    $row['updated']['data'] = $present->time ? DisplayBuilderHelpers::formatTime($this->dateFormatter, (int) $present->time) : '-';
104    $row['log']['data'] = $present->log ?? '-';
105
106    return $row + parent::buildRow($instance);
107  }
108
109  /**
110   * {@inheritdoc}
111   */
112  protected function getEntityIds(): array {
113    // To avoid implementing EntityStorageInterface::getQuery()
114    return \array_keys($this->getStorage()->loadMultiple());
115  }
116
117}

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.