Index: branches/5.0.x/core/kernel/application.php =================================================================== diff -u -N -r12953 -r12970 --- branches/5.0.x/core/kernel/application.php (.../application.php) (revision 12953) +++ branches/5.0.x/core/kernel/application.php (.../application.php) (revision 12970) @@ -1,6 +1,6 @@ Application =& $instance; } + return $instance; } @@ -566,22 +565,30 @@ return $path; } - function GetDefaultLanguageId() + function GetDefaultLanguageId($init = false) { - static $language_id = 0; + static $language_info = null; - if ($language_id > 0) { - return $language_id; + if (!isset($language_info)) { + // cache primary language info first + $table = $this->getUnitOption('lang', 'TableName'); + $id_field = $this->getUnitOption('lang', 'IDField'); + + $sql = 'SELECT ' . $id_field . ', IF(AdminInterfaceLang, "Admin", "Front") AS LanguageKey + FROM ' . $table . ' + WHERE (AdminInterfaceLang = 1 OR PrimaryLang = 1) AND (Enabled = 1)'; + $language_info = $this->Conn->GetCol($sql, 'LanguageKey'); } - $table = $this->getUnitOption('lang', 'TableName'); - $id_field = $this->getUnitOption('lang', 'IDField'); + $language_key = ($this->isAdmin && $init) || count($language_info) == 1 ? 'Admin' : 'Front'; - $sql = 'SELECT '.$id_field.' - FROM '.$table.' - WHERE (PrimaryLang = 1) AND (Enabled = 1)'; - $language_id = $this->Conn->GetOne($sql); + if (array_key_exists($language_key, $language_info) && $language_info[$language_key] > 0) { + // get from cache + return $language_info[$language_key]; + } + $language_id = $language_info && array_key_exists($language_key, $language_info) ? $language_info[$language_key] : false; + if (!$language_id && defined('IS_INSTALL') && IS_INSTALL) { $language_id = 1; }