summaryrefslogtreecommitdiff
path: root/includes/context/RequestContext.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/context/RequestContext.php')
-rw-r--r--includes/context/RequestContext.php33
1 files changed, 24 insertions, 9 deletions
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() ) {