Skip to content

Commit

Permalink
Integrated the automated site per language definition with the rest o…
Browse files Browse the repository at this point in the history
…f the plugin

Contains method name changes, syntax changes and class visibility changes.
  • Loading branch information
Pierre Stoffe committed Jun 2, 2019
1 parent 418858b commit c024ddc
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 30 deletions.
54 changes: 27 additions & 27 deletions src/services/LanguageRedirectorService.php
Expand Up @@ -195,17 +195,18 @@ public function getSiteFromLanguage(string $language = null)
return null;
}

$languages = $this->getLanguages();
$siteForLanguage = $languages[$language] ?? 0;
$sitesPerLanguage = $this->getSitesPerLanguage();

$siteFromLanguage = $sitesPerLanguage[$language] ?? 0;

if (is_int($siteForLanguage)) {
$site = Craft::$app->sites->getSiteById($siteForLanguage);
if (is_int($siteFromLanguage)) {
$site = Craft::$app->sites->getSiteById($siteFromLanguage);

if (null != $site) {
return $site;
}
} else {
$site = Craft::$app->sites->getSiteByHandle($siteForLanguage);
$site = Craft::$app->sites->getSiteByHandle($siteFromLanguage);

if (null != $site) {
return $site;
Expand All @@ -215,6 +216,26 @@ public function getSiteFromLanguage(string $language = null)
return null;
}

/**
* Get the list of all languages defined in the settings or in the Sites table, and their corresponding Site.
*
* @return array
*/
public function getSitesPerLanguage()
{
$languages = LanguageRedirector::getInstance()->getSettings()->languages;
if (!empty($languages)) {
return $languages;
}

$languages = [];
foreach (Craft::$app->sites->getAllSites() as $site) {
$languages[$site->language] = (int) $site->id;
}

return $languages;
}

// Private Methods
// =========================================================================

Expand Down Expand Up @@ -252,7 +273,7 @@ private function _getLanguageFromSession()
*/
private function _getLanguageFromGuess()
{
$siteLanguages = array_keys($this->getLanguages());
$siteLanguages = array_keys($this->getSitesPerLanguage());

// Get exact languages matches (required when working with country specific locales)
$languages = array_intersect(array_map('strtolower', Craft::$app->getRequest()->getAcceptableLanguages()), array_map('strtolower', $siteLanguages));
Expand Down Expand Up @@ -344,25 +365,4 @@ private function _getQueryParameters()
{
return $this->_queryParameters;
}

/**
* Gets the defined site languages from settings or from the sites table.
*
* @return array
*/
protected function getLanguages()
{
$languages = LanguageRedirector::getInstance()->getSettings()->languages;
if (!empty($languages)) {
return $languages;
}

$languages = [];
foreach (Craft::$app->sites->getAllSites() as $site)
{
$languages[$site->language] = (int)$site->id;
}

return $languages;
}
}
6 changes: 3 additions & 3 deletions src/variables/LanguageSwitcher.php
Expand Up @@ -32,7 +32,8 @@ class LanguageSwitcherVariable
public function getUrls($urlOverrides = null): array
{
$queryParameterName = LanguageRedirector::getInstance()->getSettings()->queryParameterName;
$siteLanguages = LanguageRedirector::getInstance()->getSettings()->languages;
$languageRedirectorService = new LanguageRedirectorService();
$siteLanguages = $languageRedirectorService->getSitesPerLanguage();

if (!$siteLanguages) {
return array();
Expand All @@ -41,8 +42,7 @@ public function getUrls($urlOverrides = null): array
$languages = array();

foreach ($siteLanguages as $language => $site) {
$languageService = new LanguageRedirectorService();
$targetUrl = $urlOverrides[$language] ?? $languageService->getTargetUrl($language);
$targetUrl = $urlOverrides[$language] ?? $languageRedirectorService->getTargetUrl($language);
$locale = Craft::$app->i18n->getLocaleById($language);

if (null !== $targetUrl) {
Expand Down

0 comments on commit c024ddc

Please sign in to comment.