ContentEntityDeleteForm.php 4.4 KB

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