Merge "Improved some thumb.php error messages."
[lhc/web/wiklou.git] / includes / resourceloader / ResourceLoaderContext.php
index 33859f0..0e96c6c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Context for resource loader modules.
+ *
  * 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
@@ -21,7 +23,7 @@
  */
 
 /**
- * Object passed around to modules which contains information about the state 
+ * Object passed around to modules which contains information about the state
  * of a specific loader request
  */
 class ResourceLoaderContext {
@@ -39,10 +41,15 @@ class ResourceLoaderContext {
        protected $only;
        protected $version;
        protected $hash;
+       protected $raw;
 
        /* Methods */
 
-       public function __construct( ResourceLoader $resourceLoader, WebRequest $request ) {
+       /**
+        * @param $resourceLoader ResourceLoader
+        * @param $request WebRequest
+        */
+       public function __construct( $resourceLoader, WebRequest $request ) {
                global $wgDefaultSkin, $wgResourceLoaderDebug;
 
                $this->resourceLoader = $resourceLoader;
@@ -58,12 +65,15 @@ class ResourceLoaderContext {
                $this->debug     = $request->getFuzzyBool( 'debug', $wgResourceLoaderDebug );
                $this->only      = $request->getVal( 'only' );
                $this->version   = $request->getVal( 'version' );
+               $this->raw       = $request->getFuzzyBool( 'raw' );
 
-               if ( !$this->skin ) {
+               $skinnames = Skin::getSkinNames();
+               // If no skin is specified, or we don't recognize the skin, use the default skin
+               if ( !$this->skin || !isset( $skinnames[$this->skin] ) ) {
                        $this->skin = $wgDefaultSkin;
                }
        }
-       
+
        /**
         * Expand a string of the form jquery.foo,bar|jquery.ui.baz,quux to
         * an array of module names like array( 'jquery.foo', 'jquery.bar',
@@ -73,6 +83,8 @@ class ResourceLoaderContext {
         */
        public static function expandModuleNames( $modules ) {
                $retval = array();
+               // For backwards compatibility with an earlier hack, replace ! with .
+               $modules = str_replace( '!', '.', $modules );
                $exploded = explode( '|', $modules );
                foreach ( $exploded as $group ) {
                        if ( strpos( $group, ',' ) === false ) {
@@ -98,6 +110,14 @@ class ResourceLoaderContext {
                return $retval;
        }
 
+       /**
+        * Return a dummy ResourceLoaderContext object suitable for passing into things that don't "really" need a context
+        * @return ResourceLoaderContext
+        */
+       public static function newDummyContext() {
+               return new self( null, new FauxRequest( array() ) );
+       }
+
        /**
         * @return ResourceLoader
         */
@@ -140,22 +160,22 @@ class ResourceLoaderContext {
                if ( $this->direction === null ) {
                        $this->direction = $this->request->getVal( 'dir' );
                        if ( !$this->direction ) {
-                               global $wgContLang;
-                               $this->direction = $wgContLang->getDir();
+                               # directionality based on user language (see bug 6100)
+                               $this->direction = Language::factory( $this->getLanguage() )->getDir();
                        }
                }
                return $this->direction;
        }
 
        /**
-        * @return string
+        * @return string|null
         */
        public function getSkin() {
                return $this->skin;
        }
 
        /**
-        * @return string
+        * @return string|null
         */
        public function getUser() {
                return $this->user;
@@ -169,19 +189,26 @@ class ResourceLoaderContext {
        }
 
        /**
-        * @return String
+        * @return String|null
         */
        public function getOnly() {
                return $this->only;
        }
 
        /**
-        * @return String
+        * @return String|null
         */
        public function getVersion() {
                return $this->version;
        }
 
+       /**
+        * @return bool
+        */
+       public function getRaw() {
+               return $this->raw;
+       }
+
        /**
         * @return bool
         */
@@ -209,7 +236,7 @@ class ResourceLoaderContext {
        public function getHash() {
                if ( !isset( $this->hash ) ) {
                        $this->hash = implode( '|', array(
-                               $this->getLanguage(), $this->getDirection(), $this->skin, $this->user, 
+                               $this->getLanguage(), $this->getDirection(), $this->skin, $this->user,
                                $this->debug, $this->only, $this->version
                        ) );
                }