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()->getLowercaseLabel(), ]), '#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->urlInfo('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->urlInfo('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()->getLowercaseLabel(), '%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())->notice('The @entity-type %label @language translation has been deleted.', [ '@entity-type' => $entity->getEntityType()->getLowercaseLabel(), '%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()->getLowercaseLabel(), '%label' => $this->getEntity()->label(), ]); } return $this->traitGetQuestion(); } }