Followup r85240; Commit the additional file that was part of that change. ;) this...
authorDaniel Friesen <dantman@users.mediawiki.org>
Sun, 3 Apr 2011 11:09:49 +0000 (11:09 +0000)
committerDaniel Friesen <dantman@users.mediawiki.org>
Sun, 3 Apr 2011 11:09:49 +0000 (11:09 +0000)
includes/RequestContext.php [new file with mode: 0644]

diff --git a/includes/RequestContext.php b/includes/RequestContext.php
new file mode 100644 (file)
index 0000000..0f1488e
--- /dev/null
@@ -0,0 +1,167 @@
+<?php
+/**
+ * Group all the pieces relevant to the context of a request into one instance
+ * 
+ * @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
+
+       /**
+        * Set the WebRequest object
+        *
+        * @param $r WebRequest object
+        */
+       public function setRequest( WebRequest $r ) {
+               $this->request = $r;
+       }
+
+       /**
+        * Get the WebRequest object
+        *
+        * @return WebRequest
+        */
+       public function getRequest() {
+               if ( !isset($this->request) ) {
+                       global $wgRequest; # fallback to $wg till we can improve this
+                       $this->request = $wgRequest;
+               }
+               return $this->request;
+       }
+
+       /**
+        * Set the Title object
+        *
+        * @param $t Title object
+        */
+       public function setTitle( Title $t ) {
+               $this->title = $t;
+       }
+
+       /**
+        * Get the Title object
+        *
+        * @return Title
+        */
+       public function getTitle() {
+               if ( !isset($this->title) ) {
+                       global $wgTitle; # fallback to $wg till we can improve this
+                       $this->title = $wgTitle;
+               }
+               return $this->title;
+       }
+
+       /**
+        * Get the OutputPage object
+        *
+        * @return OutputPage object
+        */
+       public function getOutput() {
+               if ( !isset($this->output) ) {
+                       $this->output = new OutputPage;
+                       $this->output->setContext( $this );
+               }
+               return $this->output;
+       }
+
+       /**
+        * Set the User object
+        *
+        * @param $u User
+        */
+       public function setUser( User $u ) {
+               $this->user = $u;
+       }
+
+       /**
+        * Get the User object
+        *
+        * @return User
+        */
+       public function getUser() {
+               if ( !isset($this->user) ) {
+                       global $wgCommandLineMode;
+                       $this->user = $wgCommandLineMode ? new User : User::newFromSession( $this->getRequest() );
+               }
+               return $this->user;
+       }
+
+       /**
+        * Get the Language object
+        *
+        * @return Language
+        */
+       public function getLang() {
+               if ( !isset($this->lang) ) {
+                       global $wgLanguageCode, $wgContLang;
+                       $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' ) ) {
+                               wfDebug( "Invalid user language code\n" );
+                               $code = $wgLanguageCode;
+                       }
+
+                       wfRunHooks( 'UserGetLanguageObject', array( $this->getUser(), &$code ) );
+
+                       if( $code === $wgLanguageCode ) {
+                               $this->lang = $wgContLang;
+                       } else {
+                               $obj = Language::factory( $code );
+                               $this->lang = $obj;
+                       }
+               }
+               return $this->lang;
+       }
+
+       /**
+        * Get the Skin object
+        *
+        * @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();
+       }
+
+       /** Helpful methods **/
+
+       /**
+        * Get a Message object with context set
+        * Parameters are the same as wfMessage()
+        *
+        * @return Message object
+        */
+       public function msg() {
+               $args = function_get_args();
+               return call_user_func_array( 'wfMessage', $args )->inLanguage( $this->getLang() )->outputPage( $this->getOut() );
+       }
+
+       /** Static methods **/
+
+       /**
+        * Get the RequestContext object associated with the main request
+        *
+        * @return RequestContext object
+        */
+       public static function getMain() {
+               static $instance = null;
+               if ( !isset($instance) ) {
+                       $instance = new self;
+               }
+               return $instance;
+       }
+
+}
+