diff --git a/identification.php b/identification.php index b2ab877df..38cd1da2f 100644 --- a/identification.php +++ b/identification.php @@ -135,7 +135,8 @@ foreach (get_languages() as $language_code => $language_name) $template->assign(array( 'language_options' => $language_options, - 'current_language' => $user['language'] + 'current_language' => $user['language'], + 'COOKIE_PATH' => cookie_path(), )); //Get link to doc diff --git a/include/functions.inc.php b/include/functions.inc.php index 762a629bd..4a9c840ee 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -1942,21 +1942,17 @@ function load_cookie_language($load_language=true, $update_user=false, $unset_co global $user; // Load language if cookie is set from login/register/password pages - if (isset($_COOKIE['lang']) and $user['language'] != $_COOKIE['lang']) + if (pwg_get_cookie_var('lang') and array_key_exists(pwg_get_cookie_var('lang'), get_languages())) { - if (!array_key_exists($_COOKIE['lang'], get_languages())) - { - fatal_error('[Hacking attempt] the input parameter "'.htmlspecialchars($_COOKIE['lang']).'" is not valid'); - } - - $user['language'] = $_COOKIE['lang']; + + $user['language'] = pwg_get_cookie_var('lang'); if ($update_user) { single_update( USER_INFOS_TABLE, array( - 'language' => $_COOKIE['lang'] + 'language' => pwg_get_cookie_var('lang') ), array( 'user_id' => $user_id ?? $user['id'] @@ -1974,7 +1970,7 @@ function load_cookie_language($load_language=true, $update_user=false, $unset_co // We unset the lang cookie, if user has changed their language using interface // we don't want to keep setting it back to what was chosen using standard // pages lang switch - setcookie("lang", "", time() - 3600); + setcookie("pwg_lang", "", time() - 3600); } } } diff --git a/password.php b/password.php index 7abdbda26..c634597f5 100644 --- a/password.php +++ b/password.php @@ -499,7 +499,8 @@ foreach (get_languages() as $language_code => $language_name) $template->assign(array( 'language_options' => $language_options, - 'current_language' => $user['language'] + 'current_language' => $user['language'], + 'COOKIE_PATH' => cookie_path(), )); //Get link to doc diff --git a/register.php b/register.php index e0cb47f84..1ebba24f8 100644 --- a/register.php +++ b/register.php @@ -112,6 +112,7 @@ foreach (get_languages() as $language_code => $language_name) $template->assign(array( 'language_options' => $language_options, 'current_language' => $user['language'], + 'COOKIE_PATH' => cookie_path(), )); //Get link to doc diff --git a/themes/standard_pages/js/standard_pages.js b/themes/standard_pages/js/standard_pages.js index 57522bc14..1f8516ffb 100644 --- a/themes/standard_pages/js/standard_pages.js +++ b/themes/standard_pages/js/standard_pages.js @@ -88,8 +88,8 @@ function setCookie(cname, cvalue, exdays) { const d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); let expires = "expires="+ d.toUTCString(); - document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; - if (cname == "lang") + document.cookie = cname + "=" + cvalue + ";" + expires + ";path="+cookie_path; + if (cname == "pwg_lang") { location.reload(); } @@ -125,9 +125,9 @@ jQuery(".togglePassword").click(function(e){ jQuery("#other-languages a").click(function(e){ let clickedUrl = new URL(jQuery(e.target).attr('href')); - let selectedLang = clickedUrl.searchParams.get("lang"); + let selectedLang = clickedUrl.searchParams.get("pwg_lang"); if (selectedLang) { - setCookie('lang',selectedLang,1); + setCookie('pwg_lang',selectedLang,1); } }); \ No newline at end of file diff --git a/themes/standard_pages/template/identification.tpl b/themes/standard_pages/template/identification.tpl index 54c3d3c82..5ccb23110 100644 --- a/themes/standard_pages/template/identification.tpl +++ b/themes/standard_pages/template/identification.tpl @@ -5,6 +5,8 @@ var selected_language = `{$language_options[$current_language]}`; var url_logo_light = `{$ROOT_URL}themes/standard_pages/images/piwigo_logo.svg`; var url_logo_dark = `{$ROOT_URL}themes/standard_pages/images/piwigo_logo_dark.svg`; + var cookie_path = {$COOKIE_PATH}; + {combine_script id='standard_pages_js' load='async' require='jquery' path='themes/standard_pages/js/standard_pages.js'} @@ -109,7 +111,7 @@
{foreach from=$language_options key=code item=lang} - {$lang} + {$lang} {/foreach}
diff --git a/themes/standard_pages/template/password.tpl b/themes/standard_pages/template/password.tpl index e01aa7c00..36a6b56f2 100644 --- a/themes/standard_pages/template/password.tpl +++ b/themes/standard_pages/template/password.tpl @@ -166,7 +166,7 @@
{foreach from=$language_options key=code item=lang} - {$lang} + {$lang} {/foreach}
diff --git a/themes/standard_pages/template/profile.tpl b/themes/standard_pages/template/profile.tpl index 5ea4f638b..3cfbf660c 100644 --- a/themes/standard_pages/template/profile.tpl +++ b/themes/standard_pages/template/profile.tpl @@ -481,7 +481,7 @@ const str_must_not_empty = "{'must not be empty'|translate|escape:javascript}";
{foreach from=$language_options key=code item=lang} - {$lang} + {$lang} {/foreach}
diff --git a/themes/standard_pages/template/register.tpl b/themes/standard_pages/template/register.tpl index b563d4e5a..5238054d4 100644 --- a/themes/standard_pages/template/register.tpl +++ b/themes/standard_pages/template/register.tpl @@ -111,7 +111,7 @@
{foreach from=$language_options key=code item=lang} - {$lang} + {$lang} {/foreach}