diff --git a/core/modules/node/src/Controller/NodeController.php b/core/modules/node/src/Controller/NodeController.php index d555efd1c0eb475e3ef6077119816764e23d094d..8fd04b6959f3e83076e28fbda463ffcf86a3bf4c 100644 --- a/core/modules/node/src/Controller/NodeController.php +++ b/core/modules/node/src/Controller/NodeController.php @@ -6,7 +6,6 @@ use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Datetime\DateFormatterInterface; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; -use Drupal\Core\Language\LanguageInterface; use Drupal\Core\Render\RendererInterface; use Drupal\Core\Url; use Drupal\node\NodeTypeInterface; @@ -157,8 +156,8 @@ public function revisionPageTitle($node_revision) { */ public function revisionOverview(NodeInterface $node) { $account = $this->currentUser(); - $langcode = $this->languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); - $langname = $this->languageManager()->getLanguageName($langcode); + $langcode = $node->language()->getId(); + $langname = $node->language()->getName(); $languages = $node->getTranslationLanguages(); $has_translations = (count($languages) > 1); $node_storage = $this->entityManager()->getStorage('node'); @@ -179,6 +178,8 @@ public function revisionOverview(NodeInterface $node) { foreach (array_reverse($vids) as $vid) { /** @var \Drupal\node\NodeInterface $revision */ $revision = $node_storage->loadRevision($vid); + // Only show revisions that are affected by the language that is being + // displayed. if ($revision->hasTranslation($langcode) && $revision->getTranslation($langcode)->isRevisionTranslationAffected()) { $username = [ '#theme' => 'username', diff --git a/core/modules/node/src/Tests/NodeRevisionsTest.php b/core/modules/node/src/Tests/NodeRevisionsTest.php index a441c2416fb0cf15c4805fef699819ecddd5396c..40f2a40290dfe581573a40d8b5b2136609986de3 100644 --- a/core/modules/node/src/Tests/NodeRevisionsTest.php +++ b/core/modules/node/src/Tests/NodeRevisionsTest.php @@ -42,6 +42,8 @@ class NodeRevisionsTest extends NodeTestBase { protected function setUp() { parent::setUp(); + // Enable additional languages. + ConfigurableLanguage::createFromLangcode('de')->save(); ConfigurableLanguage::createFromLangcode('it')->save(); $field_storage_definition = array( @@ -70,6 +72,7 @@ protected function setUp() { 'edit any page content', 'delete any page content', 'translate any entity', + 'administer content types', ) ); @@ -211,6 +214,60 @@ function testRevisions() { ->fetchCol(); $default_revision_vid = $default_revision[0]; $this->assertTrue($new_node_revision->getRevisionId() > $default_revision_vid, 'Revision vid is greater than default revision vid.'); + + // Create an 'EN' node with a revision log message. + $node = $this->drupalCreateNode(); + $node->title = 'Node title in EN'; + $node->revision_log = 'Simple revision message (EN)'; + $node->save(); + + $this->drupalGet("node/" . $node->id() . "/revisions"); + $this->assertResponse(403); + + // Create a new revision and new log message. + $node = Node::load($node->id()); + $node->body->value = 'New text (EN)'; + $node->revision_log = 'New revision message (EN)'; + $node->setNewRevision(); + $node->save(); + + // Check both revisions are shown on the node revisions overview page. + $this->drupalGet("node/" . $node->id() . "/revisions"); + $this->assertText('Simple revision message (EN)'); + $this->assertText('New revision message (EN)'); + + // Create an 'EN' node with a revision log message. + $node = $this->drupalCreateNode(); + $node->langcode = 'en'; + $node->title = 'Node title in EN'; + $node->revision_log = 'Simple revision message (EN)'; + $node->save(); + + $this->drupalGet("node/" . $node->id() . "/revisions"); + $this->assertResponse(403); + + // Add a translation in 'DE' and create a new revision and new log message. + $translation = $node->addTranslation('de'); + $translation->title->value = 'Node title in DE'; + $translation->body->value = 'New text (DE)'; + $translation->revision_log = 'New revision message (DE)'; + $translation->setNewRevision(); + $translation->save(); + + // View the revision UI in 'IT', only the original node revision is shown. + $this->drupalGet("it/node/" . $node->id() . "/revisions"); + $this->assertText('Simple revision message (EN)'); + $this->assertNoText('New revision message (DE)'); + + // View the revision UI in 'DE', only the translated node revision is shown. + $this->drupalGet("de/node/" . $node->id() . "/revisions"); + $this->assertNoText('Simple revision message (EN)'); + $this->assertText('New revision message (DE)'); + + // View the revision UI in 'EN', only the original node revision is shown. + $this->drupalGet("node/" . $node->id() . "/revisions"); + $this->assertText('Simple revision message (EN)'); + $this->assertNoText('New revision message (DE)'); } /**