From 1329158215ff8559b99b24faeda5f4752885b081 Mon Sep 17 00:00:00 2001 From: Trevor Parscal Date: Tue, 14 Sep 2010 21:47:59 +0000 Subject: [PATCH] * Added exporting of user preferences * 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 | 2 ++ includes/OutputPage.php | 13 +++++++++---- includes/ResourceLoaderModule.php | 32 +++++++++++++++++-------------- includes/Skin.php | 2 +- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 2ad6043df6..2e033c19d7 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -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', diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 1028e06e5b..238f666914 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -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 diff --git a/includes/ResourceLoaderModule.php b/includes/ResourceLoaderModule.php index e7fc1cf52c..3e1d2a0ace 100644 --- a/includes/ResourceLoaderModule.php +++ b/includes/ResourceLoaderModule.php @@ -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 ) { diff --git a/includes/Skin.php b/includes/Skin.php index be19a29e83..d7291523c4 100644 --- a/includes/Skin.php +++ b/includes/Skin.php @@ -516,7 +516,7 @@ class Skin extends Linker { // Per-user preference styles if ( $wgAllowUserCssPrefs ) { - $out->addModuleStyles( 'user.preferences' ); + $out->addModuleStyles( 'user.options' ); } wfProfileOut( __METHOD__ ); -- 2.20.1