You are here

NodeRevisionRevertDefaultForm.php in Thunder 8.4

File

modules/thunder_article/src/Form/NodeRevisionRevertDefaultForm.php
View source
<?php

namespace Drupal\thunder_article\Form;

use Drupal\Core\Form\ConfirmFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\node\Form\NodeRevisionRevertForm;
use Drupal\node\NodeInterface;

/**
 * Provides a form for reverting a node revision.
 *
 * @internal
 */
class NodeRevisionRevertDefaultForm extends NodeRevisionRevertForm {

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'node_revision_revert_default_confirm';
  }

  /**
   * {@inheritdoc}
   */
  public function getQuestion() {
    return $this
      ->t('Are you sure you want to revert to the default revision from %revision-date?', [
      '%revision-date' => $this->dateFormatter
        ->format($this->revision
        ->getRevisionCreationTime()),
    ]);
  }

  /**
   * {@inheritdoc}
   */
  public function getCancelUrl() {
    return new Url('entity.node.edit_form', [
      'node' => $this->revision
        ->id(),
    ]);
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state, $node = NULL) {
    $this->revision = $this->nodeStorage
      ->load($node);
    $form = ConfirmFormBase::buildForm($form, $form_state);
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {

    // The revision timestamp will be updated when the revision is saved. Keep
    // the original one for the confirmation message.
    $original_revision_timestamp = $this->revision
      ->getRevisionCreationTime();
    $this->revision = $this
      ->prepareRevertedRevision($this->revision, $form_state);
    $this->revision->revision_log = $this
      ->t('Copy of the revision from %date.', [
      '%date' => $this->dateFormatter
        ->format($original_revision_timestamp),
    ]);
    $this->revision
      ->setRevisionUserId($this
      ->currentUser()
      ->id());
    $this->revision
      ->setRevisionCreationTime($this->time
      ->getRequestTime());
    $this->revision
      ->setChangedTime($this->time
      ->getRequestTime());
    $this->revision
      ->save();
    $this
      ->logger('content')
      ->notice('@type: reverted %title revision %revision.', [
      '@type' => $this->revision
        ->bundle(),
      '%title' => $this->revision
        ->label(),
      '%revision' => $this->revision
        ->getRevisionId(),
    ]);
    $this
      ->messenger()
      ->addStatus($this
      ->t('@type %title has been reverted to the revision from %revision-date.', [
      '@type' => node_get_type_label($this->revision),
      '%title' => $this->revision
        ->label(),
      '%revision-date' => $this->dateFormatter
        ->format($original_revision_timestamp),
    ]));
    $form_state
      ->setRedirectUrl($this
      ->getCancelUrl());
  }

  /**
   * {@inheritdoc}
   */
  protected function prepareRevertedRevision(NodeInterface $revision, FormStateInterface $form_state) {
    $revision
      ->setNewRevision();
    $revision
      ->isDefaultRevision(TRUE);
    $revision
      ->setRevisionTranslationAffected(TRUE);
    return $revision;
  }

}

Classes

Namesort descending Description
NodeRevisionRevertDefaultForm Provides a form for reverting a node revision.