27dd2b7d79dba656ba265c3d56ba02701504820c
[yaffs-website] / web / core / lib / Drupal / Core / Entity / ContentEntityDeleteForm.php
1 <?php
2
3 namespace Drupal\Core\Entity;
4
5 use Drupal\Core\Form\FormStateInterface;
6
7 /**
8  * Provides a generic base class for a content entity deletion form.
9  *
10  * @internal
11  *
12  * @todo Re-evaluate and streamline the entity deletion form class hierarchy in
13  *   https://www.drupal.org/node/2491057.
14  */
15 class ContentEntityDeleteForm extends ContentEntityConfirmFormBase {
16
17   use EntityDeleteFormTrait {
18     getQuestion as traitGetQuestion;
19     logDeletionMessage as traitLogDeletionMessage;
20     getDeletionMessage as traitGetDeletionMessage;
21     getCancelUrl as traitGetCancelUrl;
22   }
23
24   /**
25    * {@inheritdoc}
26    */
27   public function buildForm(array $form, FormStateInterface $form_state) {
28     $form = parent::buildForm($form, $form_state);
29
30     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
31     $entity = $this->getEntity();
32     if ($entity->isDefaultTranslation()) {
33       if (count($entity->getTranslationLanguages()) > 1) {
34         $languages = [];
35         foreach ($entity->getTranslationLanguages() as $language) {
36           $languages[] = $language->getName();
37         }
38
39         $form['deleted_translations'] = [
40           '#theme' => 'item_list',
41           '#title' => $this->t('The following @entity-type translations will be deleted:', [
42             '@entity-type' => $entity->getEntityType()->getLowercaseLabel(),
43           ]),
44           '#items' => $languages,
45         ];
46
47         $form['actions']['submit']['#value'] = $this->t('Delete all translations');
48       }
49     }
50     else {
51       $form['actions']['submit']['#value'] = $this->t('Delete @language translation', ['@language' => $entity->language()->getName()]);
52     }
53
54     return $form;
55   }
56
57   /**
58    * {@inheritdoc}
59    */
60   public function submitForm(array &$form, FormStateInterface $form_state) {
61     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
62     $entity = $this->getEntity();
63     $message = $this->getDeletionMessage();
64
65     // Make sure that deleting a translation does not delete the whole entity.
66     if (!$entity->isDefaultTranslation()) {
67       $untranslated_entity = $entity->getUntranslated();
68       $untranslated_entity->removeTranslation($entity->language()->getId());
69       $untranslated_entity->save();
70       $form_state->setRedirectUrl($untranslated_entity->urlInfo('canonical'));
71     }
72     else {
73       $entity->delete();
74       $form_state->setRedirectUrl($this->getRedirectUrl());
75     }
76
77     $this->messenger()->addStatus($message);
78     $this->logDeletionMessage();
79   }
80
81   /**
82    * {@inheritdoc}
83    */
84   public function getCancelUrl() {
85     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
86     $entity = $this->getEntity();
87     return $entity->isDefaultTranslation() ? $this->traitGetCancelUrl() : $entity->urlInfo('canonical');
88   }
89
90   /**
91    * {@inheritdoc}
92    */
93   protected function getDeletionMessage() {
94     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
95     $entity = $this->getEntity();
96
97     if (!$entity->isDefaultTranslation()) {
98       return $this->t('The @entity-type %label @language translation has been deleted.', [
99         '@entity-type' => $entity->getEntityType()->getLowercaseLabel(),
100         '%label'       => $entity->label(),
101         '@language'    => $entity->language()->getName(),
102       ]);
103     }
104
105     return $this->traitGetDeletionMessage();
106   }
107
108   /**
109    * {@inheritdoc}
110    */
111   protected function logDeletionMessage() {
112     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
113     $entity = $this->getEntity();
114
115     if (!$entity->isDefaultTranslation()) {
116       $this->logger($entity->getEntityType()->getProvider())->notice('The @entity-type %label @language translation has been deleted.', [
117         '@entity-type' => $entity->getEntityType()->getLowercaseLabel(),
118         '%label'       => $entity->label(),
119         '@language'    => $entity->language()->getName(),
120       ]);
121     }
122     else {
123       $this->traitLogDeletionMessage();
124     }
125   }
126
127   /**
128    * {@inheritdoc}
129    */
130   public function getQuestion() {
131     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
132     $entity = $this->getEntity();
133
134     if (!$entity->isDefaultTranslation()) {
135       return $this->t('Are you sure you want to delete the @language translation of the @entity-type %label?', [
136         '@language' => $entity->language()->getName(),
137         '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
138         '%label' => $this->getEntity()->label(),
139       ]);
140     }
141
142     return $this->traitGetQuestion();
143   }
144
145 }