Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
ConfirmViewsBuilderDeleteForm
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 7
56
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
2
 buildForm
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getCancelUrl
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getFormId
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getQuestion
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 submitForm
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 unsetDisplayBuilder
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\display_builder_views\Form;
6
7use Drupal\Core\DependencyInjection\AutowireTrait;
8use Drupal\Core\Entity\EntityTypeManagerInterface;
9use Drupal\Core\Form\ConfirmFormBase;
10use Drupal\Core\Form\FormStateInterface;
11use Drupal\Core\StringTranslation\TranslatableMarkup;
12use Drupal\Core\Url;
13use Drupal\display_builder_views\Plugin\views\display_extender\DisplayExtender;
14
15/**
16 * Confirmation form to confirm deletion of display builder instance.
17 */
18class ConfirmViewsBuilderDeleteForm extends ConfirmFormBase {
19
20  use AutowireTrait;
21
22  /**
23   * Display builder id to delete.
24   */
25  private ?string $builderId;
26
27  public function __construct(
28    private readonly EntityTypeManagerInterface $entityTypeManager,
29  ) {}
30
31  /**
32   * {@inheritdoc}
33   */
34  public function buildForm(array $form, FormStateInterface $form_state, ?string $builder_id = NULL): array {
35    $this->builderId = $builder_id;
36
37    return parent::buildForm($form, $form_state);
38  }
39
40  /**
41   * {@inheritdoc}
42   */
43  public function getCancelUrl(): Url {
44    return new Url('display_builder_views.views.collection');
45  }
46
47  /**
48   * {@inheritdoc}
49   */
50  public function getFormId(): string {
51    return 'confirm_display_builder_views_delete_form';
52  }
53
54  /**
55   * {@inheritdoc}
56   */
57  public function getQuestion(): TranslatableMarkup {
58    return $this->t('Do you want to delete %id?', ['%id' => $this->builderId]);
59  }
60
61  /**
62   * {@inheritdoc}
63   */
64  public function submitForm(array &$form, FormStateInterface $form_state): void {
65    $storage = $this->entityTypeManager->getStorage('display_builder_instance');
66    $instance = $storage->load($this->builderId);
67    $storage->delete([$instance]);
68    $this->unsetDisplayBuilder();
69    $form_state->setRedirectUrl(new Url('display_builder_views.views.collection'));
70  }
71
72  /**
73   * Unset display builder.
74   */
75  protected function unsetDisplayBuilder(): void {
76    $view_id = DisplayExtender::checkInstanceId($this->builderId)['view'];
77    $display_id = DisplayExtender::checkInstanceId($this->builderId)['display'];
78    $view = $this->entityTypeManager->getStorage('view')->load($view_id);
79    // It is risky to alter a View like that. We need to be careful to not
80    // break the storage integrity, but we didn't find a better way.
81    $displays = $view->get('display');
82    $displays[$display_id]['display_options']['display_extenders']['display_builder']['display_builder'] = '';
83    $view->set('display', $displays);
84    $view->save();
85  }
86
87}