2020-11-12 17:13:28 +00:00
< ? php
namespace Drupal\opencase_entities\Form ;
use Drupal\Core\Form\ConfirmFormBase ;
use Drupal\Core\Form\FormStateInterface ;
use Drupal\Core\Url ;
use Drupal\opencase_entities\Entity\OCOrganisationInterface ;
use Symfony\Component\DependencyInjection\ContainerInterface ;
/**
* Provides a form for reverting a Organisation revision .
*
* @ ingroup opencase_entities
*/
class OCOrganisationRevisionRevertForm extends ConfirmFormBase {
/**
* The Organisation revision .
*
* @ var \Drupal\opencase_entities\Entity\OCOrganisationInterface
*/
protected $revision ;
/**
* The Organisation storage .
*
* @ var \Drupal\Core\Entity\EntityStorageInterface
*/
protected $oCOrganisationStorage ;
/**
* The date formatter service .
*
* @ var \Drupal\Core\Datetime\DateFormatterInterface
*/
protected $dateFormatter ;
/**
* { @ inheritdoc }
*/
public static function create ( ContainerInterface $container ) {
$instance = parent :: create ( $container );
2022-05-27 08:34:37 +00:00
$instance -> OCOrganisationStorage = $container -> get ( 'entity_type.manager' ) -> getStorage ( 'oc_organisation' );
2020-11-12 17:13:28 +00:00
$instance -> dateFormatter = $container -> get ( 'date.formatter' );
return $instance ;
}
/**
* { @ inheritdoc }
2022-05-27 08:34:37 +00:00
*/
2020-11-12 17:13:28 +00:00
public function getFormId () {
return 'oc_organisation_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.oc_organisation.version_history' , [ 'oc_organisation' => $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 , $oc_organisation_revision = NULL ) {
$this -> revision = $this -> OCOrganisationStorage -> loadRevision ( $oc_organisation_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 ( 'Organisation: reverted %title revision %revision.' , [ '%title' => $this -> revision -> label (), '%revision' => $this -> revision -> getRevisionId ()]);
$this -> messenger () -> addMessage ( t ( 'Organisation %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.oc_organisation.version_history' ,
[ 'oc_organisation' => $this -> revision -> id ()]
);
}
/**
* Prepares a revision to be reverted .
*
* @ param \Drupal\opencase_entities\Entity\OCOrganisationInterface $revision
* The revision to be reverted .
* @ param \Drupal\Core\Form\FormStateInterface $form_state
* The current state of the form .
*
* @ return \Drupal\opencase_entities\Entity\OCOrganisationInterface
* The prepared revision ready to be stored .
*/
protected function prepareRevertedRevision ( OCOrganisationInterface $revision , FormStateInterface $form_state ) {
$revision -> setNewRevision ();
$revision -> isDefaultRevision ( TRUE );
$revision -> setRevisionCreationTime ( REQUEST_TIME );
return $revision ;
}
}