X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fnode%2Fsrc%2FForm%2FNodeRevisionRevertTranslationForm.php;fp=web%2Fcore%2Fmodules%2Fnode%2Fsrc%2FForm%2FNodeRevisionRevertTranslationForm.php;h=a6a4d85d8af55088f31b8e655e84e1cea819d3ec;hp=d5da697abeb860677014ec6b906da54fbd54eeff;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0 diff --git a/web/core/modules/node/src/Form/NodeRevisionRevertTranslationForm.php b/web/core/modules/node/src/Form/NodeRevisionRevertTranslationForm.php index d5da697ab..a6a4d85d8 100644 --- a/web/core/modules/node/src/Form/NodeRevisionRevertTranslationForm.php +++ b/web/core/modules/node/src/Form/NodeRevisionRevertTranslationForm.php @@ -12,6 +12,8 @@ use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides a form for reverting a node revision for a single translation. + * + * @internal */ class NodeRevisionRevertTranslationForm extends NodeRevisionRevertForm { @@ -86,10 +88,15 @@ class NodeRevisionRevertTranslationForm extends NodeRevisionRevertForm { $this->langcode = $langcode; $form = parent::buildForm($form, $form_state, $node_revision); + // Unless untranslatable fields are configured to affect only the default + // translation, we need to ask the user whether they should be included in + // the revert process. + $default_translation_affected = $this->revision->isDefaultTranslationAffectedOnly(); $form['revert_untranslated_fields'] = [ '#type' => 'checkbox', '#title' => $this->t('Revert content shared among translations'), - '#default_value' => FALSE, + '#default_value' => $default_translation_affected && $this->revision->getTranslation($this->langcode)->isDefaultTranslation(), + '#access' => !$default_translation_affected, ]; return $form; @@ -99,24 +106,9 @@ class NodeRevisionRevertTranslationForm extends NodeRevisionRevertForm { * {@inheritdoc} */ protected function prepareRevertedRevision(NodeInterface $revision, FormStateInterface $form_state) { - $revert_untranslated_fields = $form_state->getValue('revert_untranslated_fields'); - - /** @var \Drupal\node\NodeInterface $default_revision */ - $latest_revision = $this->nodeStorage->load($revision->id()); - $latest_revision_translation = $latest_revision->getTranslation($this->langcode); - - $revision_translation = $revision->getTranslation($this->langcode); - - foreach ($latest_revision_translation->getFieldDefinitions() as $field_name => $definition) { - if ($definition->isTranslatable() || $revert_untranslated_fields) { - $latest_revision_translation->set($field_name, $revision_translation->get($field_name)->getValue()); - } - } - - $latest_revision_translation->setNewRevision(); - $latest_revision_translation->isDefaultRevision(TRUE); - - return $latest_revision_translation; + $revert_untranslated_fields = (bool) $form_state->getValue('revert_untranslated_fields'); + $translation = $revision->getTranslation($this->langcode); + return $this->nodeStorage->createRevision($translation, TRUE, $revert_untranslated_fields); } }