2018-04-29 11:58:46 +00:00
< ? php
2021-02-18 12:02:25 +00:00
namespace Drupal\opencase_cases\Form ;
2018-04-29 11:58:46 +00:00
use Drupal\Core\Datetime\DateFormatterInterface ;
use Drupal\Core\Entity\EntityStorageInterface ;
use Drupal\Core\Form\ConfirmFormBase ;
use Drupal\Core\Form\FormStateInterface ;
use Drupal\Core\Url ;
2021-02-18 12:02:25 +00:00
use Drupal\opencase_cases\Entity\OCCaseInterface ;
2018-04-29 11:58:46 +00:00
use Symfony\Component\DependencyInjection\ContainerInterface ;
/**
* Provides a form for reverting a Case revision .
*
2021-02-18 12:02:25 +00:00
* @ ingroup opencase_cases
2018-04-29 11:58:46 +00:00
*/
class OCCaseRevisionRevertForm extends ConfirmFormBase {
/**
* The Case revision .
*
2021-02-18 12:02:25 +00:00
* @ var \Drupal\opencase_cases\Entity\OCCaseInterface
2018-04-29 11:58:46 +00:00
*/
protected $revision ;
/**
* The Case storage .
*
* @ var \Drupal\Core\Entity\EntityStorageInterface
*/
protected $OCCaseStorage ;
/**
* The date formatter service .
*
* @ var \Drupal\Core\Datetime\DateFormatterInterface
*/
protected $dateFormatter ;
/**
* Constructs a new OCCaseRevisionRevertForm .
*
* @ param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
* The Case storage .
* @ param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
* The date formatter service .
*/
public function __construct ( EntityStorageInterface $entity_storage , DateFormatterInterface $date_formatter ) {
$this -> OCCaseStorage = $entity_storage ;
$this -> dateFormatter = $date_formatter ;
}
/**
* { @ inheritdoc }
*/
public static function create ( ContainerInterface $container ) {
return new static (
$container -> get ( 'entity.manager' ) -> getStorage ( 'oc_case' ),
$container -> get ( 'date.formatter' )
);
}
/**
* { @ inheritdoc }
*/
public function getFormId () {
return 'oc_case_revision_revert_confirm' ;
}
/**
* { @ inheritdoc }
*/
public function getQuestion () {
return 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.oc_case.version_history' , [ 'oc_case' => $this -> revision -> id ()]);
}
/**
* { @ inheritdoc }
*/
public function getConfirmText () {
return t ( 'Revert' );
}
/**
* { @ inheritdoc }
*/
public function getDescription () {
return '' ;
}
/**
* { @ inheritdoc }
*/
public function buildForm ( array $form , FormStateInterface $form_state , $oc_case_revision = NULL ) {
$this -> revision = $this -> OCCaseStorage -> loadRevision ( $oc_case_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 = t ( 'Copy of the revision from %date.' , [ '%date' => $this -> dateFormatter -> format ( $original_revision_timestamp )]);
$this -> revision -> save ();
$this -> logger ( 'content' ) -> notice ( 'Case: reverted %title revision %revision.' , [ '%title' => $this -> revision -> label (), '%revision' => $this -> revision -> getRevisionId ()]);
2021-11-27 15:19:16 +00:00
\Drupal :: messenger () -> addMessage ( t ( 'Case %title has been reverted to the revision from %revision-date.' , [ '%title' => $this -> revision -> label (), '%revision-date' => $this -> dateFormatter -> format ( $original_revision_timestamp )]));
2018-04-29 11:58:46 +00:00
$form_state -> setRedirect (
'entity.oc_case.version_history' ,
[ 'oc_case' => $this -> revision -> id ()]
);
}
/**
* Prepares a revision to be reverted .
*
2021-02-18 12:02:25 +00:00
* @ param \Drupal\opencase_cases\Entity\OCCaseInterface $revision
2018-04-29 11:58:46 +00:00
* The revision to be reverted .
* @ param \Drupal\Core\Form\FormStateInterface $form_state
* The current state of the form .
*
2021-02-18 12:02:25 +00:00
* @ return \Drupal\opencase_cases\Entity\OCCaseInterface
2018-04-29 11:58:46 +00:00
* The prepared revision ready to be stored .
*/
protected function prepareRevertedRevision ( OCCaseInterface $revision , FormStateInterface $form_state ) {
$revision -> setNewRevision ();
$revision -> isDefaultRevision ( TRUE );
$revision -> setRevisionCreationTime ( REQUEST_TIME );
return $revision ;
}
}