From: Umherirrender Date: Fri, 8 Feb 2019 18:05:27 +0000 (+0100) Subject: Move specialpage redirects related classes to own files X-Git-Tag: 1.34.0-rc.0~2673 X-Git-Url: https://git.cyclocoop.org/%20%27.%28%24debut%20%20%20%24par_page%29.%27?a=commitdiff_plain;h=7edafc29c6c8427930bbcde45149575c58e5373d;p=lhc%2Fweb%2Fwiklou.git Move specialpage redirects related classes to own files Change-Id: Ibddbb0c4e40fff310b1720ec9c72f2683cc93f54 --- diff --git a/.phpcs.xml b/.phpcs.xml index a091fcc4d0..784fefc754 100644 --- a/.phpcs.xml +++ b/.phpcs.xml @@ -101,7 +101,6 @@ */includes/specials/SpecialMostlinkedtemplates\.php */includes/specials/SpecialMostrevisions\.php */includes/specials/SpecialMovepage\.php - */includes/specials/SpecialMyRedirectPages\.php */includes/specials/SpecialNewimages\.php */includes/specials/SpecialRandompage\.php */includes/specials/SpecialShortpages\.php @@ -243,10 +242,7 @@ */includes/RevisionList\.php */includes/search/SearchEngine\.php */includes/specialpage/LoginSignupSpecialPage\.php - */includes/specialpage/RedirectSpecialPage\.php */includes/specials/forms/PreferencesFormLegacy\.php - */includes/specials/SpecialListusers\.php - */includes/specials/SpecialMyRedirectPages\.php */includes/StubObject\.php */includes/upload/UploadStash\.php */includes/utils/AutoloadGenerator\.php diff --git a/autoload.php b/autoload.php index 3bf4582201..405d35e695 100644 --- a/autoload.php +++ b/autoload.php @@ -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', diff --git a/includes/specialpage/RedirectSpecialArticle.php b/includes/specialpage/RedirectSpecialArticle.php new file mode 100644 index 0000000000..b8dce3f5e0 --- /dev/null +++ b/includes/specialpage/RedirectSpecialArticle.php @@ -0,0 +1,109 @@ +mAllowedRedirectParams = $redirectParams; + } +} diff --git a/includes/specialpage/RedirectSpecialPage.php b/includes/specialpage/RedirectSpecialPage.php index 8d39c996af..01a88f4933 100644 --- a/includes/specialpage/RedirectSpecialPage.php +++ b/includes/specialpage/RedirectSpecialPage.php @@ -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 index 0000000000..e30278e956 --- /dev/null +++ b/includes/specialpage/SpecialRedirectToSpecial.php @@ -0,0 +1,56 @@ +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 ); + } +} diff --git a/includes/specials/SpecialListusers.php b/includes/specials/SpecialListusers.php index dee2968d05..2c35815dba 100644 --- a/includes/specials/SpecialListusers.php +++ b/includes/specials/SpecialListusers.php @@ -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 index 077fbf1547..0000000000 --- a/includes/specials/SpecialMyRedirectPages.php +++ /dev/null @@ -1,185 +0,0 @@ -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 index 0000000000..605b61ccfd --- /dev/null +++ b/includes/specials/redirects/SpecialAllMyUploads.php @@ -0,0 +1,57 @@ +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 index 0000000000..f6486472f0 --- /dev/null +++ b/includes/specials/redirects/SpecialListAdmins.php @@ -0,0 +1,37 @@ + + * + * 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 index 0000000000..a745d8b363 --- /dev/null +++ b/includes/specials/redirects/SpecialListBots.php @@ -0,0 +1,37 @@ + + * + * 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 index 0000000000..5a2c1cbaf6 --- /dev/null +++ b/includes/specials/redirects/SpecialMycontributions.php @@ -0,0 +1,57 @@ +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 index 0000000000..487fc74346 --- /dev/null +++ b/includes/specials/redirects/SpecialMypage.php @@ -0,0 +1,58 @@ +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 index 0000000000..d7be71f0a8 --- /dev/null +++ b/includes/specials/redirects/SpecialMytalk.php @@ -0,0 +1,58 @@ +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 index 0000000000..1028ef1bd2 --- /dev/null +++ b/includes/specials/redirects/SpecialMyuploads.php @@ -0,0 +1,55 @@ +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; + } +}