Merge "resources: Remove 'jquery.mockjax' module"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sun, 3 Mar 2019 18:18:15 +0000 (18:18 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 3 Mar 2019 18:18:15 +0000 (18:18 +0000)
39 files changed:
.phpcs.xml
HISTORY
autoload.php
docs/injection.txt
includes/ConfiguredReadOnlyMode.php
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/ReadOnlyMode.php
includes/Setup.php
includes/config/ConfigFactory.php
includes/dao/DBAccessBase.php
includes/installer/Installer.php
includes/installer/WebInstaller.php
includes/objectcache/ObjectCache.php
includes/password/PasswordFactory.php
includes/specialpage/RedirectSpecialArticle.php [new file with mode: 0644]
includes/specialpage/RedirectSpecialPage.php
includes/specialpage/SpecialRedirectToSpecial.php [new file with mode: 0644]
includes/specials/SpecialListusers.php
includes/specials/SpecialMyRedirectPages.php [deleted file]
includes/specials/redirects/SpecialAllMyUploads.php [new file with mode: 0644]
includes/specials/redirects/SpecialListAdmins.php [new file with mode: 0644]
includes/specials/redirects/SpecialListBots.php [new file with mode: 0644]
includes/specials/redirects/SpecialMycontributions.php [new file with mode: 0644]
includes/specials/redirects/SpecialMypage.php [new file with mode: 0644]
includes/specials/redirects/SpecialMytalk.php [new file with mode: 0644]
includes/specials/redirects/SpecialMyuploads.php [new file with mode: 0644]
maintenance/cleanupPreferences.php
maintenance/deleteBatch.php
maintenance/includes/BackupDumper.php
maintenance/includes/MigrateActors.php
maintenance/mergeMessageFileList.php
maintenance/mysql.php
maintenance/orphans.php
maintenance/pageExists.php
maintenance/populateBacklinkNamespace.php
maintenance/protect.php
maintenance/updateCollation.php
maintenance/updateSpecialPages.php

index a091fcc..784fefc 100644 (file)
                <exclude-pattern>*/includes/specials/SpecialMostlinkedtemplates\.php</exclude-pattern>
                <exclude-pattern>*/includes/specials/SpecialMostrevisions\.php</exclude-pattern>
                <exclude-pattern>*/includes/specials/SpecialMovepage\.php</exclude-pattern>
-               <exclude-pattern>*/includes/specials/SpecialMyRedirectPages\.php</exclude-pattern>
                <exclude-pattern>*/includes/specials/SpecialNewimages\.php</exclude-pattern>
                <exclude-pattern>*/includes/specials/SpecialRandompage\.php</exclude-pattern>
                <exclude-pattern>*/includes/specials/SpecialShortpages\.php</exclude-pattern>
                <exclude-pattern>*/includes/RevisionList\.php</exclude-pattern>
                <exclude-pattern>*/includes/search/SearchEngine\.php</exclude-pattern>
                <exclude-pattern>*/includes/specialpage/LoginSignupSpecialPage\.php</exclude-pattern>
-               <exclude-pattern>*/includes/specialpage/RedirectSpecialPage\.php</exclude-pattern>
                <exclude-pattern>*/includes/specials/forms/PreferencesFormLegacy\.php</exclude-pattern>
-               <exclude-pattern>*/includes/specials/SpecialListusers\.php</exclude-pattern>
-               <exclude-pattern>*/includes/specials/SpecialMyRedirectPages\.php</exclude-pattern>
                <exclude-pattern>*/includes/StubObject\.php</exclude-pattern>
                <exclude-pattern>*/includes/upload/UploadStash\.php</exclude-pattern>
                <exclude-pattern>*/includes/utils/AutoloadGenerator\.php</exclude-pattern>
diff --git a/HISTORY b/HISTORY
index 72ff437..a926069 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -522,8 +522,8 @@ because of Phabricator reports.
 * SearchResult::setExtensionData argument has been changed from accepting an
   array to accepting a Closure that returns the array when called.
 * Class CryptRand, everything in MWCryptRand except generateHex() and function
-  MediaWikiServices::getCryptRand() are deprecated, use random_bytes() to
-  generate cryptographically secure random byte sequences.
+  MediaWikiServices::getInstance()->getCryptRand() are deprecated, use
+  random_bytes() to generate cryptographically secure random byte sequences.
 * Parser::getConverterLanguage() is deprecated.  Use ::getTargetLanguage()
   instead.
 * Language::markNoConversion() is deprecated.  It confused readers because
@@ -590,10 +590,12 @@ because of Phabricator reports.
 * All MagicWord static methods are now deprecated.  Use the MagicWordFactory
   methods instead.
 * PasswordFactory::init is deprecated. To get a password factory with the
-  standard configuration, use MediaWikiServices::getPasswordFactory.
-* $wgContLang is deprecated, use MediaWikiServices::getContentLanguage()
+  standard configuration, use
+  MediaWikiServices::getInstance()->getPasswordFactory.
+* $wgContLang is deprecated, use
+  MediaWikiServices::getInstance()->getContentLanguage() instead.
+* $wgParser is deprecated, use MediaWikiServices::getInstance()->getParser()
   instead.
-* $wgParser is deprecated, use MediaWikiServices::getParser() instead.
 * wfGetMainCache() is deprecated, use ObjectCache::getLocalClusterInstance()
   instead.
 * wfGetCache() is deprecated, use ObjectCache::getInstance() instead.
index 3bf4582..405d35e 100644 (file)
@@ -1205,7 +1205,7 @@ $wgAutoloadLocalClasses = [
        'RecentChangesUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/RecentChangesUpdateJob.php',
        'RecompressTracked' => __DIR__ . '/maintenance/storage/recompressTracked.php',
        'RecountCategories' => __DIR__ . '/maintenance/recountCategories.php',
-       'RedirectSpecialArticle' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
+       'RedirectSpecialArticle' => __DIR__ . '/includes/specialpage/RedirectSpecialArticle.php',
        'RedirectSpecialPage' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
        'RedisBagOStuff' => __DIR__ . '/includes/libs/objectcache/RedisBagOStuff.php',
        'RedisConnRef' => __DIR__ . '/includes/libs/redis/RedisConnRef.php',
@@ -1349,7 +1349,7 @@ $wgAutoloadLocalClasses = [
        'SlotDiffRenderer' => __DIR__ . '/includes/diff/SlotDiffRenderer.php',
        'SpecialActiveUsers' => __DIR__ . '/includes/specials/SpecialActiveusers.php',
        'SpecialAllMessages' => __DIR__ . '/includes/specials/SpecialAllMessages.php',
-       'SpecialAllMyUploads' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+       'SpecialAllMyUploads' => __DIR__ . '/includes/specials/redirects/SpecialAllMyUploads.php',
        'SpecialAllPages' => __DIR__ . '/includes/specials/SpecialAllPages.php',
        'SpecialApiHelp' => __DIR__ . '/includes/specials/SpecialApiHelp.php',
        'SpecialApiSandbox' => __DIR__ . '/includes/specials/SpecialApiSandbox.php',
@@ -1379,8 +1379,8 @@ $wgAutoloadLocalClasses = [
        'SpecialImport' => __DIR__ . '/includes/specials/SpecialImport.php',
        'SpecialJavaScriptTest' => __DIR__ . '/includes/specials/SpecialJavaScriptTest.php',
        'SpecialLinkAccounts' => __DIR__ . '/includes/specials/SpecialLinkAccounts.php',
-       'SpecialListAdmins' => __DIR__ . '/includes/specials/SpecialListusers.php',
-       'SpecialListBots' => __DIR__ . '/includes/specials/SpecialListusers.php',
+       'SpecialListAdmins' => __DIR__ . '/includes/specials/redirects/SpecialListAdmins.php',
+       'SpecialListBots' => __DIR__ . '/includes/specials/redirects/SpecialListBots.php',
        'SpecialListFiles' => __DIR__ . '/includes/specials/SpecialListfiles.php',
        'SpecialListGrants' => __DIR__ . '/includes/specials/SpecialListgrants.php',
        'SpecialListGroupRights' => __DIR__ . '/includes/specials/SpecialListgrouprights.php',
@@ -1389,10 +1389,10 @@ $wgAutoloadLocalClasses = [
        'SpecialLog' => __DIR__ . '/includes/specials/SpecialLog.php',
        'SpecialMergeHistory' => __DIR__ . '/includes/specials/SpecialMergeHistory.php',
        'SpecialMyLanguage' => __DIR__ . '/includes/specials/SpecialMyLanguage.php',
-       'SpecialMycontributions' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
-       'SpecialMypage' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
-       'SpecialMytalk' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
-       'SpecialMyuploads' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+       'SpecialMycontributions' => __DIR__ . '/includes/specials/redirects/SpecialMycontributions.php',
+       'SpecialMypage' => __DIR__ . '/includes/specials/redirects/SpecialMypage.php',
+       'SpecialMytalk' => __DIR__ . '/includes/specials/redirects/SpecialMytalk.php',
+       'SpecialMyuploads' => __DIR__ . '/includes/specials/redirects/SpecialMyuploads.php',
        'SpecialNewFiles' => __DIR__ . '/includes/specials/SpecialNewimages.php',
        'SpecialNewpages' => __DIR__ . '/includes/specials/SpecialNewpages.php',
        'SpecialPage' => __DIR__ . '/includes/specialpage/SpecialPage.php',
@@ -1414,7 +1414,7 @@ $wgAutoloadLocalClasses = [
        'SpecialRecentChanges' => __DIR__ . '/includes/specials/SpecialRecentchanges.php',
        'SpecialRecentChangesLinked' => __DIR__ . '/includes/specials/SpecialRecentchangeslinked.php',
        'SpecialRedirect' => __DIR__ . '/includes/specials/SpecialRedirect.php',
-       'SpecialRedirectToSpecial' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
+       'SpecialRedirectToSpecial' => __DIR__ . '/includes/specialpage/SpecialRedirectToSpecial.php',
        'SpecialRemoveCredentials' => __DIR__ . '/includes/specials/SpecialRemoveCredentials.php',
        'SpecialResetTokens' => __DIR__ . '/includes/specials/SpecialResetTokens.php',
        'SpecialRevisionDelete' => __DIR__ . '/includes/specials/SpecialRevisiondelete.php',
index 2badea9..83a14c7 100644 (file)
@@ -219,7 +219,7 @@ already known to MediaWikiServices (if not, see above).
   variables.
 * Add a constructor to MyExtHooks that takes a Bar service as a parameter.
 * Add a static method called newFromGlobalState() with no parameters. It should
-  just return new MyExtHooks( MediaWikiServices::getBar() ).
+  just return new MyExtHooks( MediaWikiServices::getInstance()->getBar() ).
 * The original static handler method onFoo( $x ) is then implemented as
   self::newFromGlobalState()->doFoo( $x ).
 
index af7c7cb..17c28ec 100644 (file)
@@ -2,7 +2,7 @@
 
 /**
  * A read-only mode service which does not depend on LoadBalancer.
- * To obtain an instance, use MediaWikiServices::getConfiguredReadOnlyMode().
+ * To obtain an instance, use MediaWikiServices::getInstance()->getConfiguredReadOnlyMode().
  *
  * @since 1.29
  */
index 073e539..fb31249 100644 (file)
@@ -6458,7 +6458,7 @@ $wgStatsdServer = false;
 /**
  * Prefix for metric names sent to $wgStatsdServer.
  *
- * @see MediaWikiServices::getStatsdDataFactory
+ * @see MediaWikiServices::getInstance()->getStatsdDataFactory
  * @see BufferingStatsdDataFactory
  * @since 1.25
  */
index 51fe167..319bf63 100644 (file)
@@ -2657,8 +2657,8 @@ function wfGetDB( $db, $groups = [], $wiki = false ) {
 /**
  * Get a load balancer object.
  *
- * @deprecated since 1.27, use MediaWikiServices::getDBLoadBalancer()
- *              or MediaWikiServices::getDBLoadBalancerFactory() instead.
+ * @deprecated since 1.27, use MediaWikiServices::getInstance()->getDBLoadBalancer()
+ *              or MediaWikiServices::getInstance()->getDBLoadBalancerFactory() instead.
  *
  * @param string|bool $wiki Wiki ID, or false for the current wiki
  * @return \Wikimedia\Rdbms\LoadBalancer
@@ -2675,7 +2675,7 @@ function wfGetLB( $wiki = false ) {
 /**
  * Get the load balancer factory object
  *
- * @deprecated since 1.27, use MediaWikiServices::getDBLoadBalancerFactory() instead.
+ * @deprecated since 1.27, use MediaWikiServices::getInstance()->getDBLoadBalancerFactory() instead.
  *
  * @return \Wikimedia\Rdbms\LBFactory
  */
index 547c2d5..e767359 100644 (file)
@@ -4,7 +4,7 @@ use Wikimedia\Rdbms\LoadBalancer;
 
 /**
  * A service class for fetching the wiki's current read-only mode.
- * To obtain an instance, use MediaWikiServices::getReadOnlyMode().
+ * To obtain an instance, use MediaWikiServices::getInstance()->getReadOnlyMode().
  *
  * @since 1.29
  */
index f8b9546..0cf8b51 100644 (file)
@@ -897,7 +897,7 @@ $wgOut = RequestContext::getMain()->getOutput(); // BackCompat
 
 /**
  * @var Parser $wgParser
- * @deprecated since 1.32, use MediaWikiServices::getParser() instead
+ * @deprecated since 1.32, use MediaWikiServices::getInstance()->getParser() instead
  */
 $wgParser = new StubObject( 'wgParser', function () {
        return MediaWikiServices::getInstance()->getParser();
index 769364f..696bbf4 100644 (file)
@@ -44,7 +44,7 @@ class ConfigFactory implements SalvageableService {
        protected $configs = [];
 
        /**
-        * @deprecated since 1.27, use MediaWikiServices::getConfigFactory() instead.
+        * @deprecated since 1.27, use MediaWikiServices::getInstance()->getConfigFactory() instead.
         *
         * @return ConfigFactory
         */
index 79c0385..8900962 100644 (file)
@@ -84,7 +84,7 @@ abstract class DBAccessBase implements IDBAccessObject {
        /**
         * Get the database type used for read operations.
         *
-        * @see MediaWikiServices::getDBLoadBalancer
+        * @see MediaWikiServices::getInstance()->getDBLoadBalancer
         *
         * @since 1.21
         *
index 3ac152e..bc3fe29 100644 (file)
@@ -686,10 +686,10 @@ abstract class Installer {
         * @return string
         */
        public function parse( $text, $lineStart = false ) {
-               global $wgParser;
+               $parser = MediaWikiServices::getInstance()->getParser();
 
                try {
-                       $out = $wgParser->parse( $text, $this->parserTitle, $this->parserOptions, $lineStart );
+                       $out = $parser->parse( $text, $this->parserTitle, $this->parserOptions, $lineStart );
                        $html = $out->getText( [
                                'enableSectionEditLinks' => false,
                                'unwrap' => true,
index cda8612..e1070c6 100644 (file)
@@ -140,9 +140,9 @@ class WebInstaller extends Installer {
                $this->request = $request;
 
                // Add parser hooks
-               global $wgParser;
-               $wgParser->setHook( 'downloadlink', [ $this, 'downloadLinkHook' ] );
-               $wgParser->setHook( 'doclink', [ $this, 'docLink' ] );
+               $parser = MediaWikiServices::getInstance()->getParser();
+               $parser->setHook( 'downloadlink', [ $this, 'downloadLinkHook' ] );
+               $parser->setHook( 'doclink', [ $this, 'docLink' ] );
        }
 
        /**
index 14d63a1..dc8b146 100644 (file)
@@ -365,7 +365,7 @@ class ObjectCache {
         *
         * @since 1.26
         * @return WANObjectCache
-        * @deprecated Since 1.28 Use MediaWikiServices::getMainWANObjectCache()
+        * @deprecated Since 1.28 Use MediaWikiServices::getInstance()->getMainWANObjectCache()
         */
        public static function getMainWANInstance() {
                return MediaWikiServices::getInstance()->getMainWANObjectCache();
@@ -388,7 +388,7 @@ class ObjectCache {
         *
         * @return BagOStuff
         * @since 1.26
-        * @deprecated Since 1.28 Use MediaWikiServices::getMainObjectStash
+        * @deprecated Since 1.28 Use MediaWikiServices::getInstance()->getMainObjectStash()
         */
        public static function getMainStashInstance() {
                return MediaWikiServices::getInstance()->getMainObjectStash();
index f7b283b..96cc3fe 100644 (file)
@@ -47,7 +47,8 @@ final class PasswordFactory {
 
        /**
         * Construct a new password factory.
-        * Most of the time you'll want to use MediaWikiServices::getPasswordFactory instead.
+        * Most of the time you'll want to use MediaWikiServices::getInstance()->getPasswordFactory
+        * instead.
         * @param array $config Mapping of password type => config
         * @param string $default Default password type
         * @see PasswordFactory::register
diff --git a/includes/specialpage/RedirectSpecialArticle.php b/includes/specialpage/RedirectSpecialArticle.php
new file mode 100644 (file)
index 0000000..b8dce3f
--- /dev/null
@@ -0,0 +1,109 @@
+<?php
+/**
+ * Shortcuts to construct a special page alias.
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Superclass for any RedirectSpecialPage which redirects the user
+ * to a particular article (as opposed to user contributions, logs, etc.).
+ *
+ * For security reasons these special pages are restricted to pass on
+ * the following subset of GET parameters to the target page while
+ * removing all others:
+ *
+ * - useskin, uselang, printable: to alter the appearance of the resulting page
+ *
+ * - redirect: allows viewing one's user page or talk page even if it is a
+ * redirect.
+ *
+ * - rdfrom: allows redirecting to one's user page or talk page from an
+ * external wiki with the "Redirect from..." notice.
+ *
+ * - limit, offset: Useful for linking to history of one's own user page or
+ * user talk page. For example, this would be a link to "the last edit to your
+ * user talk page in the year 2010":
+ * https://en.wikipedia.org/wiki/Special:MyPage?offset=20110000000000&limit=1&action=history
+ *
+ * - feed: would allow linking to the current user's RSS feed for their user
+ * talk page:
+ * https://en.wikipedia.org/w/index.php?title=Special:MyTalk&action=history&feed=rss
+ *
+ * - preloadtitle: Can be used to provide a default section title for a
+ * preloaded new comment on one's own talk page.
+ *
+ * - summary : Can be used to provide a default edit summary for a preloaded
+ * edit to one's own user page or talk page.
+ *
+ * - preview: Allows showing/hiding preview on first edit regardless of user
+ * preference, useful for preloaded edits where you know preview wouldn't be
+ * useful.
+ *
+ * - redlink: Affects the message the user sees if their talk page/user talk
+ * page does not currently exist. Avoids confusion for newbies with no user
+ * pages over why they got a "permission error" following this link:
+ * https://en.wikipedia.org/w/index.php?title=Special:MyPage&redlink=1
+ *
+ * - debug: determines whether the debug parameter is passed to load.php,
+ * which disables reformatting and allows scripts to be debugged. Useful
+ * when debugging scripts that manipulate one's own user page or talk page.
+ *
+ * @par Hook extension:
+ * Extensions can add to the redirect parameters list by using the hook
+ * RedirectSpecialArticleRedirectParams
+ *
+ * This hook allows extensions which add GET parameters like FlaggedRevs to
+ * retain those parameters when redirecting using special pages.
+ *
+ * @par Hook extension example:
+ * @code
+ *    $wgHooks['RedirectSpecialArticleRedirectParams'][] =
+ *        'MyExtensionHooks::onRedirectSpecialArticleRedirectParams';
+ *    public static function onRedirectSpecialArticleRedirectParams( &$redirectParams ) {
+ *        $redirectParams[] = 'stable';
+ *        return true;
+ *    }
+ * @endcode
+ *
+ * @ingroup SpecialPage
+ */
+abstract class RedirectSpecialArticle extends RedirectSpecialPage {
+       function __construct( $name ) {
+               parent::__construct( $name );
+               $redirectParams = [
+                       'action',
+                       'redirect', 'rdfrom',
+                       # Options for preloaded edits
+                       'preload', 'preloadparams', 'editintro', 'preloadtitle', 'summary', 'nosummary',
+                       # Options for overriding user settings
+                       'preview', 'minor', 'watchthis',
+                       # Options for history/diffs
+                       'section', 'oldid', 'diff', 'dir',
+                       'limit', 'offset', 'feed',
+                       # Misc options
+                       'redlink',
+                       # Options for action=raw; missing ctype can break JS or CSS in some browsers
+                       'ctype', 'maxage', 'smaxage',
+               ];
+
+               Hooks::run( "RedirectSpecialArticleRedirectParams", [ &$redirectParams ] );
+               $this->mAllowedRedirectParams = $redirectParams;
+       }
+}
index 8d39c99..01a88f4 100644 (file)
@@ -112,124 +112,3 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
                throw new MWException( "RedirectSpecialPage $class doesn't redirect!" );
        }
 }
-
-/**
- * @ingroup SpecialPage
- */
-abstract class SpecialRedirectToSpecial extends RedirectSpecialPage {
-       /** @var string Name of redirect target */
-       protected $redirName;
-
-       /** @var string Name of subpage of redirect target */
-       protected $redirSubpage;
-
-       function __construct(
-               $name, $redirName, $redirSubpage = false,
-               $allowedRedirectParams = [], $addedRedirectParams = []
-       ) {
-               parent::__construct( $name );
-               $this->redirName = $redirName;
-               $this->redirSubpage = $redirSubpage;
-               $this->mAllowedRedirectParams = $allowedRedirectParams;
-               $this->mAddedRedirectParams = $addedRedirectParams;
-       }
-
-       /**
-        * @param string|null $subpage
-        * @return Title|bool
-        */
-       public function getRedirect( $subpage ) {
-               if ( $this->redirSubpage === false ) {
-                       return SpecialPage::getTitleFor( $this->redirName, $subpage );
-               }
-
-               return SpecialPage::getTitleFor( $this->redirName, $this->redirSubpage );
-       }
-}
-
-/**
- * Superclass for any RedirectSpecialPage which redirects the user
- * to a particular article (as opposed to user contributions, logs, etc.).
- *
- * For security reasons these special pages are restricted to pass on
- * the following subset of GET parameters to the target page while
- * removing all others:
- *
- * - useskin, uselang, printable: to alter the appearance of the resulting page
- *
- * - redirect: allows viewing one's user page or talk page even if it is a
- * redirect.
- *
- * - rdfrom: allows redirecting to one's user page or talk page from an
- * external wiki with the "Redirect from..." notice.
- *
- * - limit, offset: Useful for linking to history of one's own user page or
- * user talk page. For example, this would be a link to "the last edit to your
- * user talk page in the year 2010":
- * https://en.wikipedia.org/wiki/Special:MyPage?offset=20110000000000&limit=1&action=history
- *
- * - feed: would allow linking to the current user's RSS feed for their user
- * talk page:
- * https://en.wikipedia.org/w/index.php?title=Special:MyTalk&action=history&feed=rss
- *
- * - preloadtitle: Can be used to provide a default section title for a
- * preloaded new comment on one's own talk page.
- *
- * - summary : Can be used to provide a default edit summary for a preloaded
- * edit to one's own user page or talk page.
- *
- * - preview: Allows showing/hiding preview on first edit regardless of user
- * preference, useful for preloaded edits where you know preview wouldn't be
- * useful.
- *
- * - redlink: Affects the message the user sees if their talk page/user talk
- * page does not currently exist. Avoids confusion for newbies with no user
- * pages over why they got a "permission error" following this link:
- * https://en.wikipedia.org/w/index.php?title=Special:MyPage&redlink=1
- *
- * - debug: determines whether the debug parameter is passed to load.php,
- * which disables reformatting and allows scripts to be debugged. Useful
- * when debugging scripts that manipulate one's own user page or talk page.
- *
- * @par Hook extension:
- * Extensions can add to the redirect parameters list by using the hook
- * RedirectSpecialArticleRedirectParams
- *
- * This hook allows extensions which add GET parameters like FlaggedRevs to
- * retain those parameters when redirecting using special pages.
- *
- * @par Hook extension example:
- * @code
- *    $wgHooks['RedirectSpecialArticleRedirectParams'][] =
- *        'MyExtensionHooks::onRedirectSpecialArticleRedirectParams';
- *    public static function onRedirectSpecialArticleRedirectParams( &$redirectParams ) {
- *        $redirectParams[] = 'stable';
- *        return true;
- *    }
- * @endcode
- *
- * @ingroup SpecialPage
- */
-abstract class RedirectSpecialArticle extends RedirectSpecialPage {
-       function __construct( $name ) {
-               parent::__construct( $name );
-               $redirectParams = [
-                       'action',
-                       'redirect', 'rdfrom',
-                       # Options for preloaded edits
-                       'preload', 'preloadparams', 'editintro', 'preloadtitle', 'summary', 'nosummary',
-                       # Options for overriding user settings
-                       'preview', 'minor', 'watchthis',
-                       # Options for history/diffs
-                       'section', 'oldid', 'diff', 'dir',
-                       'limit', 'offset', 'feed',
-                       # Misc options
-                       'redlink',
-                       # Options for action=raw; missing ctype can break JS or CSS in some browsers
-                       'ctype', 'maxage', 'smaxage',
-               ];
-
-               Hooks::run( "RedirectSpecialArticleRedirectParams", [ &$redirectParams ] );
-               $this->mAllowedRedirectParams = $redirectParams;
-       }
-}
diff --git a/includes/specialpage/SpecialRedirectToSpecial.php b/includes/specialpage/SpecialRedirectToSpecial.php
new file mode 100644 (file)
index 0000000..e30278e
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Shortcuts to construct a special page alias.
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * @ingroup SpecialPage
+ */
+abstract class SpecialRedirectToSpecial extends RedirectSpecialPage {
+       /** @var string Name of redirect target */
+       protected $redirName;
+
+       /** @var string Name of subpage of redirect target */
+       protected $redirSubpage;
+
+       function __construct(
+               $name, $redirName, $redirSubpage = false,
+               $allowedRedirectParams = [], $addedRedirectParams = []
+       ) {
+               parent::__construct( $name );
+               $this->redirName = $redirName;
+               $this->redirSubpage = $redirSubpage;
+               $this->mAllowedRedirectParams = $allowedRedirectParams;
+               $this->mAddedRedirectParams = $addedRedirectParams;
+       }
+
+       /**
+        * @param string|null $subpage
+        * @return Title|bool
+        */
+       public function getRedirect( $subpage ) {
+               if ( $this->redirSubpage === false ) {
+                       return SpecialPage::getTitleFor( $this->redirName, $subpage );
+               }
+
+               return SpecialPage::getTitleFor( $this->redirName, $this->redirSubpage );
+       }
+}
index dee2968..2c35815 100644 (file)
@@ -77,25 +77,3 @@ class SpecialListUsers extends IncludableSpecialPage {
                return 'users';
        }
 }
-
-/**
- * Redirect page: Special:ListAdmins --> Special:ListUsers/sysop.
- *
- * @ingroup SpecialPage
- */
-class SpecialListAdmins extends SpecialRedirectToSpecial {
-       function __construct() {
-               parent::__construct( 'Listadmins', 'Listusers', 'sysop' );
-       }
-}
-
-/**
- * Redirect page: Special:ListBots --> Special:ListUsers/bot.
- *
- * @ingroup SpecialPage
- */
-class SpecialListBots extends SpecialRedirectToSpecial {
-       function __construct() {
-               parent::__construct( 'Listbots', 'Listusers', 'bot' );
-       }
-}
diff --git a/includes/specials/SpecialMyRedirectPages.php b/includes/specials/SpecialMyRedirectPages.php
deleted file mode 100644 (file)
index 077fbf1..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-<?php
-/**
- * Special pages that are used to get user independent links pointing to
- * current user's pages (user page, talk page, contributions, etc.).
- * This can let us cache a single copy of some generated content for all
- * users or be linked in wikitext help pages.
- *
- * 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
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
-
-/**
- * Special page pointing to current user's user page.
- *
- * @ingroup SpecialPage
- */
-class SpecialMypage extends RedirectSpecialArticle {
-       public function __construct() {
-               parent::__construct( 'Mypage' );
-       }
-
-       /**
-        * @param string|null $subpage
-        * @return Title
-        */
-       public function getRedirect( $subpage ) {
-               if ( $subpage === null || $subpage === '' ) {
-                       return Title::makeTitle( NS_USER, $this->getUser()->getName() );
-               }
-
-               return Title::makeTitle( NS_USER, $this->getUser()->getName() . '/' . $subpage );
-       }
-
-       /**
-        * Target identifies a specific User. See T109724.
-        *
-        * @since 1.27
-        * @return bool
-        */
-       public function personallyIdentifiableTarget() {
-               return true;
-       }
-}
-
-/**
- * Special page pointing to current user's talk page.
- *
- * @ingroup SpecialPage
- */
-class SpecialMytalk extends RedirectSpecialArticle {
-       public function __construct() {
-               parent::__construct( 'Mytalk' );
-       }
-
-       /**
-        * @param string|null $subpage
-        * @return Title
-        */
-       public function getRedirect( $subpage ) {
-               if ( $subpage === null || $subpage === '' ) {
-                       return Title::makeTitle( NS_USER_TALK, $this->getUser()->getName() );
-               }
-
-               return Title::makeTitle( NS_USER_TALK, $this->getUser()->getName() . '/' . $subpage );
-       }
-
-       /**
-        * Target identifies a specific User. See T109724.
-        *
-        * @since 1.27
-        * @return bool
-        */
-       public function personallyIdentifiableTarget() {
-               return true;
-       }
-}
-
-/**
- * Special page pointing to current user's contributions.
- *
- * @ingroup SpecialPage
- */
-class SpecialMycontributions extends RedirectSpecialPage {
-       public function __construct() {
-               parent::__construct( 'Mycontributions' );
-               $this->mAllowedRedirectParams = [ 'limit', 'namespace', 'tagfilter',
-                       'offset', 'dir', 'year', 'month', 'feed', 'deletedOnly',
-                       'nsInvert', 'associated', 'newOnly', 'topOnly', 'start', 'end' ];
-       }
-
-       /**
-        * @param string|null $subpage
-        * @return Title
-        */
-       public function getRedirect( $subpage ) {
-               return SpecialPage::getTitleFor( 'Contributions', $this->getUser()->getName() );
-       }
-
-       /**
-        * Target identifies a specific User. See T109724.
-        *
-        * @since 1.27
-        * @return bool
-        */
-       public function personallyIdentifiableTarget() {
-               return true;
-       }
-}
-
-/**
- * Special page pointing to current user's uploaded files.
- *
- * @ingroup SpecialPage
- */
-class SpecialMyuploads extends RedirectSpecialPage {
-       public function __construct() {
-               parent::__construct( 'Myuploads' );
-               $this->mAllowedRedirectParams = [ 'limit', 'ilshowall', 'ilsearch' ];
-       }
-
-       /**
-        * @param string|null $subpage
-        * @return Title
-        */
-       public function getRedirect( $subpage ) {
-               return SpecialPage::getTitleFor( 'Listfiles', $this->getUser()->getName() );
-       }
-
-       /**
-        * Target identifies a specific User. See T109724.
-        *
-        * @since 1.27
-        * @return bool
-        */
-       public function personallyIdentifiableTarget() {
-               return true;
-       }
-}
-
-/**
- * Special page pointing to current user's uploaded files (including old versions).
- *
- * @ingroup SpecialPage
- */
-class SpecialAllMyUploads extends RedirectSpecialPage {
-       public function __construct() {
-               parent::__construct( 'AllMyUploads' );
-               $this->mAllowedRedirectParams = [ 'limit', 'ilsearch' ];
-       }
-
-       /**
-        * @param string|null $subpage
-        * @return Title
-        */
-       public function getRedirect( $subpage ) {
-               $this->mAddedRedirectParams['ilshowall'] = 1;
-
-               return SpecialPage::getTitleFor( 'Listfiles', $this->getUser()->getName() );
-       }
-
-       /**
-        * Target identifies a specific User. See T109724.
-        *
-        * @since 1.27
-        * @return bool
-        */
-       public function personallyIdentifiableTarget() {
-               return true;
-       }
-}
diff --git a/includes/specials/redirects/SpecialAllMyUploads.php b/includes/specials/redirects/SpecialAllMyUploads.php
new file mode 100644 (file)
index 0000000..605b61c
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Special pages that are used to get user independent links pointing to
+ * current user's pages (user page, talk page, contributions, etc.).
+ * This can let us cache a single copy of some generated content for all
+ * users or be linked in wikitext help pages.
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Special page pointing to current user's uploaded files (including old versions).
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialAllMyUploads extends RedirectSpecialPage {
+       public function __construct() {
+               parent::__construct( 'AllMyUploads' );
+               $this->mAllowedRedirectParams = [ 'limit', 'ilsearch' ];
+       }
+
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
+               $this->mAddedRedirectParams['ilshowall'] = 1;
+
+               return SpecialPage::getTitleFor( 'Listfiles', $this->getUser()->getName() );
+       }
+
+       /**
+        * Target identifies a specific User. See T109724.
+        *
+        * @since 1.27
+        * @return bool
+        */
+       public function personallyIdentifiableTarget() {
+               return true;
+       }
+}
diff --git a/includes/specials/redirects/SpecialListAdmins.php b/includes/specials/redirects/SpecialListAdmins.php
new file mode 100644 (file)
index 0000000..f648647
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Implements Special:ListAdmins
+ *
+ * Copyright Â© 2004 Brion Vibber, lcrocker, Tim Starling,
+ * Domas Mituzas, Antoine Musso, Jens Frank, Zhengzhu,
+ * 2006 Rob Church <robchur@gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Redirect page: Special:ListAdmins --> Special:ListUsers/sysop.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialListAdmins extends SpecialRedirectToSpecial {
+       function __construct() {
+               parent::__construct( 'Listadmins', 'Listusers', 'sysop' );
+       }
+}
diff --git a/includes/specials/redirects/SpecialListBots.php b/includes/specials/redirects/SpecialListBots.php
new file mode 100644 (file)
index 0000000..a745d8b
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Implements Special:ListBots
+ *
+ * Copyright Â© 2004 Brion Vibber, lcrocker, Tim Starling,
+ * Domas Mituzas, Antoine Musso, Jens Frank, Zhengzhu,
+ * 2006 Rob Church <robchur@gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Redirect page: Special:ListBots --> Special:ListUsers/bot.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialListBots extends SpecialRedirectToSpecial {
+       function __construct() {
+               parent::__construct( 'Listbots', 'Listusers', 'bot' );
+       }
+}
diff --git a/includes/specials/redirects/SpecialMycontributions.php b/includes/specials/redirects/SpecialMycontributions.php
new file mode 100644 (file)
index 0000000..5a2c1cb
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Special pages that are used to get user independent links pointing to
+ * current user's pages (user page, talk page, contributions, etc.).
+ * This can let us cache a single copy of some generated content for all
+ * users or be linked in wikitext help pages.
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Special page pointing to current user's contributions.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialMycontributions extends RedirectSpecialPage {
+       public function __construct() {
+               parent::__construct( 'Mycontributions' );
+               $this->mAllowedRedirectParams = [ 'limit', 'namespace', 'tagfilter',
+                       'offset', 'dir', 'year', 'month', 'feed', 'deletedOnly',
+                       'nsInvert', 'associated', 'newOnly', 'topOnly', 'start', 'end' ];
+       }
+
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
+               return SpecialPage::getTitleFor( 'Contributions', $this->getUser()->getName() );
+       }
+
+       /**
+        * Target identifies a specific User. See T109724.
+        *
+        * @since 1.27
+        * @return bool
+        */
+       public function personallyIdentifiableTarget() {
+               return true;
+       }
+}
diff --git a/includes/specials/redirects/SpecialMypage.php b/includes/specials/redirects/SpecialMypage.php
new file mode 100644 (file)
index 0000000..487fc74
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Special pages that are used to get user independent links pointing to
+ * current user's pages (user page, talk page, contributions, etc.).
+ * This can let us cache a single copy of some generated content for all
+ * users or be linked in wikitext help pages.
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Special page pointing to current user's user page.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialMypage extends RedirectSpecialArticle {
+       public function __construct() {
+               parent::__construct( 'Mypage' );
+       }
+
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
+               if ( $subpage === null || $subpage === '' ) {
+                       return Title::makeTitle( NS_USER, $this->getUser()->getName() );
+               }
+
+               return Title::makeTitle( NS_USER, $this->getUser()->getName() . '/' . $subpage );
+       }
+
+       /**
+        * Target identifies a specific User. See T109724.
+        *
+        * @since 1.27
+        * @return bool
+        */
+       public function personallyIdentifiableTarget() {
+               return true;
+       }
+}
diff --git a/includes/specials/redirects/SpecialMytalk.php b/includes/specials/redirects/SpecialMytalk.php
new file mode 100644 (file)
index 0000000..d7be71f
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Special pages that are used to get user independent links pointing to
+ * current user's pages (user page, talk page, contributions, etc.).
+ * This can let us cache a single copy of some generated content for all
+ * users or be linked in wikitext help pages.
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Special page pointing to current user's talk page.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialMytalk extends RedirectSpecialArticle {
+       public function __construct() {
+               parent::__construct( 'Mytalk' );
+       }
+
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
+               if ( $subpage === null || $subpage === '' ) {
+                       return Title::makeTitle( NS_USER_TALK, $this->getUser()->getName() );
+               }
+
+               return Title::makeTitle( NS_USER_TALK, $this->getUser()->getName() . '/' . $subpage );
+       }
+
+       /**
+        * Target identifies a specific User. See T109724.
+        *
+        * @since 1.27
+        * @return bool
+        */
+       public function personallyIdentifiableTarget() {
+               return true;
+       }
+}
diff --git a/includes/specials/redirects/SpecialMyuploads.php b/includes/specials/redirects/SpecialMyuploads.php
new file mode 100644 (file)
index 0000000..1028ef1
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Special pages that are used to get user independent links pointing to
+ * current user's pages (user page, talk page, contributions, etc.).
+ * This can let us cache a single copy of some generated content for all
+ * users or be linked in wikitext help pages.
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Special page pointing to current user's uploaded files.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialMyuploads extends RedirectSpecialPage {
+       public function __construct() {
+               parent::__construct( 'Myuploads' );
+               $this->mAllowedRedirectParams = [ 'limit', 'ilshowall', 'ilsearch' ];
+       }
+
+       /**
+        * @param string|null $subpage
+        * @return Title
+        */
+       public function getRedirect( $subpage ) {
+               return SpecialPage::getTitleFor( 'Listfiles', $this->getUser()->getName() );
+       }
+
+       /**
+        * Target identifies a specific User. See T109724.
+        *
+        * @since 1.27
+        * @return bool
+        */
+       public function personallyIdentifiableTarget() {
+               return true;
+       }
+}
index a52ce17..a6399f6 100644 (file)
@@ -60,7 +60,6 @@ class CleanupPreferences extends Maintenance {
                global $wgHiddenPrefs, $wgDefaultUserOptions;
 
                $dbw = $this->getDB( DB_MASTER );
-               $didWork = false;
                $hidden = $this->hasOption( 'hidden' );
                $unknown = $this->hasOption( 'unknown' );
                $bogus = $this->hasOption( 'bogus' );
index 09e8211..fe3bea0 100644 (file)
@@ -80,8 +80,6 @@ class DeleteBatch extends Maintenance {
                        $this->fatalError( "Unable to read file, exiting" );
                }
 
-               $dbw = $this->getDB( DB_MASTER );
-
                # Handle each entry
                for ( $linenum = 1; !feof( $file ); $linenum++ ) {
                        $line = trim( fgets( $file ) );
index 673ea7f..45786d8 100644 (file)
@@ -74,9 +74,6 @@ abstract class BackupDumper extends Maintenance {
        /** @var LoadBalancer */
        protected $lb;
 
-       // @todo Unused?
-       private $stubText = false; // include rev_text_id instead of text; for 2-pass dump
-
        /**
         * @param array|null $args For backward compatibility
         */
index 813f88e..ba6c375 100644 (file)
@@ -414,7 +414,6 @@ class MigrateActors extends LoggedUpdateMaintenance {
                $complainedAboutUsers = [];
 
                $primaryKey = [ 'ls_value', 'ls_log_id' ];
-               $pkFilter = array_flip( $primaryKey );
                $this->output( "Beginning migration of log_search\n" );
                wfWaitForSlaves();
 
index 6ae506f..80e72fb 100644 (file)
@@ -77,7 +77,6 @@ class MergeMessageFileList extends Maintenance {
                        $extdir = $this->getOption( 'extensions-dir' );
                        # Allow multiple directories to be passed with ":" as delimiter
                        $extdirs = explode( ':', $extdir );
-                       $entries = [];
                        foreach ( $extdirs as $extdir ) {
                                $entries = scandir( $extdir );
                                foreach ( $entries as $extname ) {
index 9424402..34a6cb6 100644 (file)
@@ -72,8 +72,6 @@ class MysqlMaintenance extends Maintenance {
                        $host = $this->getOption( 'host' );
                        $serverCount = $lb->getServerCount();
                        for ( $index = 0; $index < $serverCount; ++$index ) {
-                               $serverInfo = $lb->getServerInfo( $index );
-
                                if ( $lb->getServerName( $index ) === $host ) {
                                        break;
                                }
index d47ca43..bfae4b7 100644 (file)
@@ -53,8 +53,6 @@ class Orphans extends Maintenance {
        public function execute() {
                $this->checkOrphans( $this->hasOption( 'fix' ) );
                $this->checkSeparation( $this->hasOption( 'fix' ) );
-               # Does not work yet, do not use
-               # $this->checkWidows( $this->hasOption( 'fix' ) );
        }
 
        /**
@@ -67,7 +65,7 @@ class Orphans extends Maintenance {
                if ( $extraTable ) {
                        $tbls = array_merge( $tbls, $extraTable );
                }
-               $db->lockTables( [], $tbls, __METHOD__, false );
+               $db->lockTables( [], $tbls, __METHOD__ );
        }
 
        /**
@@ -139,54 +137,6 @@ class Orphans extends Maintenance {
                }
        }
 
-       /**
-        * @param bool $fix
-        * @todo DON'T USE THIS YET! It will remove entries which have children,
-        *       but which aren't properly attached (eg if page_latest is bogus
-        *       but valid revisions do exist)
-        */
-       private function checkWidows( $fix ) {
-               $dbw = $this->getDB( DB_MASTER );
-               $page = $dbw->tableName( 'page' );
-               $revision = $dbw->tableName( 'revision' );
-
-               if ( $fix ) {
-                       $this->lockTables( $dbw );
-               }
-
-               $this->output( "\nChecking for childless page table entries... "
-                       . "(this may take a while on a large wiki)\n" );
-               $result = $dbw->query( "
-                       SELECT *
-                       FROM $page LEFT OUTER JOIN $revision ON page_latest=rev_id
-                       WHERE rev_id IS NULL
-               " );
-               $widows = $result->numRows();
-               if ( $widows > 0 ) {
-                       $this->output( "$widows childless pages...\n" );
-                       $this->output( sprintf( "%10s %11s %2s %s\n", 'page_id', 'page_latest', 'ns', 'page_title' ) );
-                       foreach ( $result as $row ) {
-                               printf( "%10d %11d %2d %s\n",
-                                       $row->page_id,
-                                       $row->page_latest,
-                                       $row->page_namespace,
-                                       $row->page_title );
-                               if ( $fix ) {
-                                       $dbw->delete( 'page', [ 'page_id' => $row->page_id ] );
-                               }
-                       }
-                       if ( !$fix ) {
-                               $this->output( "Run again with --fix to remove these entries automatically.\n" );
-                       }
-               } else {
-                       $this->output( "No childless pages! Yay!\n" );
-               }
-
-               if ( $fix ) {
-                       $dbw->unlockTables( __METHOD__ );
-               }
-       }
-
        /**
         * Check for pages where page_latest is wrong
         * @param bool $fix Whether to fix broken entries
index dc9bbda..10d37de 100644 (file)
@@ -36,7 +36,6 @@ class PageExists extends Maintenance {
                $title = Title::newFromText( $titleArg );
                $pageExists = $title && $title->exists();
 
-               $text = '';
                $code = 0;
                if ( $pageExists ) {
                        $text = "{$title} exists.";
index e2fd8b5..ac52721 100644 (file)
@@ -44,8 +44,6 @@ class PopulateBacklinkNamespace extends LoggedUpdateMaintenance {
        }
 
        public function doDBUpdates() {
-               $force = $this->getOption( 'force' );
-
                $db = $this->getDB( DB_MASTER );
 
                $this->output( "Updating *_from_namespace fields in links tables.\n" );
index b47476a..e2c1a8b 100644 (file)
@@ -62,9 +62,6 @@ class Protect extends Maintenance {
                        $this->fatalError( "Invalid username" );
                }
 
-               // @todo FIXME: This is reset 7 lines down.
-               $restrictions = [ 'edit' => $protection, 'move' => $protection ];
-
                $t = Title::newFromText( $this->getArg() );
                if ( !$t ) {
                        $this->fatalError( "Invalid title" );
index 12b33b4..ab40e48 100644 (file)
@@ -142,7 +142,6 @@ TEXT
                        wfWaitForSlaves();
                }
                $count = 0;
-               $batchCount = 0;
                $batchConds = [];
                do {
                        $this->output( "Selecting next " . self::BATCH_SIZE . " rows..." );
index 3b28b65..5d756e8 100644 (file)
@@ -49,7 +49,7 @@ class UpdateSpecialPages extends Maintenance {
                $this->doSpecialPageCacheUpdates( $dbw );
 
                foreach ( QueryPage::getPages() as $page ) {
-                       list( $class, $special ) = $page;
+                       list( , $special ) = $page;
                        $limit = $page[2] ?? null;
 
                        # --list : just show the name of pages