From 7d22bc09e143ecc29fd49cd9623f5cf3c9bc4269 Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Wed, 11 Sep 2024 12:43:27 +0300 Subject: [PATCH 1/2] Fix announcements and surveys for alt languages --- .../StorageClient/EtusivuJsonApiEntityBase.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules/helfi_etusivu_entities/src/Plugin/ExternalEntities/StorageClient/EtusivuJsonApiEntityBase.php b/modules/helfi_etusivu_entities/src/Plugin/ExternalEntities/StorageClient/EtusivuJsonApiEntityBase.php index c7c03eb88..15eeae225 100644 --- a/modules/helfi_etusivu_entities/src/Plugin/ExternalEntities/StorageClient/EtusivuJsonApiEntityBase.php +++ b/modules/helfi_etusivu_entities/src/Plugin/ExternalEntities/StorageClient/EtusivuJsonApiEntityBase.php @@ -13,6 +13,7 @@ use Drupal\external_entities\StorageClient\ExternalEntityStorageClientBase; use Drupal\helfi_api_base\Environment\Environment; use Drupal\helfi_api_base\Environment\Project; +use Drupal\helfi_api_base\Language\DefaultLanguageResolver; use GuzzleHttp\ClientInterface; use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\RequestException; @@ -62,6 +63,11 @@ abstract class EtusivuJsonApiEntityBase extends ExternalEntityStorageClientBase */ protected CacheBackendInterface $cache; + /** + * Default language resolver. + */ + protected DefaultLanguageResolver $defaultLanguageResolver; + /** * {@inheritdoc} */ @@ -75,6 +81,7 @@ public static function create( $instance->client = $container->get('http_client'); $instance->languageManager = $container->get('language_manager'); $instance->cache = $container->get('cache.default'); + $instance->defaultLanguageResolver = $container->get(DefaultLanguageResolver::class); /** @var \Drupal\helfi_api_base\Environment\EnvironmentResolver $environmentResolver */ $environmentResolver = $container->get('helfi_api_base.environment_resolver'); @@ -153,6 +160,10 @@ protected function request(string $endpoint, array $parameters, string $langcode return []; } + if ($this->defaultLanguageResolver->isAltLanguage($langcode)) { + $langcode = $this->defaultLanguageResolver->getFallbackLanguage(); + } + $uri = vsprintf('%s/jsonapi%s?%s', [ $this->environment->getInternalAddress($langcode), $endpoint, From 18795e9c74c531911dfe09e29589e8de7b1741ca Mon Sep 17 00:00:00 2001 From: Santeri Hurnanen Date: Wed, 11 Sep 2024 15:24:36 +0300 Subject: [PATCH 2/2] Add test --- modules/helfi_etusivu_entities/README.md | 4 ++++ .../src/Functional/LocalEntitiesTest.php | 22 +++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/modules/helfi_etusivu_entities/README.md b/modules/helfi_etusivu_entities/README.md index ff0009477..412496245 100644 --- a/modules/helfi_etusivu_entities/README.md +++ b/modules/helfi_etusivu_entities/README.md @@ -3,6 +3,10 @@ Remote entities module allows fetching announcements from `Etusivu`-instance. It utilizes `json-api` and `external_entities`-module to transfer the data between instances. +## Language support + +If current language is not in [default languages](https://github.com/City-of-Helsinki/drupal-module-helfi-api-base/blob/main/documentation/default-languages.md), remote entities use fallback language. Alt languages show local announcements in current language (if translated) and in English. + ## How to set up locally Local setup requires Etusivu-instance to be up and running with some relevant data created to it. diff --git a/modules/helfi_etusivu_entities/tests/src/Functional/LocalEntitiesTest.php b/modules/helfi_etusivu_entities/tests/src/Functional/LocalEntitiesTest.php index 716ed9777..835b4b9a9 100644 --- a/modules/helfi_etusivu_entities/tests/src/Functional/LocalEntitiesTest.php +++ b/modules/helfi_etusivu_entities/tests/src/Functional/LocalEntitiesTest.php @@ -4,6 +4,7 @@ namespace Drupal\Tests\helfi_etusivu_entities\Functional; +use Drupal\language\Entity\ConfigurableLanguage; use Drupal\node\NodeInterface; use Drupal\Tests\block\Traits\BlockCreationTrait; use Drupal\Tests\BrowserTestBase; @@ -45,6 +46,8 @@ final class LocalEntitiesTest extends BrowserTestBase { public function setUp(): void { parent::setUp(); + ConfigurableLanguage::createFromLangcode('uk')->save(); + $this->testNode = $this->createNode([ 'status' => NodeInterface::PUBLISHED, 'type' => 'page', @@ -99,17 +102,32 @@ public function testBlocks(): void { 'type' => 'announcement', 'title' => 'Test announcement', 'body' => 'Announcement content', + 'field_announcement_type' => 'notification', 'langcode' => 'en', ]); - $this->drupalGet('/'); + $this->createNode([ + 'status' => NodeInterface::PUBLISHED, + 'type' => 'announcement', + 'title' => 'UK announcement (uk)', + 'body' => 'Announcement content', + 'field_announcement_type' => 'notification', + 'langcode' => 'uk', + ]); + $this->drupalGet('/'); $this->assertSession()->pageTextContains('Old test survey'); $this->assertSession()->pageTextNotContains('New test survey'); $this->assertSession()->pageTextContains('Test announcement'); - $this->drupalGet($this->testNode->toUrl()); + // Local announcements can be translated.pages + // English announcements are shown on alt language pages. + $this->drupalGet('/', ['language' => \Drupal::languageManager()->getLanguage('uk')]); + $this->assertSession()->pageTextContains('UK announcement'); + $this->assertSession()->pageTextContains('Test announcement'); + // Tests page filtering. + $this->drupalGet($this->testNode->toUrl()); $this->assertSession()->pageTextContains('New test survey'); $this->assertSession()->pageTextNotContains('Old test survey'); $this->assertSession()->pageTextContains('Test announcement');