From bb14a48851fcc45b2b7191074e27a02b9cd22fea Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Mon, 15 Jan 2018 18:09:01 +0100 Subject: [PATCH] MDL-60736 tool_mobile: Support session lang in WS --- lib/externallib.php | 21 +++++++++++++++++++++ webservice/lib.php | 31 ++++++++++++++++++++++++++----- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/lib/externallib.php b/lib/externallib.php index ec42975cab1..cc96a9aedb0 100644 --- a/lib/externallib.php +++ b/lib/externallib.php @@ -1175,6 +1175,9 @@ class external_settings { /** @var string In which file should the urls be rewritten */ private $file = 'webservice/pluginfile.php'; + /** @var string The session lang */ + private $lang = ''; + /** * Constructor - protected - can not be instanciated */ @@ -1277,6 +1280,24 @@ class external_settings { public function get_file() { return $this->file; } + + /** + * Set lang + * + * @param string $lang + */ + public function set_lang($lang) { + $this->lang = $lang; + } + + /** + * Get lang + * + * @return string + */ + public function get_lang() { + return $this->lang; + } } /** diff --git a/webservice/lib.php b/webservice/lib.php index 2b0098c56ac..5da1bba99bb 100644 --- a/webservice/lib.php +++ b/webservice/lib.php @@ -1126,18 +1126,20 @@ abstract class webservice_server implements webservice_server_interface { // Must be the same XXX key name as the external_settings::set_XXX function. // Must be the same XXX ws parameter name as 'moodlewssettingXXX'. $externalsettings = array( - 'raw' => false, - 'fileurl' => true, - 'filter' => false); + 'raw' => array('default' => false, 'type' => PARAM_BOOL), + 'fileurl' => array('default' => true, 'type' => PARAM_BOOL), + 'filter' => array('default' => false, 'type' => PARAM_BOOL), + 'lang' => array('default' => '', 'type' => PARAM_LANG), + ); // Load the external settings with the web service settings. $settings = external_settings::get_instance(); - foreach ($externalsettings as $name => $default) { + foreach ($externalsettings as $name => $settingdata) { $wsparamname = 'moodlewssetting' . $name; // Retrieve and remove the setting parameter from the request. - $value = optional_param($wsparamname, $default, PARAM_BOOL); + $value = optional_param($wsparamname, $settingdata['default'], $settingdata['type']); unset($_GET[$wsparamname]); unset($_POST[$wsparamname]); @@ -1203,6 +1205,8 @@ abstract class webservice_base_server extends webservice_server { * @uses die */ public function run() { + global $CFG, $SESSION; + // we will probably need a lot of memory in some functions raise_memory_limit(MEMORY_EXTRA); @@ -1236,6 +1240,23 @@ abstract class webservice_base_server extends webservice_server { $event->set_legacy_logdata(array(SITEID, 'webservice', $this->functionname, '' , getremoteaddr() , 0, $this->userid)); $event->trigger(); + // Do additional setup stuff. + $settings = external_settings::get_instance(); + $sessionlang = $settings->get_lang(); + if (!empty($sessionlang)) { + $SESSION->lang = $sessionlang; + } + + setup_lang_from_browser(); + + if (empty($CFG->lang)) { + if (empty($SESSION->lang)) { + $CFG->lang = 'en'; + } else { + $CFG->lang = $SESSION->lang; + } + } + // finally, execute the function - any errors are catched by the default exception handler $this->execute();