Commit 28c317d4 authored by Sascha Grossenbacher's avatar Sascha Grossenbacher Committed by Damien McKenna
Browse files

Issue #3108052 by Berdir, SpadXIII: metatag_get_default_tags() does not revert...

Issue #3108052 by Berdir, SpadXIII: metatag_get_default_tags() does not revert config override language.
parent b1147b9a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ Metatag 8.x-1.x-dev, xxxx-xx-xx
#3170298 by thejimbirch: Provide link to Facebook Open Graph debugger.
#3136470 by novchuk.v: Replace assertEqual()/assertSame() with count() with
  assertCount().
#3108052 by Berdir, SpadXIII: metatag_get_default_tags() does not revert config
  override language.


Metatag 8.x-1.14, 2020-08-11
+10 −1
Original line number Diff line number Diff line
@@ -509,15 +509,20 @@ function metatag_get_default_tags($entity = NULL) {
  $metatag_manager = \Drupal::service('metatag.manager');

  // Load config based on language.
  $current_language = NULL;
  if ($entity !== NULL) {
    /** @var \Drupal\Core\Language\LanguageManagerInterface $language_manager */
    $language_manager = \Drupal::languageManager();
    $current_language = $language_manager->getConfigOverrideLanguage();
    $language_manager->setConfigOverrideLanguage($entity->language());
  }

  // First we load global defaults.
  $metatags = $metatag_manager->getGlobalMetatags();
  if (!$metatags) {
    if ($current_language) {
      $language_manager->setConfigOverrideLanguage($current_language);
    }
    return NULL;
  }

@@ -551,7 +556,11 @@ function metatag_get_default_tags($entity = NULL) {
    }
  }

  return $metatags->get('tags');
  $tags = $metatags->get('tags');
  if ($current_language) {
    $language_manager->setConfigOverrideLanguage($current_language);
  }
  return $tags;
}

/**
+29 −10
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

namespace Drupal\Tests\metatag\Functional;

use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\metatag\Entity\MetatagDefaults;
use Drupal\Tests\BrowserTestBase;
use Drupal\Core\StringTranslation\StringTranslationTrait;

@@ -37,6 +39,7 @@ class MetatagConfigTranslationTest extends BrowserTestBase {
    'metatag',
    'language',
    'config_translation',
    'node',
  ];

  /**
@@ -72,16 +75,7 @@ class MetatagConfigTranslationTest extends BrowserTestBase {
    $this->drupalLogin($this->adminUser);

    // Enable the French language.
    $this->drupalGet('admin/config/regional/language/add');
    $this->assertSession()->statusCodeEquals(200);
    $edit = [
      'predefined_langcode' => 'fr',
    ];
    $this->drupalPostForm(NULL, $edit, $this->t('Add language'));
    $this->assertRaw($this->t(
      'The language %language has been created and can now be used.',
      ['%language' => $this->t('French')]
    ));
    ConfigurableLanguage::createFromLangcode('fr')->save();
  }

  /**
@@ -163,6 +157,31 @@ class MetatagConfigTranslationTest extends BrowserTestBase {
    $this->drupalPostForm(NULL, $edit, $this->t('Save translation'));
    $this->assertSession()->statusCodeEquals(200);
    $this->assertText($this->t('Successfully saved French translation'));

    // Delete the node metatag defaults to simplify the test.
    MetatagDefaults::load('node')->delete();

    // Create a node in french, request default tags for it. Ensure that the
    // config translation language is afterwards still/again set to EN and
    // tags are returned in FR.
    $this->drupalCreateContentType(['type' => 'page']);
    $node = $this->drupalCreateNode([
      'title' => 'Metatag Test FR',
      'langcode' => 'fr',
    ]);

    $language_manager = \Drupal::languageManager();
    $this->assertEquals('en', $language_manager->getConfigOverrideLanguage()->getId());
    $fr_default_tags = metatag_get_default_tags($node);
    $this->assertEquals('Le title', $fr_default_tags['title']);
    $this->assertEquals('Le description', $fr_default_tags['description']);
    $this->assertEquals('en', $language_manager->getConfigOverrideLanguage()->getId());

    // Delete the default tags as well to test the early return.
    MetatagDefaults::load('global')->delete();
    $fr_default_tags = metatag_get_default_tags($node);
    $this->assertNull($fr_default_tags);
    $this->assertEquals('en', $language_manager->getConfigOverrideLanguage()->getId());
  }

}