* Added exporting of user preferences
authorTrevor Parscal <tparscal@users.mediawiki.org>
Tue, 14 Sep 2010 21:47:59 +0000 (21:47 +0000)
committerTrevor Parscal <tparscal@users.mediawiki.org>
Tue, 14 Sep 2010 21:47:59 +0000 (21:47 +0000)
* Renamed user.preferences to user.options
* Fixed bug that caused anonomous usernames (such as IP addresses) to be used in user style and script requests
* Fixed user options styles not loading for anon users

includes/AutoLoader.php
includes/OutputPage.php
includes/ResourceLoaderModule.php
includes/Skin.php

index 2ad6043..2e033c1 100644 (file)
@@ -203,6 +203,8 @@ $wgAutoloadLocalClasses = array(
        'ResourceLoaderWikiModule' => 'includes/ResourceLoaderModule.php',
        'ResourceLoaderFileModule' => 'includes/ResourceLoaderModule.php',
        'ResourceLoaderSiteModule' => 'includes/ResourceLoaderModule.php',
+       'ResourceLoaderUserModule' => 'includes/ResourceLoaderModule.php',
+       'ResourceLoaderUserOptionsModule' => 'includes/ResourceLoaderModule.php',
        'ResourceLoaderStartUpModule' => 'includes/ResourceLoaderModule.php',
        'ReverseChronologicalPager' => 'includes/Pager.php',
        'Revision' => 'includes/Revision.php',
index 1028e06..238f666 100644 (file)
@@ -2300,7 +2300,7 @@ class OutputPage {
                                sort( $modules );
                                $query['modules'] = implode( '|', array_unique( (array) $modules ) );
                                if ( $group === 'user' ) {
-                                       $query['user'] = $wgUser->getName();
+                                       $query['user'] = $wgUser->isLoggedIn() ? $wgUser->getName() : null;
                                }
                                // Users might change their stuff on-wiki like site or user pages, or user preferences; we need to find
                                // the highest timestamp of these user-changable modules so we can ensure cache misses upon change
@@ -2382,16 +2382,21 @@ class OutputPage {
                        );
                }
                
-               // Add user JS if enabled
-               if( $this->isUserJsAllowed() && $wgUser->isLoggedIn() ) {
+               // Add user JS if enabled - trying to load user.options as a bundle if possible
+               $userOptionsAdded = false;
+               if ( $this->isUserJsAllowed() && $wgUser->isLoggedIn() ) {
                        $action = $wgRequest->getVal( 'action', 'view' );
                        if( $this->mTitle && $this->mTitle->isJsSubpage() && $sk->userCanPreview( $action ) ) {
                                # XXX: additional security check/prompt?
                                $this->addInlineScript( $wgRequest->getText( 'wpTextbox1' ) );
                        } else {
-                               $scripts .= self::makeResourceLoaderLink( $sk, 'user', 'scripts' );
+                               $scripts .= self::makeResourceLoaderLink( $sk, array( 'user', 'user.options' ), 'scripts' );
+                               $userOptionsAdded = true;
                        }
                }
+               if ( !$userOptionsAdded ) {
+                       $scripts .= self::makeResourceLoaderLink( $sk, 'user.options', 'scripts' );
+               }
                $scripts .= "\n" . $this->mScripts;
                
                // Add site JS if enabled
index e7fc1cf..3e1d2a0 100644 (file)
@@ -813,7 +813,7 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
 /**
  * Module for user preference customizations
  */
-class ResourceLoaderUserPreferencesModule extends ResourceLoaderModule {
+class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
 
        /* Protected Members */
 
@@ -839,40 +839,44 @@ class ResourceLoaderUserPreferencesModule extends ResourceLoaderModule {
                }
        }
 
+       public function getScript( ResourceLoaderContext $context ) {
+               $user = User::newFromName( $context->getUser() );
+               $options = FormatJson::encode( $user instanceof User ? $user->getOptions() : User::getDefaultOptions() );
+               return "mediaWiki.user.options.set( $options );";
+       }
+
        public function getStyles( ResourceLoaderContext $context ) {
                global $wgAllowUserCssPrefs;
                if ( $wgAllowUserCssPrefs ) {
                        $user = User::newFromName( $context->getUser() );
-                       if ( $user === false ) {
-                               $user = User::newFromId( 0 );
-                       }
-
+                       $options = $user instanceof User ? $user->getOptions() : User::getDefaultOptions();
+                       
                        $rules = array();
-                       if ( ( $underline = $user->getOption( 'underline' ) ) < 2 ) {
-                               $rules[] = "a { text-decoration: " . ( $underline ? 'underline' : 'none' ) . "; }";
+                       if ( $options['underline'] < 2 ) {
+                               $rules[] = "a { text-decoration: " . ( $options['underline'] ? 'underline' : 'none' ) . "; }";
                        }
-                       if ( $user->getOption( 'highlightbroken' ) ) {
+                       if ( $options['highlightbroken'] ) {
                                $rules[] = "a.new, #quickbar a.new { color: #CC2200; }\n";
                        } else {
                                $rules[] = "a.new, #quickbar a.new, a.stub, #quickbar a.stub { color: inherit; }";
                                $rules[] = "a.new:after, #quickbar a.new:after { content: '?'; color: #CC2200; }";
                                $rules[] = "a.stub:after, #quickbar a.stub:after { content: '!'; color: #772233; }";
                        }
-                       if ( $user->getOption( 'justify' ) ) {
+                       if ( $options['justify'] ) {
                                $rules[] = "#article, #bodyContent, #mw_content { text-align: justify; }\n";
                        }
-                       if ( !$user->getOption( 'showtoc' ) ) {
+                       if ( !$options['showtoc'] ) {
                                $rules[] = "#toc { display: none; }\n";
                        }
-                       if ( !$user->getOption( 'editsection' ) ) {
+                       if ( !$options['editsection'] ) {
                                $rules[] = ".editsection { display: none; }\n";
                        }
-                       if ( ( $fontstyle = $user->getOption( 'editfont' ) ) !== 'default' ) {
-                               $rules[] = "textarea { font-family: $fontstyle; }\n";
+                       if ( $options['editfont'] !== 'default' ) {
+                               $rules[] = "textarea { font-family: {$options['editfont']}; }\n";
                        }
                        return array( 'all' => implode( "\n", $rules ) );
                }
-               return array();
+               return array( 'all' => 'test { color: pink; }' );
        }
 
        public function getFlip( $context ) {
index be19a29..d729152 100644 (file)
@@ -516,7 +516,7 @@ class Skin extends Linker {
 
                // Per-user preference styles
                if ( $wgAllowUserCssPrefs ) {
-                       $out->addModuleStyles( 'user.preferences' );
+                       $out->addModuleStyles( 'user.options' );
                }
 
                wfProfileOut( __METHOD__ );