Improve algorithm of setting and storing locale setting

This commit is contained in:
Fedor A. Fetisov 2013-09-13 13:36:04 +04:00
parent 2559630e8f
commit 6747e2f557

View File

@ -27,8 +27,6 @@ $webimroot = join("/", array_map("urlencode", preg_split('/\//', preg_replace('/
$mysqlprefix = preg_replace('/[^A-Za-z0-9_$]/', '', $mysqlprefix); $mysqlprefix = preg_replace('/[^A-Za-z0-9_$]/', '', $mysqlprefix);
// test and set default locales // test and set default locales
$locale_pattern = "/^[\w-]{2,5}$/";
$default_locale = locale_pattern_check($default_locale) && locale_exists($default_locale) ? $default_locale : 'en'; $default_locale = locale_pattern_check($default_locale) && locale_exists($default_locale) ? $default_locale : 'en';
$home_locale = locale_pattern_check($home_locale) && locale_exists($home_locale) ? $default_locale : 'en'; $home_locale = locale_pattern_check($home_locale) && locale_exists($home_locale) ? $default_locale : 'en';
@ -90,7 +88,7 @@ function locale_exists($locale)
function locale_pattern_check($locale) function locale_pattern_check($locale)
{ {
global $locale_pattern; $locale_pattern = "/^[\w-]{2,5}$/";
return preg_match($locale_pattern, $locale) && $locale != 'names'; return preg_match($locale_pattern, $locale) && $locale != 'names';
} }
@ -116,7 +114,7 @@ function get_user_locale()
if (isset($_COOKIE['webim_locale'])) { if (isset($_COOKIE['webim_locale'])) {
$requested_lang = $_COOKIE['webim_locale']; $requested_lang = $_COOKIE['webim_locale'];
if (locale_exists($requested_lang)) if (locale_pattern_check($requested_lang) && locale_exists($requested_lang))
return $requested_lang; return $requested_lang;
} }
@ -126,12 +124,12 @@ function get_user_locale()
if (strlen($requested_lang) > 2) if (strlen($requested_lang) > 2)
$requested_lang = substr($requested_lang, 0, 2); $requested_lang = substr($requested_lang, 0, 2);
if (locale_exists($requested_lang)) if (locale_pattern_check($requested_lang) && locale_exists($requested_lang))
return $requested_lang; return $requested_lang;
} }
} }
if (locale_exists($default_locale)) if (locale_pattern_check($default_locale) && locale_exists($default_locale))
return $default_locale; return $default_locale;
return 'en'; return 'en';
@ -139,19 +137,21 @@ function get_user_locale()
function get_locale() function get_locale()
{ {
global $webimroot, $locale_pattern; global $webimroot;
$locale = verifyparam("locale", $locale_pattern, ""); $locale = verifyparam("locale", "/./", "");
if ($locale && locale_exists($locale)) { if ($locale && locale_pattern_check($locale) && locale_exists($locale)) {
$_SESSION['locale'] = $locale; $_SESSION['locale'] = $locale;
setcookie('webim_locale', $locale, time() + 60 * 60 * 24 * 1000, "$webimroot/"); }
} else if (isset($_SESSION['locale'])) { else if (isset($_SESSION['locale']) && locale_pattern_check($_SESSION['locale']) && locale_exists($_SESSION['locale'])) {
$locale = $_SESSION['locale']; $locale = $_SESSION['locale'];
}
else {
$locale = get_user_locale();
} }
if (!$locale || !locale_exists($locale)) setcookie('webim_locale', $locale, time() + 60 * 60 * 24 * 1000, "$webimroot/");
$locale = get_user_locale();
return $locale; return $locale;
} }