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.
18 class NodeRevisionRevertTranslationForm extends NodeRevisionRevertForm {
21 * The language to be reverted.
28 * The language manager.
30 * @var \Drupal\Core\Language\LanguageManagerInterface
32 protected $languageManager;
35 * Constructs a new NodeRevisionRevertTranslationForm.
37 * @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
39 * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
40 * The date formatter service.
41 * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
42 * The language manager.
43 * @param \Drupal\Component\Datetime\TimeInterface $time
46 public function __construct(EntityStorageInterface $node_storage, DateFormatterInterface $date_formatter, LanguageManagerInterface $language_manager, TimeInterface $time) {
47 parent::__construct($node_storage, $date_formatter, $time);
48 $this->languageManager = $language_manager;
54 public static function create(ContainerInterface $container) {
56 $container->get('entity.manager')->getStorage('node'),
57 $container->get('date.formatter'),
58 $container->get('language_manager'),
59 $container->get('datetime.time')
66 public function getFormId() {
67 return 'node_revision_revert_translation_confirm';
73 public function getQuestion() {
74 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())]);
80 public function getDescription() {
87 public function buildForm(array $form, FormStateInterface $form_state, $node_revision = NULL, $langcode = NULL) {
88 $this->langcode = $langcode;
89 $form = parent::buildForm($form, $form_state, $node_revision);
91 // Unless untranslatable fields are configured to affect only the default
92 // translation, we need to ask the user whether they should be included in
93 // the revert process.
94 $default_translation_affected = $this->revision->isDefaultTranslationAffectedOnly();
95 $form['revert_untranslated_fields'] = [
96 '#type' => 'checkbox',
97 '#title' => $this->t('Revert content shared among translations'),
98 '#default_value' => $default_translation_affected && $this->revision->getTranslation($this->langcode)->isDefaultTranslation(),
99 '#access' => !$default_translation_affected,
108 protected function prepareRevertedRevision(NodeInterface $revision, FormStateInterface $form_state) {
109 $revert_untranslated_fields = (bool) $form_state->getValue('revert_untranslated_fields');
110 $translation = $revision->getTranslation($this->langcode);
111 return $this->nodeStorage->createRevision($translation, TRUE, $revert_untranslated_fields);