3 namespace Drupal\node\Form;
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;
13 * Provides a form for reverting a node revision for a single translation.
15 class NodeRevisionRevertTranslationForm extends NodeRevisionRevertForm {
18 * The language to be reverted.
25 * The language manager.
27 * @var \Drupal\Core\Language\LanguageManagerInterface
29 protected $languageManager;
32 * Constructs a new NodeRevisionRevertTranslationForm.
34 * @param \Drupal\Core\Entity\EntityStorageInterface $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.
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;
49 public static function create(ContainerInterface $container) {
51 $container->get('entity.manager')->getStorage('node'),
52 $container->get('date.formatter'),
53 $container->get('language_manager')
60 public function getFormId() {
61 return 'node_revision_revert_translation_confirm';
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())]);
74 public function getDescription() {
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);
85 $form['revert_untranslated_fields'] = [
86 '#type' => 'checkbox',
87 '#title' => $this->t('Revert content shared among translations'),
88 '#default_value' => FALSE,
97 protected function prepareRevertedRevision(NodeInterface $revision, FormStateInterface $form_state) {
98 $revert_untranslated_fields = $form_state->getValue('revert_untranslated_fields');
100 /** @var \Drupal\node\NodeInterface $default_revision */
101 $latest_revision = $this->nodeStorage->load($revision->id());
102 $latest_revision_translation = $latest_revision->getTranslation($this->langcode);
104 $revision_translation = $revision->getTranslation($this->langcode);
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());
112 $latest_revision_translation->setNewRevision();
113 $latest_revision_translation->isDefaultRevision(TRUE);
115 return $latest_revision_translation;