Merge branch 'mdl27_mdl-43497_allow_force_language_02' of https://github.com/brki/moodle

This commit is contained in:
Eloy Lafuente (stronk7) 2014-03-13 18:33:15 +01:00
commit 38c5e34c00
6 changed files with 69 additions and 62 deletions

View file

@ -4858,6 +4858,7 @@ function set_login_session_preferences() {
$SESSION->justloggedin = true;
unset($SESSION->lang);
unset($SESSION->forcelang);
unset($SESSION->load_navigation_admin);
}
@ -6625,7 +6626,14 @@ function clean_filename($string) {
function current_language() {
global $CFG, $USER, $SESSION, $COURSE;
if (!empty($COURSE->id) and $COURSE->id != SITEID and !empty($COURSE->lang)) {
if (!empty($SESSION->forcelang)) {
// Allows overriding course-forced language (useful for admins to check
// issues in courses whose language they don't understand).
// Also used by some code to temporarily get language-related information in a
// specific language (see force_current_language()).
$return = $SESSION->forcelang;
} else if (!empty($COURSE->id) and $COURSE->id != SITEID and !empty($COURSE->lang)) {
// Course language can override all other settings for this page.
$return = $COURSE->lang;
@ -6657,14 +6665,10 @@ function current_language() {
* @return string
*/
function get_parent_language($lang=null) {
global $COURSE, $SESSION;
// Let's hack around the current language.
if (!empty($lang)) {
$oldcourselang = empty($COURSE->lang) ? '' : $COURSE->lang;
$oldsessionlang = empty($SESSION->lang) ? '' : $SESSION->lang;
$COURSE->lang = '';
$SESSION->lang = $lang;
$oldforcelang = force_current_language($lang);
}
$parentlang = get_string('parentlanguage', 'langconfig');
@ -6674,13 +6678,34 @@ function get_parent_language($lang=null) {
// Let's hack around the current language.
if (!empty($lang)) {
$COURSE->lang = $oldcourselang;
$SESSION->lang = $oldsessionlang;
force_current_language($oldforcelang);
}
return $parentlang;
}
/**
* Force the current language to get strings and dates localised in the given language.
*
* After calling this function, all strings will be provided in the given language
* until this function is called again, or equivalent code is run.
*
* @param string $language
* @return string previous $SESSION->forcelang value
*/
function force_current_language($language) {
global $SESSION;
$sessionforcelang = isset($SESSION->forcelang) ? $SESSION->forcelang : '';
if ($language !== $sessionforcelang) {
// Seting forcelang to null or an empty string disables it's effect.
if (empty($language) || get_string_manager()->translation_exists($language, false)) {
$SESSION->forcelang = $language;
moodle_setlocale();
}
}
return $sessionforcelang;
}
/**
* Returns current string_manager instance.
*