From d370ee76fe43ff0fff0226ee5f4cc320adbe0ce6 Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Tue, 7 Mar 2017 17:26:36 +0000 Subject: [PATCH] Issue #2671058 by Jo Fitzgerald, hchonov, tstoeckler, tameeshb, Munavijayalakshmi, pguillard: OverviewTerms doesn't respect the current content language when building the form and term urls and names are generated based on the terms default language --- .../taxonomy/src/Form/OverviewTerms.php | 9 +++++ .../tests/src/Functional/TermLanguageTest.php | 33 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/core/modules/taxonomy/src/Form/OverviewTerms.php b/core/modules/taxonomy/src/Form/OverviewTerms.php index b5014bbe796e..0ccb24b49b98 100644 --- a/core/modules/taxonomy/src/Form/OverviewTerms.php +++ b/core/modules/taxonomy/src/Form/OverviewTerms.php @@ -21,6 +21,13 @@ class OverviewTerms extends FormBase { */ protected $moduleHandler; + /** + * The entity manager. + * + * @var \Drupal\Core\Entity\EntityManagerInterface + */ + protected $entityManager; + /** * The term storage handler. * @@ -38,6 +45,7 @@ class OverviewTerms extends FormBase { */ public function __construct(ModuleHandlerInterface $module_handler, EntityManagerInterface $entity_manager) { $this->moduleHandler = $module_handler; + $this->entityManager = $entity_manager; $this->storageController = $entity_manager->getStorage('taxonomy_term'); } @@ -209,6 +217,7 @@ class OverviewTerms extends FormBase { ]; foreach ($current_page as $key => $term) { /** @var $term \Drupal\Core\Entity\EntityInterface */ + $term = $this->entityManager->getTranslationFromContext($term); $form['terms'][$key]['#term'] = $term; $indentation = []; if (isset($term->depth) && $term->depth > 0) { diff --git a/core/modules/taxonomy/tests/src/Functional/TermLanguageTest.php b/core/modules/taxonomy/tests/src/Functional/TermLanguageTest.php index fb000e99c6a9..f60e77e534a6 100644 --- a/core/modules/taxonomy/tests/src/Functional/TermLanguageTest.php +++ b/core/modules/taxonomy/tests/src/Functional/TermLanguageTest.php @@ -107,4 +107,37 @@ class TermLanguageTest extends TaxonomyTestBase { $this->assertOptionSelected('edit-langcode-0-value', 'cc', "The expected langcode, 'cc', was selected."); } + /** + * Tests that translated terms are displayed correctly on the term overview. + */ + public function testTermTranslatedOnOverviewPage() { + // Configure the vocabulary to not hide the language selector. + $edit = [ + 'default_language[language_alterable]' => TRUE, + ]; + $this->drupalPostForm('admin/structure/taxonomy/manage/' . $this->vocabulary->id(), $edit, t('Save')); + + // Add a term. + $this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary->id() . '/add'); + // Submit the term. + $edit = [ + 'name[0][value]' => $this->randomMachineName(), + 'langcode[0][value]' => 'aa', + ]; + $this->drupalPostForm(NULL, $edit, t('Save')); + $terms = taxonomy_term_load_multiple_by_name($edit['name[0][value]']); + $term = reset($terms); + + // Add a translation for that term. + $translated_title = $this->randomMachineName(); + $term->addTranslation('bb', [ + 'name' => $translated_title, + ]); + $term->save(); + + // Overview page in the other language shows the translated term + $this->drupalGet('bb/admin/structure/taxonomy/manage/' . $this->vocabulary->id() . '/overview'); + $this->assertPattern('|]*>' . $translated_title . '|', 'The term language is correct'); + } + }