From 9ac90f78168b3de9f697204c894498e8ef0d1f47 Mon Sep 17 00:00:00 2001 From: Pppery Date: Sat, 17 May 2025 21:43:54 -0400 Subject: [PATCH] Improve BrokenRedirects display - Don't strike all entries in Miser Mode - This does a query for each entry, however other pages like Special:DoubleRedirects already do that so it shouldn't cause performance problems. - If the redirect is no longer broken because its target now exists then strike the entire entry rather than displaying a red link to a page that actually exists Bug: T351055 Change-Id: I9189b1ba537f0ca590b41a3db76621f11df2a224 --- includes/specialpage/SpecialPageFactory.php | 1 + includes/specials/SpecialBrokenRedirects.php | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/includes/specialpage/SpecialPageFactory.php b/includes/specialpage/SpecialPageFactory.php index a1e6e6f27c8..b10d163e241 100644 --- a/includes/specialpage/SpecialPageFactory.php +++ b/includes/specialpage/SpecialPageFactory.php @@ -215,6 +215,7 @@ class SpecialPageFactory { 'ContentHandlerFactory', 'ConnectionProvider', 'LinkBatchFactory', + 'RedirectLookup' ] ], 'Deadendpages' => [ diff --git a/includes/specials/SpecialBrokenRedirects.php b/includes/specials/SpecialBrokenRedirects.php index 21065716cd4..8222fb25309 100644 --- a/includes/specials/SpecialBrokenRedirects.php +++ b/includes/specials/SpecialBrokenRedirects.php @@ -22,6 +22,7 @@ namespace MediaWiki\Specials; use MediaWiki\Cache\LinkBatchFactory; use MediaWiki\Content\IContentHandlerFactory; +use MediaWiki\Page\RedirectLookup; use MediaWiki\SpecialPage\QueryPage; use MediaWiki\Title\Title; use Skin; @@ -40,6 +41,7 @@ use Wikimedia\Rdbms\IResultWrapper; class SpecialBrokenRedirects extends QueryPage { private IContentHandlerFactory $contentHandlerFactory; + private RedirectLookup $redirectLookup; /** * @param IContentHandlerFactory $contentHandlerFactory @@ -49,12 +51,14 @@ class SpecialBrokenRedirects extends QueryPage { public function __construct( IContentHandlerFactory $contentHandlerFactory, IConnectionProvider $dbProvider, - LinkBatchFactory $linkBatchFactory + LinkBatchFactory $linkBatchFactory, + RedirectLookup $redirectLookup ) { parent::__construct( 'BrokenRedirects' ); $this->contentHandlerFactory = $contentHandlerFactory; $this->setDatabaseProvider( $dbProvider ); $this->setLinkBatchFactory( $linkBatchFactory ); + $this->redirectLookup = $redirectLookup; } public function isExpensive() { @@ -129,13 +133,14 @@ class SpecialBrokenRedirects extends QueryPage { $result->rd_fragment ); } else { - $toObj = false; + $toObj = Title::castFromLinkTarget( + $this->redirectLookup->getRedirectTarget( $fromObj ) + ); } $linkRenderer = $this->getLinkRenderer(); - // $toObj may very easily be false if the $result list is cached - if ( !is_object( $toObj ) ) { + if ( !is_object( $toObj ) || $toObj->exists() ) { return '' . $linkRenderer->makeLink( $fromObj ) . ''; }