Fux PHP Notice: Undefined property: ContribsPager::$showSizeDiff in /www/w/includes...
[lhc/web/wiklou.git] / includes / RequestContext.php
index f26847e..c0b49a1 100644 (file)
@@ -1,15 +1,81 @@
 <?php
 /**
- * Group all the pieces relevant to the context of a request into one instance
- * 
+ * Request-dependant objects containers.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @since 1.18
  *
- * @author IAlex
+ * @author Alexandre Emsenhuber
  * @author Daniel Friesen
  * @file
  */
 
-class RequestContext {
+/**
+ * Interface for objects which can provide a context on request.
+ */
+interface IContextSource {
+
+       /**
+        * Get the WebRequest object
+        *
+        * @return WebRequest
+        */
+       public function getRequest();
+
+       /**
+        * Get the Title object
+        *
+        * @return Title
+        */
+       public function getTitle();
+
+       /**
+        * Get the OutputPage object
+        *
+        * @return OutputPage object
+        */
+       public function getOutput();
+
+       /**
+        * Get the User object
+        *
+        * @return User
+        */
+       public function getUser();
+
+       /**
+        * Get the Language object
+        *
+        * @return Language
+        */
+       public function getLang();
+
+       /**
+        * Get the Skin object
+        *
+        * @return Skin
+        */
+       public function getSkin();
+}
+
+/**
+ * Group all the pieces relevant to the context of a request into one instance
+ */
+class RequestContext implements IContextSource {
 
        /**
         * @var WebRequest
@@ -233,54 +299,6 @@ class RequestContext {
        }
 }
 
-/**
- * Interface for objects which can provide a context on request.
- */
-interface IContextSource {
-
-       /**
-        * Get the WebRequest object
-        *
-        * @return WebRequest
-        */
-       public function getRequest();
-
-       /**
-        * Get the Title object
-        *
-        * @return Title
-        */
-       public function getTitle();
-
-       /**
-        * Get the OutputPage object
-        *
-        * @return OutputPage object
-        */
-       public function getOutput();
-
-       /**
-        * Get the User object
-        *
-        * @return User
-        */
-       public function getUser();
-
-       /**
-        * Get the Language object
-        *
-        * @return Language
-        */
-       public function getLang();
-
-       /**
-        * Get the Skin object
-        *
-        * @return Skin
-        */
-       public function getSkin();
-}
-
 /**
  * The simplest way of implementing IContextSource is to hold a RequestContext as a
  * member variable and provide accessors to it.
@@ -298,6 +316,11 @@ abstract class ContextSource implements IContextSource {
         * @return RequestContext
         */
        public function getContext() {
+               if ( $this->context === null ) {
+                       $class = get_class( $this );
+                       wfDebug( __METHOD__  . " ($class): called and \$context is null. Using RequestContext::getMain() for sanity\n" );
+                       $this->context = RequestContext::getMain();
+               }
                return $this->context;
        }
 
@@ -316,7 +339,7 @@ abstract class ContextSource implements IContextSource {
         * @return WebRequest
         */
        public function getRequest() {
-               return $this->context->getRequest();
+               return $this->getContext()->getRequest();
        }
 
        /**
@@ -325,7 +348,7 @@ abstract class ContextSource implements IContextSource {
         * @return Title
         */
        public function getTitle() {
-               return $this->context->getTitle();
+               return $this->getContext()->getTitle();
        }
 
        /**
@@ -334,7 +357,7 @@ abstract class ContextSource implements IContextSource {
         * @return OutputPage object
         */
        public function getOutput() {
-               return $this->context->getOutput();
+               return $this->getContext()->getOutput();
        }
 
        /**
@@ -343,7 +366,7 @@ abstract class ContextSource implements IContextSource {
         * @return User
         */
        public function getUser() {
-               return $this->context->getUser();
+               return $this->getContext()->getUser();
        }
 
        /**
@@ -352,7 +375,7 @@ abstract class ContextSource implements IContextSource {
         * @return Language
         */
        public function getLang() {
-               return $this->context->getLang();
+               return $this->getContext()->getLang();
        }
 
        /**
@@ -361,6 +384,16 @@ abstract class ContextSource implements IContextSource {
         * @return Skin
         */
        public function getSkin() {
-               return $this->context->getSkin();
+               return $this->getContext()->getSkin();
+       }
+
+       /**
+        * Get a Message object with context set
+        * Parameters are the same as wfMessage()
+        *
+        * @return Message object
+        */
+       public function msg( /* $args */ ) {
+               return call_user_func_array( array( $this->getContext(), 'msg' ), func_get_args() );
        }
 }