Version 1
[yaffs-website] / web / core / modules / node / src / Form / NodeRevisionRevertTranslationForm.php
1 <?php
2
3 namespace Drupal\node\Form;
4
5 use Drupal\Core\Datetime\DateFormatterInterface;
6 use Drupal\Core\Entity\EntityStorageInterface;
7 use Drupal\Core\Form\FormStateInterface;
8 use Drupal\Core\Language\LanguageManagerInterface;
9 use Drupal\node\NodeInterface;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
11
12 /**
13  * Provides a form for reverting a node revision for a single translation.
14  */
15 class NodeRevisionRevertTranslationForm extends NodeRevisionRevertForm {
16
17   /**
18    * The language to be reverted.
19    *
20    * @var string
21    */
22   protected $langcode;
23
24   /**
25    * The language manager.
26    *
27    * @var \Drupal\Core\Language\LanguageManagerInterface
28    */
29   protected $languageManager;
30
31   /**
32    * Constructs a new NodeRevisionRevertTranslationForm.
33    *
34    * @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
35    *   The node storage.
36    * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
37    *   The date formatter service.
38    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
39    *   The language manager.
40    */
41   public function __construct(EntityStorageInterface $node_storage, DateFormatterInterface $date_formatter, LanguageManagerInterface $language_manager) {
42     parent::__construct($node_storage, $date_formatter);
43     $this->languageManager = $language_manager;
44   }
45
46   /**
47    * {@inheritdoc}
48    */
49   public static function create(ContainerInterface $container) {
50     return new static(
51       $container->get('entity.manager')->getStorage('node'),
52       $container->get('date.formatter'),
53       $container->get('language_manager')
54     );
55   }
56
57   /**
58    * {@inheritdoc}
59    */
60   public function getFormId() {
61     return 'node_revision_revert_translation_confirm';
62   }
63
64   /**
65    * {@inheritdoc}
66    */
67   public function getQuestion() {
68     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())]);
69   }
70
71   /**
72    * {@inheritdoc}
73    */
74   public function getDescription() {
75     return '';
76   }
77
78   /**
79    * {@inheritdoc}
80    */
81   public function buildForm(array $form, FormStateInterface $form_state, $node_revision = NULL, $langcode = NULL) {
82     $this->langcode = $langcode;
83     $form = parent::buildForm($form, $form_state, $node_revision);
84
85     $form['revert_untranslated_fields'] = [
86       '#type' => 'checkbox',
87       '#title' => $this->t('Revert content shared among translations'),
88       '#default_value' => FALSE,
89     ];
90
91     return $form;
92   }
93
94   /**
95    * {@inheritdoc}
96    */
97   protected function prepareRevertedRevision(NodeInterface $revision, FormStateInterface $form_state) {
98     $revert_untranslated_fields = $form_state->getValue('revert_untranslated_fields');
99
100     /** @var \Drupal\node\NodeInterface $default_revision */
101     $latest_revision = $this->nodeStorage->load($revision->id());
102     $latest_revision_translation = $latest_revision->getTranslation($this->langcode);
103
104     $revision_translation = $revision->getTranslation($this->langcode);
105
106     foreach ($latest_revision_translation->getFieldDefinitions() as $field_name => $definition) {
107       if ($definition->isTranslatable() || $revert_untranslated_fields) {
108         $latest_revision_translation->set($field_name, $revision_translation->get($field_name)->getValue());
109       }
110     }
111
112     $latest_revision_translation->setNewRevision();
113     $latest_revision_translation->isDefaultRevision(TRUE);
114
115     return $latest_revision_translation;
116   }
117
118 }