Merge "Correct case for the "MediaWiki:Revdelete-reason-dropdown" link in Special...
[lhc/web/wiklou.git] / includes / resourceloader / ResourceLoaderUserModule.php
index 4791a0f..177302c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Resource loader module for user customizations.
+ *
  * 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
@@ -28,23 +30,52 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
        /* Protected Methods */
        protected $origin = self::ORIGIN_USER_INDIVIDUAL;
 
+       /**
+        * @param $context ResourceLoaderContext
+        * @return array
+        */
        protected function getPages( ResourceLoaderContext $context ) {
-               if ( $context->getUser() ) {
-                       $username = $context->getUser();
-                       return array(
-                               "$username/common.js" => array( 'ns' => NS_USER, 'type' => 'script' ),
-                               "$username/" . $context->getSkin() . '.js' => 
-                                       array( 'ns' => NS_USER, 'type' => 'script' ),
-                               "$username/common.css" => array( 'ns' => NS_USER, 'type' => 'style' ),
-                               "$username/" . $context->getSkin() . '.css' => 
-                                       array( 'ns' => NS_USER, 'type' => 'style' ),
-                       );
+               $username = $context->getUser();
+
+               if ( $username === null ) {
+                       return array();
+               }
+
+               // Get the normalized title of the user's user page
+               $userpageTitle = Title::makeTitleSafe( NS_USER, $username );
+
+               if ( !$userpageTitle instanceof Title ) {
+                       return array();
                }
-               return array();
+
+               $userpage = $userpageTitle->getPrefixedDBkey(); // Needed so $excludepages works
+
+               $pages = array(
+                       "$userpage/common.js" => array( 'type' => 'script' ),
+                       "$userpage/" . $context->getSkin() . '.js' =>
+                               array( 'type' => 'script' ),
+                       "$userpage/common.css" => array( 'type' => 'style' ),
+                       "$userpage/" . $context->getSkin() . '.css' =>
+                               array( 'type' => 'style' ),
+               );
+
+               // Hack for bug 26283: if we're on a preview page for a CSS/JS page,
+               // we need to exclude that page from this module. In that case, the excludepage
+               // parameter will be set to the name of the page we need to exclude.
+               $excludepage = $context->getRequest()->getVal( 'excludepage' );
+               if ( isset( $pages[$excludepage] ) ) {
+                       // This works because $excludepage is generated with getPrefixedDBkey(),
+                       // just like the keys in $pages[] above
+                       unset( $pages[$excludepage] );
+               }
+               return $pages;
        }
-       
+
        /* Methods */
-       
+
+       /**
+        * @return string
+        */
        public function getGroup() {
                return 'user';
        }