This is used for LanguageSwitcher feature (generate links for current content in a different language if available).
Will use configured translation_siteaccesses if any. Otherwise will use related siteaccesses (e.g. same repository, same rootLocationId).
Will return null if no translation SiteAccess can be found.
/** * If "language" parameter is present, will try to get corresponding SiteAccess for translation. * If found, it will add "siteaccess" parameter to the RouteReference, to trigger SiteAccess switch when generating * the final link. * * @see \eZ\Publish\Core\MVC\Symfony\Routing\Generator::generate() * @see \eZ\Publish\Core\MVC\Symfony\Routing\Generator\UrlAliasGenerator::doGenerate() * * @param \eZ\Publish\Core\MVC\Symfony\Event\RouteReferenceGenerationEvent $event */ public function onRouteReferenceGeneration(RouteReferenceGenerationEvent $event) { $routeReference = $event->getRouteReference(); if (!$routeReference->has('language')) { return; } $language = $routeReference->get('language'); $routeReference->remove('language'); $siteAccess = $this->translationHelper->getTranslationSiteAccess($language); if ($siteAccess !== null) { $routeReference->set('siteaccess', $siteAccess); } }
/** * Returns the translation SiteAccess for $language, or null if it cannot be found. * * @param string $language * * @return null|string */ public function getTranslationSiteAccess($language) { return $this->translationHelper->getTranslationSiteAccess($language); }
/** * @dataProvider getTranslationSiteAccessProvider */ public function testGetTranslationSiteAccess($language, array $translationSiteAccesses, array $relatedSiteAccesses, $expectedResult) { $this->configResolver->expects($this->exactly(2))->method('getParameter')->will($this->returnValueMap(array(array('translation_siteaccesses', null, null, $translationSiteAccesses), array('related_siteaccesses', null, null, $relatedSiteAccesses)))); $this->assertSame($expectedResult, $this->translationHelper->getTranslationSiteAccess($language)); }