Removed configuration storage in the MediaWiki class:
[lhc/web/wiklou.git] / includes / RequestContext.php
index 0f1488e..abbdd4e 100644 (file)
@@ -1,19 +1,21 @@
 <?php
 /**
  * Group all the pieces relevant to the context of a request into one instance
- * 
+ *
+ * @since 1.18
+ *
  * @author IAlex
  * @author Daniel Friesen
  * @file
  */
 
 class RequestContext {
-       private $request; /// WebRequest object
-       private $title;   /// Title object
-       private $out;     /// OutputPage object
-       private $user;    /// User object
-       private $lang;    /// Language object
-       private $skin;    /// Skin object
+       private $mRequest; // / WebRequest object
+       private $mTitle;   // / Title object
+       private $mOutput;  // / OutputPage object
+       private $mUser;    // / User object
+       private $mLang;    // / Language object
+       private $mSkin;    // / Skin object
 
        /**
         * Set the WebRequest object
@@ -21,7 +23,7 @@ class RequestContext {
         * @param $r WebRequest object
         */
        public function setRequest( WebRequest $r ) {
-               $this->request = $r;
+               $this->mRequest = $r;
        }
 
        /**
@@ -30,11 +32,11 @@ class RequestContext {
         * @return WebRequest
         */
        public function getRequest() {
-               if ( !isset($this->request) ) {
+               if ( !isset( $this->mRequest ) ) {
                        global $wgRequest; # fallback to $wg till we can improve this
-                       $this->request = $wgRequest;
+                       $this->mRequest = $wgRequest;
                }
-               return $this->request;
+               return $this->mRequest;
        }
 
        /**
@@ -43,7 +45,7 @@ class RequestContext {
         * @param $t Title object
         */
        public function setTitle( Title $t ) {
-               $this->title = $t;
+               $this->mTitle = $t;
        }
 
        /**
@@ -52,11 +54,11 @@ class RequestContext {
         * @return Title
         */
        public function getTitle() {
-               if ( !isset($this->title) ) {
+               if ( !isset( $this->mTitle ) ) {
                        global $wgTitle; # fallback to $wg till we can improve this
-                       $this->title = $wgTitle;
+                       $this->mTitle = $wgTitle;
                }
-               return $this->title;
+               return $this->mTitle;
        }
 
        /**
@@ -65,11 +67,10 @@ class RequestContext {
         * @return OutputPage object
         */
        public function getOutput() {
-               if ( !isset($this->output) ) {
-                       $this->output = new OutputPage;
-                       $this->output->setContext( $this );
+               if ( !isset( $this->mOutput ) ) {
+                       $this->mOutput = new OutputPage( $this );
                }
-               return $this->output;
+               return $this->mOutput;
        }
 
        /**
@@ -78,7 +79,7 @@ class RequestContext {
         * @param $u User
         */
        public function setUser( User $u ) {
-               $this->user = $u;
+               $this->mUser = $u;
        }
 
        /**
@@ -87,11 +88,13 @@ class RequestContext {
         * @return User
         */
        public function getUser() {
-               if ( !isset($this->user) ) {
+               if ( !isset( $this->mUser ) ) {
                        global $wgCommandLineMode;
-                       $this->user = $wgCommandLineMode ? new User : User::newFromSession( $this->getRequest() );
+                       $this->mUser = $wgCommandLineMode
+                               ? new User
+                               : User::newFromSession( $this->getRequest() );
                }
-               return $this->user;
+               return $this->mUser;
        }
 
        /**
@@ -100,28 +103,31 @@ class RequestContext {
         * @return Language
         */
        public function getLang() {
-               if ( !isset($this->lang) ) {
+               if ( !isset( $this->mLang ) ) {
                        global $wgLanguageCode, $wgContLang;
-                       $code = $this->getRequest()->getVal( 'uselang', $this->getUser()->getOption( 'language' ) );
+                       $code = $this->getRequest()->getVal(
+                               'uselang',
+                               $this->getUser()->getOption( 'language' )
+                       );
                        // BCP 47 - letter case MUST NOT carry meaning
                        $code = strtolower( $code );
 
                        # Validate $code
-                       if( empty( $code ) || !Language::isValidCode( $code ) || ( $code === 'qqq' ) ) {
+                       if ( empty( $code ) || !Language::isValidCode( $code ) || ( $code === 'qqq' ) ) {
                                wfDebug( "Invalid user language code\n" );
                                $code = $wgLanguageCode;
                        }
 
                        wfRunHooks( 'UserGetLanguageObject', array( $this->getUser(), &$code ) );
 
-                       if( $code === $wgLanguageCode ) {
-                               $this->lang = $wgContLang;
+                       if ( $code === $wgLanguageCode ) {
+                               $this->mLang = $wgContLang;
                        } else {
                                $obj = Language::factory( $code );
-                               $this->lang = $obj;
+                               $this->mLang = $obj;
                        }
                }
-               return $this->lang;
+               return $this->mLang;
        }
 
        /**
@@ -130,9 +136,25 @@ class RequestContext {
         * @return Skin
         */
        public function getSkin() {
-               // For now we'll just proxy to the user. In the future a saner location for
-               // organizing what skin to use may be chosen
-               return $this->getUser()->getSkin();
+               if ( !isset( $this->mSkin ) ) {
+                       wfProfileIn( __METHOD__ . '-createskin' );
+
+                       global $wgHiddenPrefs;
+                       if ( !in_array( 'skin', $wgHiddenPrefs ) ) {
+                               # get the user skin
+                               $userSkin = $this->getUser()->getOption( 'skin' );
+                               $userSkin = $this->getRequest()->getVal( 'useskin', $userSkin );
+                       } else {
+                               # if we're not allowing users to override, then use the default
+                               global $wgDefaultSkin;
+                               $userSkin = $wgDefaultSkin;
+                       }
+
+                       $this->mSkin = Skin::newFromKey( $userSkin );
+                       $this->mSkin->setContext( $this );
+                       wfProfileOut( __METHOD__ . '-createskin' );
+               }
+               return $this->mSkin;
        }
 
        /** Helpful methods **/
@@ -144,8 +166,8 @@ class RequestContext {
         * @return Message object
         */
        public function msg() {
-               $args = function_get_args();
-               return call_user_func_array( 'wfMessage', $args )->inLanguage( $this->getLang() )->outputPage( $this->getOut() );
+               $args = func_get_args();
+               return call_user_func_array( 'wfMessage', $args )->inLanguage( $this->getLang() );
        }
 
        /** Static methods **/
@@ -157,11 +179,31 @@ class RequestContext {
         */
        public static function getMain() {
                static $instance = null;
-               if ( !isset($instance) ) {
+               if ( !isset( $instance ) ) {
                        $instance = new self;
                }
                return $instance;
        }
 
+       /**
+        * Make these C#-style accessors, so you can do $context->user->getName() which is
+        * internally mapped to $context->__get('user')->getName() which is mapped to
+        * $context->getUser()->getName()
+        */
+       public function __get( $name ) {
+               if ( in_array( $name, array( 'request', 'title', 'output', 'user', 'lang', 'skin' ) ) ) {
+                       $fname = 'get' . ucfirst( $name );
+                       return $this->$fname();
+               }
+               trigger_error( "Undefined property {$name}", E_NOTICE );
+       }
+
+       public function __set( $name, $value ) {
+               if ( in_array( $name, array( 'request', 'title', 'output', 'user', 'lang', 'skin' ) ) ) {
+                       $fname = 'set' . ucfirst( $name );
+                       return $this->$fname( $value );
+               }
+               trigger_error( "Undefined property {$name}", E_NOTICE );
+       }
 }