ContentEntityDeleteForm.php

Same filename and directory in other branches
  1. 9 core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
  2. 8.9.x core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
  3. 10 core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php

Namespace

Drupal\Core\Entity

File

core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php

View source
<?php

namespace Drupal\Core\Entity;

use Drupal\Core\Form\FormStateInterface;

/**
 * Provides a generic base class for a content entity deletion form.
 *
 * @todo Re-evaluate and streamline the entity deletion form class hierarchy in
 *   https://www.drupal.org/node/2491057.
 */
class ContentEntityDeleteForm extends ContentEntityConfirmFormBase {
  use EntityDeleteFormTrait {
    getQuestion as traitGetQuestion;
    logDeletionMessage as traitLogDeletionMessage;
    getDeletionMessage as traitGetDeletionMessage;
    getCancelUrl as traitGetCancelUrl;
  }
  
  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form = parent::buildForm($form, $form_state);
    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
    $entity = $this->getEntity();
    if ($entity->isDefaultTranslation()) {
      if (count($entity->getTranslationLanguages()) > 1) {
        $languages = [];
        foreach ($entity->getTranslationLanguages() as $language) {
          $languages[] = $language->getName();
        }
        $form['deleted_translations'] = [
          '#theme' => 'item_list',
          '#title' => $this->t('The following @entity-type translations will be deleted:', [
            '@entity-type' => $entity->getEntityType()
              ->getSingularLabel(),
          ]),
          '#items' => $languages,
        ];
        $form['actions']['submit']['#value'] = $this->t('Delete all translations');
      }
    }
    else {
      $form['actions']['submit']['#value'] = $this->t('Delete @language translation', [
        '@language' => $entity->language()
          ->getName(),
      ]);
    }
    return $form;
  }
  
  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
    $entity = $this->getEntity();
    $message = $this->getDeletionMessage();
    // Make sure that deleting a translation does not delete the whole entity.
    if (!$entity->isDefaultTranslation()) {
      $untranslated_entity = $entity->getUntranslated();
      $untranslated_entity->removeTranslation($entity->language()
        ->getId());
      $untranslated_entity->save();
      $form_state->setRedirectUrl($untranslated_entity->toUrl('canonical'));
    }
    else {
      $entity->delete();
      $form_state->setRedirectUrl($this->getRedirectUrl());
    }
    $this->messenger()
      ->addStatus($message);
    $this->logDeletionMessage();
  }
  
  /**
   * {@inheritdoc}
   */
  public function getCancelUrl() {
    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
    $entity = $this->getEntity();
    return $entity->isDefaultTranslation() ? $this->traitGetCancelUrl() : $entity->toUrl('canonical');
  }
  
  /**
   * {@inheritdoc}
   */
  protected function getDeletionMessage() {
    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
    $entity = $this->getEntity();
    if (!$entity->isDefaultTranslation()) {
      return $this->t('The @entity-type %label @language translation has been deleted.', [
        '@entity-type' => $entity->getEntityType()
          ->getSingularLabel(),
        '%label' => $entity->label(),
        '@language' => $entity->language()
          ->getName(),
      ]);
    }
    return $this->traitGetDeletionMessage();
  }
  
  /**
   * {@inheritdoc}
   */
  protected function logDeletionMessage() {
    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
    $entity = $this->getEntity();
    if (!$entity->isDefaultTranslation()) {
      $this->logger($entity->getEntityType()
        ->getProvider())
        ->info('The @entity-type %label @language translation has been deleted.', [
        '@entity-type' => $entity->getEntityType()
          ->getSingularLabel(),
        '%label' => $entity->label(),
        '@language' => $entity->language()
          ->getName(),
      ]);
    }
    else {
      $this->traitLogDeletionMessage();
    }
  }
  
  /**
   * {@inheritdoc}
   */
  public function getQuestion() {
    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
    $entity = $this->getEntity();
    if (!$entity->isDefaultTranslation()) {
      return $this->t('Are you sure you want to delete the @language translation of the @entity-type %label?', [
        '@language' => $entity->language()
          ->getName(),
        '@entity-type' => $this->getEntity()
          ->getEntityType()
          ->getSingularLabel(),
        '%label' => $this->getEntity()
          ->label(),
      ]);
    }
    return $this->traitGetQuestion();
  }

}

Classes

Title Deprecated Summary
ContentEntityDeleteForm Provides a generic base class for a content entity deletion form.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.