From 0edd6983ba69e8195fa7cade96eca27df9ebf237 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Tue, 5 Mar 2013 09:06:02 +0100 Subject: Update to MediaWiki 1.20.3 --- includes/context/RequestContext.php | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'includes/context/RequestContext.php') diff --git a/includes/context/RequestContext.php b/includes/context/RequestContext.php index 1ffbc08c..9e7837d9 100644 --- a/includes/context/RequestContext.php +++ b/includes/context/RequestContext.php @@ -261,21 +261,33 @@ class RequestContext implements IContextSource { } /** - * Get the Language object + * Get the Language object. + * Initialization of user or request objects can depend on this. * * @return Language * @since 1.19 */ public function getLanguage() { - if ( $this->lang === null ) { + if ( isset( $this->recursion ) ) { + trigger_error( "Recursion detected in " . __METHOD__, E_USER_WARNING ); + $e = new Exception; + wfDebugLog( 'recursion-guard', "Recursion detected:\n" . $e->getTraceAsString() ); + + global $wgLanguageCode; + $code = ( $wgLanguageCode ) ? $wgLanguageCode : 'en'; + $this->lang = Language::factory( $code ); + } elseif ( $this->lang === null ) { + $this->recursion = true; + global $wgLanguageCode, $wgContLang; - $code = $this->getRequest()->getVal( - 'uselang', - $this->getUser()->getOption( 'language' ) - ); + + $request = $this->getRequest(); + $user = $this->getUser(); + + $code = $request->getVal( 'uselang', $user->getOption( 'language' ) ); $code = self::sanitizeLangCode( $code ); - wfRunHooks( 'UserGetLanguageObject', array( $this->getUser(), &$code ) ); + wfRunHooks( 'UserGetLanguageObject', array( $user, &$code, $this ) ); if( $code === $wgLanguageCode ) { $this->lang = $wgContLang; @@ -283,7 +295,10 @@ class RequestContext implements IContextSource { $obj = Language::factory( $code ); $this->lang = $obj; } + + unset( $this->recursion ); } + return $this->lang; } @@ -378,8 +393,8 @@ class RequestContext implements IContextSource { * language or a uselang param in the fauxrequest data may change the lang * - Skin will be based on the anonymous user, should be the wiki's default skin * - * @param $title Title Title to use for the extraneous request - * @param $request Mixed A WebRequest or data to use for a FauxRequest + * @param Title $title Title to use for the extraneous request + * @param WebRequest|array $request A WebRequest or data to use for a FauxRequest * @return RequestContext */ public static function newExtraneousContext( Title $title, $request=array() ) { -- cgit v1.2.2