diff options
31 files changed, 266 insertions, 35 deletions
diff --git a/includes/specialpage/QueryPage.php b/includes/specialpage/QueryPage.php index 0b15f36fd679..61d894b7acc7 100644 --- a/includes/specialpage/QueryPage.php +++ b/includes/specialpage/QueryPage.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use MediaWiki\Linker\LinkTarget; use MediaWiki\MediaWikiServices; use Wikimedia\Rdbms\DBError; @@ -69,6 +70,9 @@ abstract class QueryPage extends SpecialPage { /** @var ILoadBalancer|null */ private $loadBalancer = null; + /** @var LinkBatchFactory|null */ + private $linkBatchFactory = null; + /** * Get a list of query page classes and their associated special pages, * for periodic updates. @@ -126,6 +130,27 @@ abstract class QueryPage extends SpecialPage { } /** + * @since 1.36 + * @param LinkBatchFactory $linkBatchFactory + */ + final protected function setLinkBatchFactory( LinkBatchFactory $linkBatchFactory ) { + $this->linkBatchFactory = $linkBatchFactory; + } + + /** + * @since 1.36 + * @return LinkBatchFactory + */ + final protected function getLinkBatchFactory(): LinkBatchFactory { + if ( $this->linkBatchFactory === null ) { + // Fallback if not provided + // TODO Change to wfWarn in a future release + $this->linkBatchFactory = MediaWikiServices::getInstance()->getLinkBatchFactory(); + } + return $this->linkBatchFactory; + } + + /** * Get a list of query pages disabled and with it's run mode * @param Config $config * @return string[] @@ -820,6 +845,8 @@ abstract class QueryPage extends SpecialPage { * title and optional the namespace field) and executes the batch. This operation will pre-cache * LinkCache information like page existence and information for stub color and redirect hints. * + * @note Call self::setLinkBatchFactory from special page constructor when use + * * @param IResultWrapper $res The result wrapper to process. Needs to include the title * field and namespace field, if the $ns parameter isn't set. * @param null $ns Use this namespace for the given titles in the result wrapper, @@ -830,8 +857,7 @@ abstract class QueryPage extends SpecialPage { return; } - $linkBatchFactory = MediaWikiServices::getInstance()->getLinkBatchFactory(); - $batch = $linkBatchFactory->newLinkBatch(); + $batch = $this->getLinkBatchFactory()->newLinkBatch(); foreach ( $res as $row ) { $batch->add( $ns ?? $row->namespace, $row->title ); } diff --git a/includes/specialpage/SpecialPageFactory.php b/includes/specialpage/SpecialPageFactory.php index 8d270e0754bd..33f68d61aaa9 100644 --- a/includes/specialpage/SpecialPageFactory.php +++ b/includes/specialpage/SpecialPageFactory.php @@ -70,6 +70,7 @@ class SpecialPageFactory { 'PermissionManager', 'ContentHandlerFactory', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Deadendpages' => [ @@ -77,6 +78,7 @@ class SpecialPageFactory { 'services' => [ 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'DoubleRedirects' => [ @@ -94,6 +96,7 @@ class SpecialPageFactory { // Same as for Shortpages 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Ancientpages' => [ @@ -101,6 +104,7 @@ class SpecialPageFactory { 'services' => [ 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Lonelypages' => [ @@ -108,6 +112,7 @@ class SpecialPageFactory { 'services' => [ 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Fewestrevisions' => [ @@ -116,6 +121,7 @@ class SpecialPageFactory { // Same as for Mostrevisions 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Withoutinterwiki' => [ @@ -123,6 +129,7 @@ class SpecialPageFactory { 'services' => [ 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Protectedpages' => [ @@ -149,6 +156,7 @@ class SpecialPageFactory { // Same as for Longpages 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Uncategorizedcategories' => [ @@ -157,6 +165,7 @@ class SpecialPageFactory { // Same as for SpecialUncategorizedPages and SpecialUncategorizedTemplates 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Uncategorizedimages' => [ @@ -171,6 +180,7 @@ class SpecialPageFactory { // Same as for SpecialUncategorizedCategories and SpecialUncategorizedTemplates 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Uncategorizedtemplates' => [ @@ -179,12 +189,14 @@ class SpecialPageFactory { // Same as for SpecialUncategorizedCategories and SpecialUncategorizedPages 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Unusedcategories' => [ 'class' => \SpecialUnusedCategories::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Unusedimages' => [ @@ -210,6 +222,7 @@ class SpecialPageFactory { 'class' => \SpecialWantedCategories::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Wantedfiles' => [ @@ -217,18 +230,21 @@ class SpecialPageFactory { 'services' => [ 'RepoGroup', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Wantedpages' => [ 'class' => \WantedPagesPage::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Wantedtemplates' => [ 'class' => \SpecialWantedTemplates::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], @@ -449,12 +465,14 @@ class SpecialPageFactory { 'services' => [ 'MimeAnalyzer', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'MIMEsearch' => [ 'class' => \SpecialMIMESearch::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'FileDuplicateSearch' => [ @@ -483,6 +501,7 @@ class SpecialPageFactory { 'class' => \SpecialListDuplicatedFiles::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], @@ -518,6 +537,7 @@ class SpecialPageFactory { 'class' => \SpecialLinkSearch::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Randompage' => \RandomPage::class, @@ -531,6 +551,7 @@ class SpecialPageFactory { 'class' => \SpecialMostLinkedCategories::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Mostimages' => [ @@ -544,18 +565,21 @@ class SpecialPageFactory { 'services' => [ 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Mostlinked' => [ 'class' => \SpecialMostLinked::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Mostlinkedtemplates' => [ 'class' => \SpecialMostLinkedTemplates::class, 'services' => [ 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Mostcategories' => [ @@ -563,6 +587,7 @@ class SpecialPageFactory { 'services' => [ 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], 'Mostrevisions' => [ @@ -571,6 +596,7 @@ class SpecialPageFactory { // Same as for Fewestrevisions 'NamespaceInfo', 'DBLoadBalancer', + 'LinkBatchFactory', ] ], diff --git a/includes/specials/SpecialAncientPages.php b/includes/specials/SpecialAncientPages.php index 92117da5f777..8326933d834e 100644 --- a/includes/specials/SpecialAncientPages.php +++ b/includes/specials/SpecialAncientPages.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -36,11 +37,17 @@ class SpecialAncientPages extends QueryPage { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Ancientpages' ); $this->namespaceInfo = $namespaceInfo; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialBrokenRedirects.php b/includes/specials/SpecialBrokenRedirects.php index 58dfc3b16699..485304255dec 100644 --- a/includes/specials/SpecialBrokenRedirects.php +++ b/includes/specials/SpecialBrokenRedirects.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use MediaWiki\Content\IContentHandlerFactory; use MediaWiki\Permissions\PermissionManager; use Wikimedia\Rdbms\IDatabase; @@ -45,16 +46,19 @@ class SpecialBrokenRedirects extends QueryPage { * @param PermissionManager $permissionManager * @param IContentHandlerFactory $contentHandlerFactory * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ public function __construct( PermissionManager $permissionManager, IContentHandlerFactory $contentHandlerFactory, - ILoadBalancer $loadBalancer + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory ) { parent::__construct( 'BrokenRedirects' ); $this->permissionManager = $permissionManager; $this->contentHandlerFactory = $contentHandlerFactory; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialDeadendPages.php b/includes/specials/SpecialDeadendPages.php index 0fd416249a11..cbdf4b2b6e05 100644 --- a/includes/specials/SpecialDeadendPages.php +++ b/includes/specials/SpecialDeadendPages.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -36,11 +37,17 @@ class SpecialDeadendPages extends PageQueryPage { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Deadendpages' ); $this->namespaceInfo = $namespaceInfo; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } protected function getPageHeader() { diff --git a/includes/specials/SpecialFewestRevisions.php b/includes/specials/SpecialFewestRevisions.php index 9f815b8e559e..4c0b97db3f21 100644 --- a/includes/specials/SpecialFewestRevisions.php +++ b/includes/specials/SpecialFewestRevisions.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -39,11 +40,17 @@ class SpecialFewestRevisions extends QueryPage { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Fewestrevisions' ); $this->namespaceInfo = $namespaceInfo; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialLinkSearch.php b/includes/specials/SpecialLinkSearch.php index 03219407d1de..4d453f774ece 100644 --- a/includes/specials/SpecialLinkSearch.php +++ b/includes/specials/SpecialLinkSearch.php @@ -22,6 +22,7 @@ * @author Brion Vibber */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -48,10 +49,15 @@ class SpecialLinkSearch extends QueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'LinkSearch' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isCacheable() { diff --git a/includes/specials/SpecialListDuplicatedFiles.php b/includes/specials/SpecialListDuplicatedFiles.php index b298eeb7b736..0a5f901f95a0 100644 --- a/includes/specials/SpecialListDuplicatedFiles.php +++ b/includes/specials/SpecialListDuplicatedFiles.php @@ -24,6 +24,7 @@ * @author Brian Wolff */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -37,10 +38,15 @@ class SpecialListDuplicatedFiles extends QueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'ListDuplicatedFiles' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialLonelyPages.php b/includes/specials/SpecialLonelyPages.php index 7b32252d308e..1f3815b6fb35 100644 --- a/includes/specials/SpecialLonelyPages.php +++ b/includes/specials/SpecialLonelyPages.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -37,11 +38,17 @@ class SpecialLonelyPages extends PageQueryPage { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Lonelypages' ); $this->namespaceInfo = $namespaceInfo; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } protected function getPageHeader() { diff --git a/includes/specials/SpecialLongPages.php b/includes/specials/SpecialLongPages.php index b6a233437fae..22751cdca5d5 100644 --- a/includes/specials/SpecialLongPages.php +++ b/includes/specials/SpecialLongPages.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -31,9 +32,18 @@ class SpecialLongPages extends SpecialShortPages { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { - parent::__construct( $namespaceInfo, $loadBalancer ); + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { + parent::__construct( + $namespaceInfo, + $loadBalancer, + $linkBatchFactory + ); $this->mName = 'Longpages'; } diff --git a/includes/specials/SpecialMIMESearch.php b/includes/specials/SpecialMIMESearch.php index d5b156baec1e..f4b74a37c7d8 100644 --- a/includes/specials/SpecialMIMESearch.php +++ b/includes/specials/SpecialMIMESearch.php @@ -22,6 +22,7 @@ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com> */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -34,10 +35,15 @@ class SpecialMIMESearch extends QueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'MIMEsearch' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialMediaStatistics.php b/includes/specials/SpecialMediaStatistics.php index 502e346a5667..476fbb8e8519 100644 --- a/includes/specials/SpecialMediaStatistics.php +++ b/includes/specials/SpecialMediaStatistics.php @@ -22,6 +22,7 @@ * @author Brian Wolff */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -48,10 +49,12 @@ class SpecialMediaStatistics extends QueryPage { /** * @param MimeAnalyzer $mimeAnalyzer * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ public function __construct( MimeAnalyzer $mimeAnalyzer, - ILoadBalancer $loadBalancer + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory ) { parent::__construct( 'MediaStatistics' ); // Generally speaking there is only a small number of file types, @@ -60,6 +63,7 @@ class SpecialMediaStatistics extends QueryPage { $this->shownavigation = false; $this->mimeAnalyzer = $mimeAnalyzer; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialMostCategories.php b/includes/specials/SpecialMostCategories.php index 582fde22a516..f78d65395122 100644 --- a/includes/specials/SpecialMostCategories.php +++ b/includes/specials/SpecialMostCategories.php @@ -24,6 +24,7 @@ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com> */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -41,11 +42,17 @@ class SpecialMostCategories extends QueryPage { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Mostcategories' ); $this->namespaceInfo = $namespaceInfo; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialMostInterwikis.php b/includes/specials/SpecialMostInterwikis.php index f03157bd365c..cdd116240930 100644 --- a/includes/specials/SpecialMostInterwikis.php +++ b/includes/specials/SpecialMostInterwikis.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -38,11 +39,17 @@ class SpecialMostInterwikis extends QueryPage { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Mostinterwikis' ); $this->namespaceInfo = $namespaceInfo; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialMostLinked.php b/includes/specials/SpecialMostLinked.php index 10477d7ad9c4..b5e1644f8b44 100644 --- a/includes/specials/SpecialMostLinked.php +++ b/includes/specials/SpecialMostLinked.php @@ -25,6 +25,7 @@ * @author Rob Church <robchur@gmail.com> */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -38,10 +39,15 @@ class SpecialMostLinked extends QueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Mostlinked' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialMostLinkedCategories.php b/includes/specials/SpecialMostLinkedCategories.php index 1e29fd738350..a1accb110085 100644 --- a/includes/specials/SpecialMostLinkedCategories.php +++ b/includes/specials/SpecialMostLinkedCategories.php @@ -24,6 +24,7 @@ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com> */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -37,10 +38,15 @@ class SpecialMostLinkedCategories extends QueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Mostlinkedcategories' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isSyndicated() { diff --git a/includes/specials/SpecialMostLinkedTemplates.php b/includes/specials/SpecialMostLinkedTemplates.php index ef1b7fc1d623..f134d4b44456 100644 --- a/includes/specials/SpecialMostLinkedTemplates.php +++ b/includes/specials/SpecialMostLinkedTemplates.php @@ -22,6 +22,7 @@ * @author Rob Church <robchur@gmail.com> */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -36,10 +37,15 @@ class SpecialMostLinkedTemplates extends QueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Mostlinkedtemplates' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } /** diff --git a/includes/specials/SpecialMostRevisions.php b/includes/specials/SpecialMostRevisions.php index 4e9a50fd7761..776246fdc426 100644 --- a/includes/specials/SpecialMostRevisions.php +++ b/includes/specials/SpecialMostRevisions.php @@ -24,6 +24,7 @@ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com> */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; class SpecialMostRevisions extends SpecialFewestRevisions { @@ -31,9 +32,18 @@ class SpecialMostRevisions extends SpecialFewestRevisions { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { - parent::__construct( $namespaceInfo, $loadBalancer ); + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { + parent::__construct( + $namespaceInfo, + $loadBalancer, + $linkBatchFactory + ); $this->mName = 'Mostrevisions'; } diff --git a/includes/specials/SpecialShortPages.php b/includes/specials/SpecialShortPages.php index 7e0fa9ea1200..d817831ce723 100644 --- a/includes/specials/SpecialShortPages.php +++ b/includes/specials/SpecialShortPages.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\ILoadBalancer; use Wikimedia\Rdbms\IResultWrapper; @@ -39,11 +40,17 @@ class SpecialShortPages extends QueryPage { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Shortpages' ); $this->namespaceInfo = $namespaceInfo; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isSyndicated() { diff --git a/includes/specials/SpecialUncategorizedCategories.php b/includes/specials/SpecialUncategorizedCategories.php index 54d899cee3c2..230e8404c796 100644 --- a/includes/specials/SpecialUncategorizedCategories.php +++ b/includes/specials/SpecialUncategorizedCategories.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -39,9 +40,18 @@ class SpecialUncategorizedCategories extends SpecialUncategorizedPages { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { - parent::__construct( $namespaceInfo, $loadBalancer ); + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { + parent::__construct( + $namespaceInfo, + $loadBalancer, + $linkBatchFactory + ); $this->mName = 'Uncategorizedcategories'; $this->requestedNamespace = NS_CATEGORY; } diff --git a/includes/specials/SpecialUncategorizedPages.php b/includes/specials/SpecialUncategorizedPages.php index a3715bd53648..74add0bd35d4 100644 --- a/includes/specials/SpecialUncategorizedPages.php +++ b/includes/specials/SpecialUncategorizedPages.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -39,12 +40,18 @@ class SpecialUncategorizedPages extends PageQueryPage { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Uncategorizedpages' ); $this->addHelpLink( 'Help:Categories' ); $this->namespaceInfo = $namespaceInfo; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } protected function sortDescending() { diff --git a/includes/specials/SpecialUncategorizedTemplates.php b/includes/specials/SpecialUncategorizedTemplates.php index fc3c971a5712..7be1d07bd498 100644 --- a/includes/specials/SpecialUncategorizedTemplates.php +++ b/includes/specials/SpecialUncategorizedTemplates.php @@ -22,6 +22,7 @@ * @author Rob Church <robchur@gmail.com> */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -35,9 +36,18 @@ class SpecialUncategorizedTemplates extends SpecialUncategorizedPages { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( NamespaceInfo $namespaceInfo, ILoadBalancer $loadBalancer ) { - parent::__construct( $namespaceInfo, $loadBalancer ); + public function __construct( + NamespaceInfo $namespaceInfo, + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { + parent::__construct( + $namespaceInfo, + $loadBalancer, + $linkBatchFactory + ); $this->mName = 'Uncategorizedtemplates'; $this->requestedNamespace = NS_TEMPLATE; } diff --git a/includes/specials/SpecialUnusedCategories.php b/includes/specials/SpecialUnusedCategories.php index d4fb671bf765..f9ab1d49f4a9 100644 --- a/includes/specials/SpecialUnusedCategories.php +++ b/includes/specials/SpecialUnusedCategories.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -30,10 +31,15 @@ class SpecialUnusedCategories extends QueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Unusedcategories' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isExpensive() { diff --git a/includes/specials/SpecialWantedCategories.php b/includes/specials/SpecialWantedCategories.php index 93fe9850c7d6..a8b08b018b79 100644 --- a/includes/specials/SpecialWantedCategories.php +++ b/includes/specials/SpecialWantedCategories.php @@ -23,6 +23,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -35,10 +36,15 @@ class SpecialWantedCategories extends WantedQueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Wantedcategories' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function getQueryInfo() { diff --git a/includes/specials/SpecialWantedTemplates.php b/includes/specials/SpecialWantedTemplates.php index e95ecbd8c5e6..058cb7beee3d 100644 --- a/includes/specials/SpecialWantedTemplates.php +++ b/includes/specials/SpecialWantedTemplates.php @@ -26,6 +26,7 @@ * @author Danny B. */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -37,10 +38,15 @@ class SpecialWantedTemplates extends WantedQueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Wantedtemplates' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function getQueryInfo() { diff --git a/includes/specials/SpecialWantedfiles.php b/includes/specials/SpecialWantedfiles.php index 037222250605..12d97401cb88 100644 --- a/includes/specials/SpecialWantedfiles.php +++ b/includes/specials/SpecialWantedfiles.php @@ -24,6 +24,7 @@ * @author Soxred93 <soxred93@gmail.com> */ +use MediaWiki\Cache\LinkBatchFactory; use MediaWiki\MediaWikiServices; use Wikimedia\Rdbms\ILoadBalancer; @@ -40,8 +41,13 @@ class WantedFilesPage extends WantedQueryPage { /** * @param RepoGroup|string $repoGroup * @param ILoadBalancer|null $loadBalancer + * @param LinkBatchFactory|null $linkBatchFactory */ - public function __construct( $repoGroup, ILoadBalancer $loadBalancer = null ) { + public function __construct( + $repoGroup, + ILoadBalancer $loadBalancer = null, + LinkBatchFactory $linkBatchFactory = null + ) { parent::__construct( is_string( $repoGroup ) ? $repoGroup : 'Wantedfiles' ); // This class is extended and therefor fallback to global state - T265301 $services = MediaWikiServices::getInstance(); @@ -49,6 +55,7 @@ class WantedFilesPage extends WantedQueryPage { ? $repoGroup : $services->getRepoGroup(); $this->setDBLoadBalancer( $loadBalancer ?? $services->getDBLoadBalancer() ); + $this->setLinkBatchFactory( $linkBatchFactory ?? $services->getLinkBatchFactory() ); } protected function getPageHeader() { diff --git a/includes/specials/SpecialWantedpages.php b/includes/specials/SpecialWantedpages.php index de44eb170188..609dd6298b06 100644 --- a/includes/specials/SpecialWantedpages.php +++ b/includes/specials/SpecialWantedpages.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -32,10 +33,15 @@ class WantedPagesPage extends WantedQueryPage { /** * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ - public function __construct( ILoadBalancer $loadBalancer ) { + public function __construct( + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory + ) { parent::__construct( 'Wantedpages' ); $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function isIncludable() { diff --git a/includes/specials/SpecialWithoutInterwiki.php b/includes/specials/SpecialWithoutInterwiki.php index f7e6420f3198..1c32e0ab50e6 100644 --- a/includes/specials/SpecialWithoutInterwiki.php +++ b/includes/specials/SpecialWithoutInterwiki.php @@ -22,6 +22,7 @@ * @author Rob Church <robchur@gmail.com> */ +use MediaWiki\Cache\LinkBatchFactory; use Wikimedia\Rdbms\ILoadBalancer; /** @@ -38,14 +39,17 @@ class SpecialWithoutInterwiki extends PageQueryPage { /** * @param NamespaceInfo $namespaceInfo * @param ILoadBalancer $loadBalancer + * @param LinkBatchFactory $linkBatchFactory */ public function __construct( NamespaceInfo $namespaceInfo, - ILoadBalancer $loadBalancer + ILoadBalancer $loadBalancer, + LinkBatchFactory $linkBatchFactory ) { parent::__construct( 'Withoutinterwiki' ); $this->namespaceInfo = $namespaceInfo; $this->setDBLoadBalancer( $loadBalancer ); + $this->setLinkBatchFactory( $linkBatchFactory ); } public function execute( $par ) { diff --git a/tests/phpunit/includes/specials/SpecialMIMESearchTest.php b/tests/phpunit/includes/specials/SpecialMIMESearchTest.php index c253f2b3aacd..e92586dadc6a 100644 --- a/tests/phpunit/includes/specials/SpecialMIMESearchTest.php +++ b/tests/phpunit/includes/specials/SpecialMIMESearchTest.php @@ -12,8 +12,10 @@ class SpecialMIMESearchTest extends MediaWikiIntegrationTestCase { private $page; protected function setUp() : void { + $services = MediaWikiServices::getInstance(); $this->page = new SpecialMIMESearch( - MediaWikiServices::getInstance()->getDBLoadBalancer() + $services->getDBLoadBalancer(), + $services->getLinkBatchFactory() ); $context = new RequestContext(); $context->setTitle( Title::makeTitle( NS_SPECIAL, 'MIMESearch' ) ); diff --git a/tests/phpunit/includes/specials/SpecialShortPagesTest.php b/tests/phpunit/includes/specials/SpecialShortPagesTest.php index a746d268d019..4392e5ebdbcf 100644 --- a/tests/phpunit/includes/specials/SpecialShortPagesTest.php +++ b/tests/phpunit/includes/specials/SpecialShortPagesTest.php @@ -27,7 +27,8 @@ class SpecialShortPagesTest extends MediaWikiIntegrationTestCase { $services = MediaWikiServices::getInstance(); $page = new SpecialShortPages( $services->getNamespaceInfo(), - $services->getDBLoadBalancer() + $services->getDBLoadBalancer(), + $services->getLinkBatchFactory() ); $queryInfo = $page->getQueryInfo(); diff --git a/tests/phpunit/includes/specials/SpecialUncategorizedCategoriesTest.php b/tests/phpunit/includes/specials/SpecialUncategorizedCategoriesTest.php index 5e37ee8dedef..ced385a37680 100644 --- a/tests/phpunit/includes/specials/SpecialUncategorizedCategoriesTest.php +++ b/tests/phpunit/includes/specials/SpecialUncategorizedCategoriesTest.php @@ -17,7 +17,8 @@ class SpecialUncategorizedCategoriesTest extends MediaWikiIntegrationTestCase { $services = MediaWikiServices::getInstance(); $special = new SpecialUncategorizedCategories( $services->getNamespaceInfo(), - $services->getDBLoadBalancer() + $services->getDBLoadBalancer(), + $services->getLinkBatchFactory() ); $special->setContext( $mockContext ); $this->assertEquals( [ |