3 namespace Drupal\node\Form;
5 use Drupal\Component\Datetime\TimeInterface;
6 use Drupal\Core\Datetime\DateFormatterInterface;
7 use Drupal\Core\Entity\EntityStorageInterface;
8 use Drupal\Core\Form\FormStateInterface;
9 use Drupal\Core\Language\LanguageManagerInterface;
10 use Drupal\node\NodeInterface;
11 use Symfony\Component\DependencyInjection\ContainerInterface;
14 * Provides a form for reverting a node revision for a single translation.
16 class NodeRevisionRevertTranslationForm extends NodeRevisionRevertForm {
19 * The language to be reverted.
26 * The language manager.
28 * @var \Drupal\Core\Language\LanguageManagerInterface
30 protected $languageManager;
33 * Constructs a new NodeRevisionRevertTranslationForm.
35 * @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
37 * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
38 * The date formatter service.
39 * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
40 * The language manager.
41 * @param \Drupal\Component\Datetime\TimeInterface $time
44 public function __construct(EntityStorageInterface $node_storage, DateFormatterInterface $date_formatter, LanguageManagerInterface $language_manager, TimeInterface $time) {
45 parent::__construct($node_storage, $date_formatter, $time);
46 $this->languageManager = $language_manager;
52 public static function create(ContainerInterface $container) {
54 $container->get('entity.manager')->getStorage('node'),
55 $container->get('date.formatter'),
56 $container->get('language_manager'),
57 $container->get('datetime.time')
64 public function getFormId() {
65 return 'node_revision_revert_translation_confirm';
71 public function getQuestion() {
72 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())]);
78 public function getDescription() {
85 public function buildForm(array $form, FormStateInterface $form_state, $node_revision = NULL, $langcode = NULL) {
86 $this->langcode = $langcode;
87 $form = parent::buildForm($form, $form_state, $node_revision);
89 $form['revert_untranslated_fields'] = [
90 '#type' => 'checkbox',
91 '#title' => $this->t('Revert content shared among translations'),
92 '#default_value' => FALSE,
101 protected function prepareRevertedRevision(NodeInterface $revision, FormStateInterface $form_state) {
102 $revert_untranslated_fields = $form_state->getValue('revert_untranslated_fields');
104 /** @var \Drupal\node\NodeInterface $default_revision */
105 $latest_revision = $this->nodeStorage->load($revision->id());
106 $latest_revision_translation = $latest_revision->getTranslation($this->langcode);
108 $revision_translation = $revision->getTranslation($this->langcode);
110 foreach ($latest_revision_translation->getFieldDefinitions() as $field_name => $definition) {
111 if ($definition->isTranslatable() || $revert_untranslated_fields) {
112 $latest_revision_translation->set($field_name, $revision_translation->get($field_name)->getValue());
116 $latest_revision_translation->setNewRevision();
117 $latest_revision_translation->isDefaultRevision(TRUE);
119 return $latest_revision_translation;