summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathaniel Catchpole2016-05-13 10:55:30 (GMT)
committerNathaniel Catchpole2016-05-13 10:55:30 (GMT)
commit934a4b402d0ef9a2c5fcdb2117f2cd979f99eeb0 (patch)
tree4d636f7315039de403c4580ee9ae8550510e3312
parent3a7e8290a1978ba44ff6d8f2f80ba5927b15fa67 (diff)
Issue #2713587 by tduong, mkalkbrenner, Berdir, Gábor Hojtsy: NodeController::revisionOverview() shows no revisions if node has no translation for current language
-rw-r--r--core/modules/node/src/Controller/NodeController.php7
-rw-r--r--core/modules/node/src/Tests/NodeRevisionsTest.php57
2 files changed, 61 insertions, 3 deletions
diff --git a/core/modules/node/src/Controller/NodeController.php b/core/modules/node/src/Controller/NodeController.php
index d555efd..8fd04b6 100644
--- a/core/modules/node/src/Controller/NodeController.php
+++ b/core/modules/node/src/Controller/NodeController.php
@@ -6,7 +6,6 @@ use Drupal\Component\Utility\Xss;
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 @@ class NodeController extends ControllerBase implements ContainerInjectionInterfa
*/
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 @@ class NodeController extends ControllerBase implements ContainerInjectionInterfa
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 a441c24..40f2a40 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 @@ class NodeRevisionsTest extends NodeTestBase {
'edit any page content',
'delete any page content',
'translate any entity',
+ 'administer content types',
)
);
@@ -211,6 +214,60 @@ class NodeRevisionsTest extends NodeTestBase {
->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)');
}
/**