Commit 216fb9d4 authored by Alexandre Dias's avatar Alexandre Dias Committed by Claudiu Cristea
Browse files

Issue #3258368: Delete Entity Legal version

parent ad284d49
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -54,6 +54,14 @@ entity.entity_legal_document_version.edit_form:
  requirements:
    _entity_access: 'entity_legal_document_version.update'

entity.entity_legal_document_version.delete_form:
  path: '/admin/structure/legal/document/{entity_legal_document_version}/delete'
  defaults:
    _entity_form: 'entity_legal_document_version.delete'
    _title: 'Delete'
  requirements:
    _entity_access: 'entity_legal_document_version.delete'

entity.entity_legal_document_version.canonical:
  path: '/admin/structure/legal/document/{entity_legal_document_version}'
  defaults:
+3 −1
Original line number Diff line number Diff line
@@ -22,7 +22,8 @@ use Drupal\entity_legal\EntityLegalDocumentVersionInterface;
 *     "views_data" = "Drupal\views\EntityViewsData",
 *     "form" = {
 *       "default" = "Drupal\entity_legal\Form\EntityLegalDocumentVersionForm",
 *       "edit" = "Drupal\entity_legal\Form\EntityLegalDocumentVersionForm"
 *       "edit" = "Drupal\entity_legal\Form\EntityLegalDocumentVersionForm",
 *       "delete" = "Drupal\entity_legal\Form\EntityLegalDocumentVersionDeleteForm",
 *     },
 *     "translation" = "Drupal\entity_legal\EntityLegalDocumentVersionTranslationHandler"
 *   },
@@ -39,6 +40,7 @@ use Drupal\entity_legal\EntityLegalDocumentVersionInterface;
 *     "bundle" = "document_name"
 *   },
 *   links = {
 *     "delete-form" = "/admin/structure/legal/document/{entity_legal_document_version}/delete",
 *     "canonical" = "/admin/structure/legal/document/{entity_legal_document_version}",
 *     "edit-form" = "/admin/structure/legal/document/{entity_legal_document_version}/edit",
 *   },
+8 −0
Original line number Diff line number Diff line
@@ -153,6 +153,14 @@ class EntityLegalDocumentForm extends EntityForm implements ContainerInjectionIn
            'entity_legal_document_version' => $version->id(),
          ]),
        ];

        $links['delete'] = [
          'title' => $this->t('Delete'),
          'url' => Url::fromRoute('entity.entity_legal_document_version.delete_form', [
            'entity_legal_document_version' => $version->id(),
          ]),
        ];

        if ($version->isTranslatable()) {
          try {
            $links['translate'] = [
+64 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\entity_legal\Form;

use Drupal\Core\Entity\ContentEntityConfirmFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Url;

/**
 * Provides a form for deleting a entity_legal_document_version entity.
 *
 * @ingroup entity_legal
 */
class EntityLegalDocumentVersionDeleteForm extends ContentEntityConfirmFormBase {

  /**
   * {@inheritdoc}
   */
  public function getQuestion(): TranslatableMarkup {
    return $this->t('Are you sure you want to delete the legal document version %name?', ['%name' => $this->entity->label()]);
  }

  /**
   * {@inheritdoc}
   *
   * If the delete command is canceled, return to the legal document versions.
   */
  public function getCancelUrl(): Url {
    return new Url('entity.entity_legal_document.edit_form', [
      'entity_legal_document' => $this->entity->document_name->target_id,
    ]);
  }

  /**
   * {@inheritdoc}
   */
  public function getConfirmText(): TranslatableMarkup {
    return $this->t('Delete');
  }

  /**
   * {@inheritdoc}
   *
   * Delete the entity and log the event. logger() replaces the watchdog.
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $entity = $this->getEntity();
    $entity->delete();

    $this->messenger()->addStatus($this->t('%title document version has been deleted from @type.',
      [
        '@type' => $this->entity->bundle(),
        '%title' => $this->entity->label(),
      ]));

    $form_state->setRedirect('entity.entity_legal_document.edit_form', [
      'entity_legal_document' => $this->entity->document_name->target_id,
    ]);
  }

}
+81 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\Tests\entity_legal\Kernel;

use Drupal\entity_legal\Controller\EntityLegalController;
use Drupal\entity_legal\Entity\EntityLegalDocument;
use Drupal\entity_legal\Entity\EntityLegalDocumentVersion;
use Drupal\KernelTests\KernelTestBase;

/**
 * Tests the 'entity_legal_document_version' entity type.
 *
 * @group entity_legal
 */
class DocumentDeleteTest extends KernelTestBase {

  /**
   * {@inheritdoc}
   */
  public static $modules = [
    'entity_legal',
    'field',
    'system',
    'text',
    'user',
  ];

  /**
   * Tests the canonical route title callback.
   */
  public function testDeleteDocumentVersion() {
    $class_resolver = $this->container->get('class_resolver');

    $this->installConfig(['entity_legal']);
    $this->installEntitySchema(ENTITY_LEGAL_DOCUMENT_VERSION_ENTITY_NAME);
    $this->installEntitySchema(ENTITY_LEGAL_DOCUMENT_ACCEPTANCE_ENTITY_NAME);

    /** @var \Drupal\entity_legal\Controller\EntityLegalController $controller */
    $controller = $class_resolver->getInstanceFromDefinition(EntityLegalController::class);

    $document = EntityLegalDocument::create([
      'id' => 'new_notice',
      'label' => 'New notice',
    ]);
    $document->save();

    $version = EntityLegalDocumentVersion::create([
      'document_name' => $document->id(),
      'label' => 'v1.0.0',
    ]);
    $version->validate();

    $version_2 = EntityLegalDocumentVersion::create([
      'document_name' => $document->id(),
      'label' => 'v2.0.0',
    ]);
    $version_2->validate();

    $document->setPublishedVersion($version);
    $settings = $document->get('settings');

    // Check that the default title pattern [entity_legal_document:label].
    $title = $controller->documentPageTitle($document);
    $this->assertEquals('New notice', $title);

    // Check a custom pattern.
    $settings['title_pattern'] = '[entity_legal_document:label] (version [entity_legal_document:published-version:label])';
    $document->set('settings', $settings)->save();
    $title = $controller->documentPageTitle($document);
    $this->assertEquals('New notice (version v1.0.0)', $title);

    // Delete version 1.
    $doc_v1 = EntityLegalDocumentVersion::load($version->id());
    $doc_v1->delete();

    $document->setPublishedVersion($version_2);
    $title = $controller->documentPageTitle($document);
    $this->assertEquals('New notice (version v2.0.0)', $title);
  }

}