d5da697abeb860677014ec6b906da54fbd54eeff
[yaffs-website] / web / core / modules / node / src / Form / NodeRevisionRevertTranslationForm.php
1 <?php
2
3 namespace Drupal\node\Form;
4
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;
12
13 /**
14  * Provides a form for reverting a node revision for a single translation.
15  */
16 class NodeRevisionRevertTranslationForm extends NodeRevisionRevertForm {
17
18   /**
19    * The language to be reverted.
20    *
21    * @var string
22    */
23   protected $langcode;
24
25   /**
26    * The language manager.
27    *
28    * @var \Drupal\Core\Language\LanguageManagerInterface
29    */
30   protected $languageManager;
31
32   /**
33    * Constructs a new NodeRevisionRevertTranslationForm.
34    *
35    * @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
36    *   The 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
42    *   The time service.
43    */
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;
47   }
48
49   /**
50    * {@inheritdoc}
51    */
52   public static function create(ContainerInterface $container) {
53     return new static(
54       $container->get('entity.manager')->getStorage('node'),
55       $container->get('date.formatter'),
56       $container->get('language_manager'),
57       $container->get('datetime.time')
58     );
59   }
60
61   /**
62    * {@inheritdoc}
63    */
64   public function getFormId() {
65     return 'node_revision_revert_translation_confirm';
66   }
67
68   /**
69    * {@inheritdoc}
70    */
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())]);
73   }
74
75   /**
76    * {@inheritdoc}
77    */
78   public function getDescription() {
79     return '';
80   }
81
82   /**
83    * {@inheritdoc}
84    */
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);
88
89     $form['revert_untranslated_fields'] = [
90       '#type' => 'checkbox',
91       '#title' => $this->t('Revert content shared among translations'),
92       '#default_value' => FALSE,
93     ];
94
95     return $form;
96   }
97
98   /**
99    * {@inheritdoc}
100    */
101   protected function prepareRevertedRevision(NodeInterface $revision, FormStateInterface $form_state) {
102     $revert_untranslated_fields = $form_state->getValue('revert_untranslated_fields');
103
104     /** @var \Drupal\node\NodeInterface $default_revision */
105     $latest_revision = $this->nodeStorage->load($revision->id());
106     $latest_revision_translation = $latest_revision->getTranslation($this->langcode);
107
108     $revision_translation = $revision->getTranslation($this->langcode);
109
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());
113       }
114     }
115
116     $latest_revision_translation->setNewRevision();
117     $latest_revision_translation->isDefaultRevision(TRUE);
118
119     return $latest_revision_translation;
120   }
121
122 }