From d81f562b712f2387fa02290bf2ca86392ab356f2 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 11 Oct 2006 20:21:25 +0000 Subject: Aktualisierung auf Version 1.8.1 --- includes/StubObject.php | 130 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 includes/StubObject.php (limited to 'includes/StubObject.php') diff --git a/includes/StubObject.php b/includes/StubObject.php new file mode 100644 index 00000000..ed3b117a --- /dev/null +++ b/includes/StubObject.php @@ -0,0 +1,130 @@ +mGlobal = $global; + $this->mClass = $class; + $this->mParams = $params; + } + + static function isRealObject( $obj ) { + return is_object( $obj ) && !is_a( $obj, 'StubObject' ); + } + + function _call( $name, $args ) { + $this->_unstub( $name, 5 ); + return call_user_func_array( array( $GLOBALS[$this->mGlobal], $name ), $args ); + } + + function _newObject() { + return wfCreateObject( $this->mClass, $this->mParams ); + } + + function __call( $name, $args ) { + return $this->_call( $name, $args ); + } + + /** + * This is public, for the convenience of external callers wishing to access + * properties, e.g. eval.php + */ + function _unstub( $name = '_unstub', $level = 2 ) { + static $recursionLevel = 0; + if ( get_class( $GLOBALS[$this->mGlobal] ) != $this->mClass ) { + $fname = __METHOD__.'-'.$this->mGlobal; + wfProfileIn( $fname ); + $caller = wfGetCaller( $level ); + if ( ++$recursionLevel > 2 ) { + 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(); + --$recursionLevel; + wfProfileOut( $fname ); + } + } +} + +class StubContLang extends StubObject { + function __construct() { + parent::__construct( 'wgContLang' ); + } + + function __call( $name, $args ) { + return StubObject::_call( $name, $args ); + } + + function _newObject() { + global $wgContLanguageCode; + $obj = Language::factory( $wgContLanguageCode ); + $obj->initEncoding(); + $obj->initContLang(); + return $obj; + } +} +class StubUserLang extends StubObject { + function __construct() { + parent::__construct( 'wgLang' ); + } + + function __call( $name, $args ) { + return $this->_call( $name, $args ); + } + + function _newObject() { + global $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang; + $code = $wgRequest->getVal('uselang', ''); + if ($code == '') + $code = $wgUser->getOption('language'); + # Validate $code + if( empty( $code ) || !preg_match( '/^[a-z]+(-[a-z]+)?$/', $code ) ) { + $code = $wgContLanguageCode; + } + + if( $code == $wgContLanguageCode ) { + return $wgContLang; + } else { + $obj = Language::factory( $code ); + return $obj; + } + } +} +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; + $user->setLoaded( true ); + } else { + $user = User::loadFromSession(); + wfRunHooks('AutoAuthenticate',array($user)); + } + return $user; + } +} + +?> -- cgit v1.2.3-54-g00ecf