Index: branches/5.1.x/core/units/languages/languages_item.php =================================================================== diff -u -N -r13545 -r13559 --- branches/5.1.x/core/units/languages/languages_item.php (.../languages_item.php) (revision 13545) +++ branches/5.1.x/core/units/languages/languages_item.php (.../languages_item.php) (revision 13559) @@ -1,6 +1,6 @@ $language_quality) { $language_id = $this->getAvailableLanguage($language_locale); if ($language_id) { return $language_id; } } - + return false; } @@ -118,18 +118,24 @@ if (strpos($locale, '-') !== false) { // exact language match requested - return array_key_exists($locale, $available_languages) ? $available_languages[$locale] : false; + $language_id = array_key_exists($locale, $available_languages) ? $available_languages[$locale] : false; + + if ($language_id && $this->siteDomainLanguageEnabled($language_id)) { + return $language_id; + } + + return false; } // partial (like "en" matches "en-GB" and "en-US") language match required foreach ($available_languages as $language_code => $language_id) { list ($language_code, ) = explode('-', $language_code); - if ($locale == $language_code) { + if (($locale == $language_code) && $this->siteDomainLanguageEnabled($language_id)) { return $language_id; } } - + return false; } @@ -151,9 +157,17 @@ { $default = false; if ($id == 'default') { + // domain based primary language $default = true; - $res = parent::Load(1, 'PrimaryLang', true); + $id = $this->Application->siteDomainField('PrimaryLanguageId'); + if ($id) { + $res = parent::Load($id, $id_field_name, true); + } + else { + $res = parent::Load(1, 'PrimaryLang', true); + } + if ( !$this->Application->isAdmin && $this->isEmptyUrl() && $this->Application->ConfigValue('UseContentLanguageNegotiation') @@ -176,6 +190,13 @@ $res = parent::Load($id, $id_field_name, true); } + if ($res) { + if (!$this->siteDomainLanguageEnabled($this->GetID())) { + // language isn't allowed in site domain + return $this->Clear(); + } + } + if ($default) { if (!$res) { if ($this->Application->isAdmin) { @@ -198,4 +219,21 @@ return $res; } + + /** + * Checks, that language is enabled in site domain + * + * @param int $id + * @return bool + */ + function siteDomainLanguageEnabled($id) + { + $available_languages = $this->Application->siteDomainField('Languages'); + + if ($available_languages) { + return strpos($available_languages, '|' .$id . '|') !== false; + } + + return true; + } } \ No newline at end of file