Followup to r67554: move getAcceptLang() to WebRequest for general use, per CR.
authorRoan Kattouw <catrope@users.mediawiki.org>
Fri, 18 Jun 2010 18:00:54 +0000 (18:00 +0000)
committerRoan Kattouw <catrope@users.mediawiki.org>
Fri, 18 Jun 2010 18:00:54 +0000 (18:00 +0000)
includes/WebRequest.php
includes/api/ApiQueryUserInfo.php

index 684596b..5db725f 100644 (file)
@@ -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;
+       }
 }
 
 /**
index 840c394..5a3092c 100644 (file)
@@ -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() {