1 {% extends "base/class.php.twig" %}
4 \Drupal\{{module}}\Form\{{ entity_class }}RevisionRevertTranslationForm.
7 {% block namespace_class %}
8 namespace Drupal\{{module}}\Form;
12 use Drupal\Core\Datetime\DateFormatterInterface;
13 use Drupal\Core\Entity\EntityStorageInterface;
14 use Drupal\Core\Form\FormStateInterface;
15 use Drupal\Core\Language\LanguageManagerInterface;
16 use Drupal\{{module}}\Entity\{{ entity_class }}Interface;
17 use Symfony\Component\DependencyInjection\ContainerInterface;
20 {% block class_declaration %}
22 * Provides a form for reverting a {{ label }} revision for a single translation.
26 class {{ entity_class }}RevisionRevertTranslationForm extends {{ entity_class }}RevisionRevertForm {% endblock %}
27 {% block class_methods %}
30 * The language to be reverted.
37 * The language manager.
39 * @var \Drupal\Core\Language\LanguageManagerInterface
41 protected $languageManager;
44 * Constructs a new {{ entity_class }}RevisionRevertTranslationForm.
46 * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
47 * The {{ label }} storage.
48 * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
49 * The date formatter service.
50 * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
51 * The language manager.
53 public function __construct(EntityStorageInterface $entity_storage, DateFormatterInterface $date_formatter, LanguageManagerInterface $language_manager) {
54 parent::__construct($entity_storage, $date_formatter);
55 $this->languageManager = $language_manager;
61 public static function create(ContainerInterface $container) {
63 $container->get('entity.manager')->getStorage('{{ entity_name }}'),
64 $container->get('date.formatter'),
65 $container->get('language_manager')
72 public function getFormId() {
73 return '{{ entity_name }}_revision_revert_translation_confirm';
79 public function getQuestion() {
80 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())]);
86 public function buildForm(array $form, FormStateInterface $form_state, ${{ entity_name }}_revision = NULL, $langcode = NULL) {
87 $this->langcode = $langcode;
88 $form = parent::buildForm($form, $form_state, ${{ entity_name }}_revision);
90 $form['revert_untranslated_fields'] = [
91 '#type' => 'checkbox',
92 '#title' => $this->t('Revert content shared among translations'),
93 '#default_value' => FALSE,
102 protected function prepareRevertedRevision({{ entity_class }}Interface $revision, FormStateInterface $form_state) {
103 $revert_untranslated_fields = $form_state->getValue('revert_untranslated_fields');
105 /** @var \Drupal\{{module}}\Entity\{{ entity_class }}Interface $default_revision */
106 $latest_revision = $this->{{ entity_class }}Storage->load($revision->id());
107 $latest_revision_translation = $latest_revision->getTranslation($this->langcode);
109 $revision_translation = $revision->getTranslation($this->langcode);
111 foreach ($latest_revision_translation->getFieldDefinitions() as $field_name => $definition) {
112 if ($definition->isTranslatable() || $revert_untranslated_fields) {
113 $latest_revision_translation->set($field_name, $revision_translation->get($field_name)->getValue());
117 $latest_revision_translation->setNewRevision();
118 $latest_revision_translation->isDefaultRevision(TRUE);
119 $revision->setRevisionCreationTime(REQUEST_TIME);
121 return $latest_revision_translation;