HeartbeatRevisionRevertTranslationForm.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace Drupal\heartbeat8\Form;
  3. use Drupal\Core\Datetime\DateFormatterInterface;
  4. use Drupal\Core\Entity\EntityStorageInterface;
  5. use Drupal\Core\Form\FormStateInterface;
  6. use Drupal\Core\Language\LanguageManagerInterface;
  7. use Drupal\heartbeat8\Entity\HeartbeatInterface;
  8. use Symfony\Component\DependencyInjection\ContainerInterface;
  9. /**
  10. * Provides a form for reverting a Heartbeat revision for a single translation.
  11. *
  12. * @ingroup heartbeat8
  13. */
  14. class HeartbeatRevisionRevertTranslationForm extends HeartbeatRevisionRevertForm {
  15. /**
  16. * The language to be reverted.
  17. *
  18. * @var string
  19. */
  20. protected $langcode;
  21. /**
  22. * The language manager.
  23. *
  24. * @var \Drupal\Core\Language\LanguageManagerInterface
  25. */
  26. protected $languageManager;
  27. /**
  28. * Constructs a new HeartbeatRevisionRevertTranslationForm.
  29. *
  30. * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
  31. * The Heartbeat storage.
  32. * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
  33. * The date formatter service.
  34. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
  35. * The language manager.
  36. */
  37. public function __construct(EntityStorageInterface $entity_storage, DateFormatterInterface $date_formatter, LanguageManagerInterface $language_manager) {
  38. parent::__construct($entity_storage, $date_formatter);
  39. $this->languageManager = $language_manager;
  40. }
  41. /**
  42. * {@inheritdoc}
  43. */
  44. public static function create(ContainerInterface $container) {
  45. return new static(
  46. $container->get('entity.manager')->getStorage('heartbeat'),
  47. $container->get('date.formatter'),
  48. $container->get('language_manager')
  49. );
  50. }
  51. /**
  52. * {@inheritdoc}
  53. */
  54. public function getFormId() {
  55. return 'heartbeat_revision_revert_translation_confirm';
  56. }
  57. /**
  58. * {@inheritdoc}
  59. */
  60. public function getQuestion() {
  61. return t('Are you sure you want to revert @language translation to the revision from %revision-date?', ['@language' => $this->languageManager->getLanguageName($this->langcode), '%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime())]);
  62. }
  63. /**
  64. * {@inheritdoc}
  65. */
  66. public function buildForm(array $form, FormStateInterface $form_state, $heartbeat_revision = NULL, $langcode = NULL) {
  67. $this->langcode = $langcode;
  68. $form = parent::buildForm($form, $form_state, $heartbeat_revision);
  69. $form['revert_untranslated_fields'] = array(
  70. '#type' => 'checkbox',
  71. '#title' => $this->t('Revert content shared among translations'),
  72. '#default_value' => FALSE,
  73. );
  74. return $form;
  75. }
  76. /**
  77. * {@inheritdoc}
  78. */
  79. protected function prepareRevertedRevision(HeartbeatInterface $revision, FormStateInterface $form_state) {
  80. $revert_untranslated_fields = $form_state->getValue('revert_untranslated_fields');
  81. /** @var \Drupal\heartbeat8\Entity\HeartbeatInterface $default_revision */
  82. $latest_revision = $this->HeartbeatStorage->load($revision->id());
  83. $latest_revision_translation = $latest_revision->getTranslation($this->langcode);
  84. $revision_translation = $revision->getTranslation($this->langcode);
  85. foreach ($latest_revision_translation->getFieldDefinitions() as $field_name => $definition) {
  86. if ($definition->isTranslatable() || $revert_untranslated_fields) {
  87. $latest_revision_translation->set($field_name, $revision_translation->get($field_name)->getValue());
  88. }
  89. }
  90. $latest_revision_translation->setNewRevision();
  91. $latest_revision_translation->isDefaultRevision(TRUE);
  92. $revision->setRevisionCreationTime(REQUEST_TIME);
  93. return $latest_revision_translation;
  94. }
  95. }