alert_types-8.x-1.x-dev/src/Form/AlertRevisionRevertForm.php
src/Form/AlertRevisionRevertForm.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | <?php namespace Drupal\alert_types\Form; use Drupal\Component\Datetime\TimeInterface; use Drupal\Core\Datetime\DateFormatterInterface; use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Form\ConfirmFormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; use Drupal\alert_types\Entity\AlertInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides a form for reverting a Alert revision. * * @ingroup alert_types */ class AlertRevisionRevertForm extends ConfirmFormBase { /** * The Alert revision. * * @var \Drupal\alert_types\Entity\AlertInterface */ protected $revision ; /** * The Alert storage. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $AlertStorage ; /** * The date formatter service. * * @var \Drupal\Core\Datetime\DateFormatterInterface */ protected $dateFormatter ; /** * The time service. * * @var \Drupal\Component\Datetime\TimeInterface */ protected $time ; /** * Constructs a new AlertRevisionRevertForm. * * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage * The Alert storage. * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter * The date formatter service. * @param \Drupal\Component\Datetime\TimeInterface $time * The time service. */ public function __construct(EntityStorageInterface $entity_storage , DateFormatterInterface $date_formatter , TimeInterface $time ) { $this ->AlertStorage = $entity_storage ; $this ->dateFormatter = $date_formatter ; $this ->time = $time ; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container ) { return new static ( $container ->get( 'entity_type.manager' )->getStorage( 'alert' ), $container ->get( 'date.formatter' ), $container ->get( 'datetime.time' ) ); } /** * {@inheritdoc} */ public function getFormId() { return 'alert_revision_revert_confirm' ; } /** * {@inheritdoc} */ public function getQuestion() { return $this ->t( 'Are you sure you want to revert to the revision from %revision-date?' , [ '%revision-date' => $this ->dateFormatter->format( $this ->revision->getRevisionCreationTime())]); } /** * {@inheritdoc} */ public function getCancelUrl() { return new Url( 'entity.alert.version_history' , [ 'alert' => $this ->revision->id()]); } /** * {@inheritdoc} */ public function getConfirmText() { return $this ->t( 'Revert' ); } /** * {@inheritdoc} */ public function getDescription() { return '' ; } /** * {@inheritdoc} */ public function buildForm( array $form , FormStateInterface $form_state , $alert_revision = NULL) { $this ->revision = $this ->AlertStorage->loadRevision( $alert_revision ); $form = parent::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->save(); $this ->logger( 'content' )->notice( 'Alert: reverted %title revision %revision.' , [ '%title' => $this ->revision->label(), '%revision' => $this ->revision->getRevisionId()]); \Drupal::messenger()->addStatus(t( 'Alert %title has been reverted to the revision from %revision-date.' , [ '%title' => $this ->revision->label(), '%revision-date' => $this ->dateFormatter->format( $original_revision_timestamp )])); $form_state ->setRedirect( 'entity.alert.version_history' , [ 'alert' => $this ->revision->id()] ); } /** * Prepares a revision to be reverted. * * @param \Drupal\alert_types\Entity\AlertInterface $revision * The revision to be reverted. * @param \Drupal\Core\Form\FormStateInterface $form_state * The current state of the form. * * @return \Drupal\alert_types\Entity\AlertInterface * The prepared revision ready to be stored. */ protected function prepareRevertedRevision(AlertInterface $revision , FormStateInterface $form_state ) { $revision ->setNewRevision(); $revision ->isDefaultRevision(TRUE); $revision ->setRevisionCreationTime( $this ->time->getRequestTime()); return $revision ; } } |