Commit 934a4b40 authored by catch's avatar catch

Issue #2713587 by tduong, mkalkbrenner, Berdir, Gábor Hojtsy:...

Issue #2713587 by tduong, mkalkbrenner, Berdir, Gábor Hojtsy: NodeController::revisionOverview() shows no revisions if node has no translation for current language
parent 3a7e8290
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Datetime\DateFormatterInterface; use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface; use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Render\RendererInterface; use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Url; use Drupal\Core\Url;
use Drupal\node\NodeTypeInterface; use Drupal\node\NodeTypeInterface;
...@@ -157,8 +156,8 @@ public function revisionPageTitle($node_revision) { ...@@ -157,8 +156,8 @@ public function revisionPageTitle($node_revision) {
*/ */
public function revisionOverview(NodeInterface $node) { public function revisionOverview(NodeInterface $node) {
$account = $this->currentUser(); $account = $this->currentUser();
$langcode = $this->languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); $langcode = $node->language()->getId();
$langname = $this->languageManager()->getLanguageName($langcode); $langname = $node->language()->getName();
$languages = $node->getTranslationLanguages(); $languages = $node->getTranslationLanguages();
$has_translations = (count($languages) > 1); $has_translations = (count($languages) > 1);
$node_storage = $this->entityManager()->getStorage('node'); $node_storage = $this->entityManager()->getStorage('node');
...@@ -179,6 +178,8 @@ public function revisionOverview(NodeInterface $node) { ...@@ -179,6 +178,8 @@ public function revisionOverview(NodeInterface $node) {
foreach (array_reverse($vids) as $vid) { foreach (array_reverse($vids) as $vid) {
/** @var \Drupal\node\NodeInterface $revision */ /** @var \Drupal\node\NodeInterface $revision */
$revision = $node_storage->loadRevision($vid); $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()) { if ($revision->hasTranslation($langcode) && $revision->getTranslation($langcode)->isRevisionTranslationAffected()) {
$username = [ $username = [
'#theme' => 'username', '#theme' => 'username',
......
...@@ -42,6 +42,8 @@ class NodeRevisionsTest extends NodeTestBase { ...@@ -42,6 +42,8 @@ class NodeRevisionsTest extends NodeTestBase {
protected function setUp() { protected function setUp() {
parent::setUp(); parent::setUp();
// Enable additional languages.
ConfigurableLanguage::createFromLangcode('de')->save();
ConfigurableLanguage::createFromLangcode('it')->save(); ConfigurableLanguage::createFromLangcode('it')->save();
$field_storage_definition = array( $field_storage_definition = array(
...@@ -70,6 +72,7 @@ protected function setUp() { ...@@ -70,6 +72,7 @@ protected function setUp() {
'edit any page content', 'edit any page content',
'delete any page content', 'delete any page content',
'translate any entity', 'translate any entity',
'administer content types',
) )
); );
...@@ -211,6 +214,60 @@ function testRevisions() { ...@@ -211,6 +214,60 @@ function testRevisions() {
->fetchCol(); ->fetchCol();
$default_revision_vid = $default_revision[0]; $default_revision_vid = $default_revision[0];
$this->assertTrue($new_node_revision->getRevisionId() > $default_revision_vid, 'Revision vid is greater than default revision vid.'); $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)');
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment