X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FStubObject.php;h=ef2d973b6293625e9007890d12909c3c74069b9c;hb=3629f272c403ed3addd067a5143a5be84b18150a;hp=e18537e0549c5e3543ffeb2cd9f18d511467c75d;hpb=648bfbabc0911f853fe163ba80d7aefbecf3f341;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/StubObject.php b/includes/StubObject.php index e18537e054..ef2d973b62 100644 --- a/includes/StubObject.php +++ b/includes/StubObject.php @@ -21,10 +21,10 @@ class StubObject { /** * Constructor. * - * @param String $global name of the global variable. - * @param String $class name of the class of the real object. - * @param Array $param array of parameters to pass to contructor of the real - * object. + * @param $global String: name of the global variable. + * @param $class String: name of the class of the real object. + * @param $params Array: parameters to pass to contructor of the real + * object. */ function __construct( $global = null, $class = null, $params = array() ) { $this->mGlobal = $global; @@ -36,8 +36,8 @@ class StubObject { * Returns a bool value whetever $obj is a stub object. Can be used to break * a infinite loop when unstubbing an object. * - * @param Object $obj object to check. - * @return bool true if $obj is not an instance of StubObject class. + * @param $obj Object to check. + * @return Boolean: true if $obj is not an instance of StubObject class. */ static function isRealObject( $obj ) { return is_object( $obj ) && !($obj instanceof StubObject); @@ -50,8 +50,8 @@ class StubObject { * This function will also call the function with the same name in the real * object. * - * @param String $name name of the function called. - * @param Array $args array of arguments. + * @param $name String: name of the function called + * @param $args Array: arguments */ function _call( $name, $args ) { $this->_unstub( $name, 5 ); @@ -69,8 +69,8 @@ class StubObject { * Function called by PHP if no function with that name exists in this * object. * - * @param String $name name of the function called - * @param Array $args array of arguments + * @param $name String: name of the function called + * @param $args Array: arguments */ function __call( $name, $args ) { return $this->_call( $name, $args ); @@ -82,12 +82,16 @@ class StubObject { * This is public, for the convenience of external callers wishing to access * properties, e.g. eval.php * - * @param String $name name of the method called in this object. - * @param Integer $level level to go in the stact trace to get the function - * who called this function. + * @param $name String: name of the method called in this object. + * @param $level Integer: level to go in the stact trace to get the function + * who called this function. */ function _unstub( $name = '_unstub', $level = 2 ) { static $recursionLevel = 0; + + if ( !($GLOBALS[$this->mGlobal] instanceof StubObject) ) + return $GLOBALS[$this->mGlobal]; // already unstubbed. + if ( get_class( $GLOBALS[$this->mGlobal] ) != $this->mClass ) { $fname = __METHOD__.'-'.$this->mGlobal; wfProfileIn( $fname ); @@ -96,7 +100,7 @@ class StubObject { throw new MWException( "Unstub loop detected on call of \${$this->mGlobal}->$name from $caller\n" ); } wfDebug( "Unstubbing \${$this->mGlobal} on call of \${$this->mGlobal}::$name from $caller\n" ); - $GLOBALS[$this->mGlobal] = $this->_newObject(); + $obj = $GLOBALS[$this->mGlobal] = $this->_newObject(); --$recursionLevel; wfProfileOut( $fname ); } @@ -118,8 +122,8 @@ class StubContLang extends StubObject { } function _newObject() { - global $wgContLanguageCode; - $obj = Language::factory( $wgContLanguageCode ); + global $wgLanguageCode; + $obj = Language::factory( $wgLanguageCode ); $obj->initEncoding(); $obj->initContLang(); return $obj; @@ -142,63 +146,18 @@ class StubUserLang extends StubObject { } function _newObject() { - global $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang; + global $wgLanguageCode, $wgRequest, $wgUser, $wgContLang; $code = $wgRequest->getVal( 'uselang', $wgUser->getOption( 'language' ) ); + // BCP 47 - letter case MUST NOT carry meaning + $code = strtolower( $code ); # Validate $code if( empty( $code ) || !preg_match( '/^[a-z-]+$/', $code ) || ( $code === 'qqq' ) ) { wfDebug( "Invalid user language code\n" ); - $code = $wgContLanguageCode; - } - - if( $code === $wgContLanguageCode ) { - return $wgContLang; - } else { - $obj = Language::factory( $code ); - return $obj; - } - } -} - -/** - * Stub object for the user variant. It depends of the user preferences and - * "variant" parameter that can be passed to index.php. This object have to be - * in $wgVariant global. - */ -class StubUserVariant extends StubObject { - - function __construct() { - parent::__construct( 'wgVariant' ); - } - - function __call( $name, $args ) { - return $this->_call( $name, $args ); - } - - function _newObject() { - global $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang; - - if( $wgContLang->hasVariants() ) { - $code = $wgRequest->getVal( 'variant', $wgUser->getOption( 'variant' ) ); - } else { - $code = $wgRequest->getVal( 'variant', $wgUser->getOption( 'language' ) ); - } - - // if variant is explicitely selected, use it instead the one from wgUser - // see bug #7605 - if( $wgContLang->hasVariants() && in_array($code, $wgContLang->getVariants()) ){ - $variant = $wgContLang->getPreferredVariant(); - if( $variant != $wgContLanguageCode ) - $code = $variant; - } - - # Validate $code - if( empty( $code ) || !preg_match( '/^[a-z-]+$/', $code ) || ( $code === 'qqq' ) ) { - wfDebug( "Invalid user variant code\n" ); - $code = $wgContLanguageCode; + $code = $wgLanguageCode; } - if( $code === $wgContLanguageCode ) { + if( $code === $wgLanguageCode ) { return $wgContLang; } else { $obj = Language::factory( $code ); @@ -206,30 +165,3 @@ class StubUserVariant extends StubObject { } } } - -/** - * Stub object for the user. The initialisation of the will depend of - * $wgCommandLineMode. If it's true, it will be an anonymous user and if it's - * false, the user will be loaded from credidentails provided by cookies. This - * object have to be in $wgUser global. - */ -class StubUser extends StubObject { - - function __construct() { - parent::__construct( 'wgUser' ); - } - - function __call( $name, $args ) { - return $this->_call( $name, $args ); - } - - function _newObject() { - global $wgCommandLineMode; - if( $wgCommandLineMode ) { - $user = new User; - } else { - $user = User::newFromSession(); - } - return $user; - } -}