From a9734309912ce0226598b00aebc05721edf5f338 Mon Sep 17 00:00:00 2001 From: Roan Kattouw Date: Fri, 18 Jun 2010 18:00:54 +0000 Subject: [PATCH] Followup to r67554: move getAcceptLang() to WebRequest for general use, per CR. --- includes/WebRequest.php | 31 ++++++++++++++++++++ includes/api/ApiQueryUserInfo.php | 48 +++++++------------------------ 2 files changed, 41 insertions(+), 38 deletions(-) diff --git a/includes/WebRequest.php b/includes/WebRequest.php index 684596b20b..5db725ff24 100644 --- a/includes/WebRequest.php +++ b/includes/WebRequest.php @@ -736,6 +736,37 @@ class WebRequest { $ext = substr( $pi, $dotPos ); return !in_array( $ext, array( $wgScriptExtension, '.php', '.php5' ) ); } + + /** + * Parse the Accept-Language header sent by the client into an array + * @return array( languageCode => q-value ) sorted by q-value in descending order + */ + public function getAcceptLang() { + // Modified version of code found at http://www.thefutureoftheweb.com/blog/use-accept-language-header + if ( !isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ) { + return array(); + } + + // Break up string into pieces (languages and q factors) + $lang_parse = null; + preg_match_all( '/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0(\.[0-9]+))?)?/i', + $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse ); + + if ( !count( $lang_parse[1] ) ) { + return array(); + } + // Create a list like "en" => 0.8 + $langs = array_combine( $lang_parse[1], $lang_parse[4] ); + // Set default q factor to 1 + foreach ( $langs as $lang => $val ) { + if ( $val === '' ) { + $langs[$lang] = 1; + } + } + // Sort list + arsort( $langs, SORT_NUMERIC ); + return $langs; + } } /** diff --git a/includes/api/ApiQueryUserInfo.php b/includes/api/ApiQueryUserInfo.php index 840c394f14..5a3092ca16 100644 --- a/includes/api/ApiQueryUserInfo.php +++ b/includes/api/ApiQueryUserInfo.php @@ -54,7 +54,7 @@ class ApiQueryUserInfo extends ApiQueryBase { } protected function getCurrentUserInfo() { - global $wgUser; + global $wgUser, $wgRequest; $result = $this->getResult(); $vals = array(); $vals['id'] = intval( $wgUser->getId() ); @@ -125,45 +125,17 @@ class ApiQueryUserInfo extends ApiQueryBase { } if ( isset( $this->prop['acceptlang'] ) ) { - $vals['acceptlang'] = $this->getAcceptLang(); - $result->setIndexedTagName( $vals['acceptlang'], 'lang' ); - } - return $vals; - } - - protected function getAcceptLang() { - // Modified version of code found at http://www.thefutureoftheweb.com/blog/use-accept-language-header - if ( !isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ) { - return array(); - } - - // Break up string into pieces (languages and q factors) - $lang_parse = null; - preg_match_all( '/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0(\.[0-9]+))?)?/i', - $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse ); - - if ( !count( $lang_parse[1] ) ) { - return array(); - } - // Create a list like "en" => 0.8 - $langs = array_combine( $lang_parse[1], $lang_parse[4] ); - // Set default q factor to 1 - foreach ( $langs as $lang => $val ) { - if ( $val === '' ) { - $langs[$lang] = 1; + $langs = $wgRequest->getAcceptLang(); + $acceptLang = array(); + foreach ( $langs as $lang => $val ) { + $r = array( 'q' => $val ); + ApiResult::setContent( $r, $lang ); + $acceptLang[] = $r; } + $result->setIndexedTagName( $acceptLang, 'lang' ); + $vals['acceptlang'] = $acceptLang; } - // Sort list - arsort( $langs, SORT_NUMERIC ); - - // Format for API output - $retval = array(); - foreach ( $langs as $lang => $val ) { - $r = array( 'q' => $val ); - ApiResult::setContent( $r, $lang ); - $retval[] = $r; - } - return $retval; + return $vals; } protected function getRateLimits() { -- 2.20.1