Fix NS_PROJECT_TALK (bug #7792)
[lhc/web/wiklou.git] / includes / StubObject.php
index ceedeb4..1501d96 100644 (file)
@@ -27,20 +27,6 @@ class StubObject {
                return is_object( $obj ) && !is_a( $obj, 'StubObject' );
        }
 
-       static function _getCaller( $level ) {
-               $backtrace = debug_backtrace();
-               if ( isset( $backtrace[$level] ) ) {
-                       if ( isset( $backtrace[$level]['class'] ) ) {
-                               $caller = $backtrace[$level]['class'] . '::' . $backtrace[$level]['function'];
-                       } else {
-                               $caller = $backtrace[$level]['function'];
-                       }
-               } else {
-                       $caller = 'unknown';
-               }
-               return $caller;
-       }
-
        function _call( $name, $args ) {
                $this->_unstub( $name, 5 );
                return call_user_func_array( array( $GLOBALS[$this->mGlobal], $name ), $args );
@@ -63,7 +49,7 @@ class StubObject {
                if ( get_class( $GLOBALS[$this->mGlobal] ) != $this->mClass ) {
                        $fname = __METHOD__.'-'.$this->mGlobal;
                        wfProfileIn( $fname );
-                       $caller = self::_getCaller( $level );
+                       $caller = wfGetCaller( $level );
                        if ( ++$recursionLevel > 2 ) {
                                throw new MWException( "Unstub loop detected on call of \${$this->mGlobal}->$name from $caller\n" );
                        }
@@ -102,20 +88,26 @@ class StubUserLang extends StubObject {
        }
 
        function _newObject() {
-               global $wgLanguageCode, $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang;
-               // wgLanguageCode now specifically means the UI language
-               $wgLanguageCode = $wgRequest->getText('uselang', '');
-               if ($wgLanguageCode == '')
-                       $wgLanguageCode = $wgUser->getOption('language');
-               # Validate $wgLanguageCode
-               if( empty( $wgLanguageCode ) || !preg_match( '/^[a-z]+(-[a-z]+)?$/', $wgLanguageCode ) ) {
-                       $wgLanguageCode = $wgContLanguageCode;
+               global $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang;
+               $code = $wgRequest->getVal('uselang', $wgUser->getOption('language') );
+
+               // if variant is explicitely selected, use it instead the one from wgUser
+               // see bug #7605
+               if($wgContLang->hasVariants()){
+                       $variant = $wgContLang->getPreferredVariant();
+                       if($variant != $wgContLanguageCode)
+                               $code = $variant;
+               }        
+
+               # Validate $code
+               if( empty( $code ) || !preg_match( '/^[a-z]+(-[a-z]+)?$/', $code ) ) {
+                       $code = $wgContLanguageCode;
                }
 
-               if( $wgLanguageCode == $wgContLanguageCode ) {
+               if( $code == $wgContLanguageCode ) {
                        return $wgContLang;
                } else {
-                       $obj = Language::factory( $wgLanguageCode );
+                       $obj = Language::factory( $code );
                        return $obj;
                }
        }
@@ -133,9 +125,9 @@ class StubUser extends StubObject {
                global $wgCommandLineMode;
                if( $wgCommandLineMode ) {
                        $user = new User;
-                       $user->setLoaded( true );
                } else {
-                       $user = User::loadFromSession();
+                       $user = User::newFromSession();
+                       wfRunHooks('AutoAuthenticate',array(&$user));
                }
                return $user;
        }