From 06ab9c0942f66317b20130ed12e677607783a61e Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Tue, 10 May 2016 20:47:04 +0100 Subject: [PATCH] resourceloader: Merge 'user.groups' into 'user' module This is with T92459 in mind to simplify the process of splitting the 'user' module for the styles-only queue. Consequences: * Cached HTML isn't relevant in practice since there is no caching for logged-in users and this module is only for logged-in users. Even then, cached HTML will work and may happen as browsers re-use HTML responses when revisiting a privately cached page (after 304 Not Modified). Note that OutputPage (via isKnownEmpty) only actually tries to load 'user.groups' if the wiki has 'MediaWiki:Group-*.{js,css}' pages for the current user's groups. - Old style queue request will continue to ask for user.groups which is now a FileModule with no styles (simply concats the empty string to the bundle) - Old load() request will resolve with an empty function. * The are no known dependants of 'user.groups'. If there are, they will work by proxy of it now being an empty module that just ensures 'user' is loaded. * The security origin of 'user.groups' was USER_SITEWIDE. The origin of 'user' is lower (USER_INDIVIDUAL). Pages that are restricted to USER_SITEWIDE previously received user.groups, but won't anymore. This should be fine as OutputPage::reduceAllowedModules() is mainly used to either allow everything or restrict all the way down to CORE. The only exception is disallowUserJs() if $wgAllowSiteCSSOnRestrictedPages is enabled (T73621) but that edge case was made for Common.css, not Group-*.css. Change-Id: I74cd2368ebd2989c5e1c22bea491a80beb0319dc --- autoload.php | 1 - includes/OutputPage.php | 7 -- .../ResourceLoaderUserGroupsModule.php | 70 ------------------- .../ResourceLoaderUserModule.php | 35 +++++++--- resources/Resources.php | 6 +- 5 files changed, 30 insertions(+), 89 deletions(-) delete mode 100644 includes/resourceloader/ResourceLoaderUserGroupsModule.php diff --git a/autoload.php b/autoload.php index f635bc1a92..b7e3419639 100644 --- a/autoload.php +++ b/autoload.php @@ -1154,7 +1154,6 @@ $wgAutoloadLocalClasses = [ 'ResourceLoaderUploadDialogModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUploadDialogModule.php', 'ResourceLoaderUserCSSPrefsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php', 'ResourceLoaderUserDefaultsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserDefaultsModule.php', - 'ResourceLoaderUserGroupsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserGroupsModule.php', 'ResourceLoaderUserModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserModule.php', 'ResourceLoaderUserOptionsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserOptionsModule.php', 'ResourceLoaderUserTokensModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserTokensModule.php', diff --git a/includes/OutputPage.php b/includes/OutputPage.php index d8600c1ef5..6f62ae65d3 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -3101,12 +3101,6 @@ class OutputPage extends ContextSource { $links[] = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_COMBINED ); } - // Group JS is only enabled if site JS is enabled. - $links[] = $this->makeResourceLoaderLink( - 'user.groups', - ResourceLoaderModule::TYPE_COMBINED - ); - return self::getHtmlFromLoaderLinks( $links ); } @@ -3672,7 +3666,6 @@ class OutputPage extends ContextSource { // Per-site custom styles $moduleStyles[] = 'site'; $moduleStyles[] = 'noscript'; - $moduleStyles[] = 'user.groups'; // Per-user custom styles if ( $this->getConfig()->get( 'AllowUserCss' ) && $this->getTitle()->isCssSubpage() diff --git a/includes/resourceloader/ResourceLoaderUserGroupsModule.php b/includes/resourceloader/ResourceLoaderUserGroupsModule.php deleted file mode 100644 index b225185a35..0000000000 --- a/includes/resourceloader/ResourceLoaderUserGroupsModule.php +++ /dev/null @@ -1,70 +0,0 @@ -getConfig()->get( 'UseSiteJs' ); - $useSiteCss = $this->getConfig()->get( 'UseSiteCss' ); - if ( !$useSiteJs && !$useSiteCss ) { - return []; - } - - $user = $context->getUserObj(); - if ( $user->isAnon() ) { - return []; - } - - $pages = []; - foreach ( $user->getEffectiveGroups() as $group ) { - if ( $group == '*' ) { - continue; - } - if ( $useSiteJs ) { - $pages["MediaWiki:Group-$group.js"] = [ 'type' => 'script' ]; - } - if ( $useSiteCss ) { - $pages["MediaWiki:Group-$group.css"] = [ 'type' => 'style' ]; - } - } - return $pages; - } - - /** - * Get group name - * - * @return string - */ - public function getGroup() { - return 'user'; - } -} diff --git a/includes/resourceloader/ResourceLoaderUserModule.php b/includes/resourceloader/ResourceLoaderUserModule.php index c38f8d8df7..8d4f263493 100644 --- a/includes/resourceloader/ResourceLoaderUserModule.php +++ b/includes/resourceloader/ResourceLoaderUserModule.php @@ -28,6 +28,7 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule { protected $origin = self::ORIGIN_USER_INDIVIDUAL; + protected $targets = [ 'desktop', 'mobile' ]; /** * Get list of pages used by this module @@ -36,30 +37,43 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule { * @return array List of pages */ protected function getPages( ResourceLoaderContext $context ) { - $allowUserJs = $this->getConfig()->get( 'AllowUserJs' ); - $allowUserCss = $this->getConfig()->get( 'AllowUserCss' ); - if ( !$allowUserJs && !$allowUserCss ) { - return []; - } - + $config = $this->getConfig(); $user = $context->getUserObj(); if ( $user->isAnon() ) { return []; } - // Needed so $excludepages works + // Use localised/normalised variant to ensure $excludepage matches $userPage = $user->getUserPage()->getPrefixedDBkey(); - $pages = []; - if ( $allowUserJs ) { + + if ( $config->get( 'AllowUserJs' ) ) { $pages["$userPage/common.js"] = [ 'type' => 'script' ]; $pages["$userPage/" . $context->getSkin() . '.js'] = [ 'type' => 'script' ]; } - if ( $allowUserCss ) { + + if ( $config->get( 'AllowUserCss' ) ) { $pages["$userPage/common.css"] = [ 'type' => 'style' ]; $pages["$userPage/" . $context->getSkin() . '.css'] = [ 'type' => 'style' ]; } + $useSiteJs = $config->get( 'UseSiteJs' ); + $useSiteCss = $config->get( 'UseSiteCss' ); + // User group pages are maintained site-wide and enabled with site JS/CSS. + if ( $useSiteJs || $useSiteCss ) { + foreach ( $user->getEffectiveGroups() as $group ) { + if ( $group == '*' ) { + continue; + } + if ( $useSiteJs ) { + $pages["MediaWiki:Group-$group.js"] = [ 'type' => 'script' ]; + } + if ( $useSiteCss ) { + $pages["MediaWiki:Group-$group.css"] = [ '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. @@ -69,6 +83,7 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule { // just like the keys in $pages[] above unset( $pages[$excludepage] ); } + return $pages; } diff --git a/resources/Resources.php b/resources/Resources.php index 5dde2f2829..bacf1e6a9d 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -43,7 +43,11 @@ return [ 'class' => 'ResourceLoaderWikiModule', 'styles' => [ 'MediaWiki:Filepage.css' ], ], - 'user.groups' => [ 'class' => 'ResourceLoaderUserGroupsModule' ], + 'user.groups' => [ + // Merged into 'user' since MediaWiki 1.28 - kept for back-compat + 'dependencies' => 'user', + 'targets' => [ 'desktop', 'mobile' ], + ], // Scripts managed by the current user (stored in their user space) 'user' => [ 'class' => 'ResourceLoaderUserModule' ], -- 2.20.1