From 1483af0c894f877e80fec3475f0fe21295be87d7 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 19 May 2016 18:58:12 -0700 Subject: [PATCH] Cleanup Special:PrefixIndex::showPrefixChunk() * Title::makeTitle() cannot return null or false * Use foreach loop instead of while and $res->fetchObject() * Select extra fields for LinkCache, and add existence into it * Let Linker handle generation of mw-redirect class Change-Id: I23f09956b5a39badbfa05d1188466180935cf411 --- includes/specials/SpecialPrefixindex.php | 41 +++++++++++++----------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/includes/specials/SpecialPrefixindex.php b/includes/specials/SpecialPrefixindex.php index 9891f86002..6db4f2cbfc 100644 --- a/includes/specials/SpecialPrefixindex.php +++ b/includes/specials/SpecialPrefixindex.php @@ -20,6 +20,7 @@ * @file * @ingroup SpecialPage */ +use MediaWiki\MediaWikiServices; /** * Implements Special:Prefixindex @@ -191,7 +192,10 @@ class SpecialPrefixindex extends SpecialAllPages { } $res = $dbr->select( 'page', - [ 'page_namespace', 'page_title', 'page_is_redirect' ], + array_merge( + [ 'page_namespace', 'page_title' ], + LinkCache::getSelectFields() + ), $conds, __METHOD__, [ @@ -206,26 +210,27 @@ class SpecialPrefixindex extends SpecialAllPages { $n = 0; if ( $res->numRows() > 0 ) { $out = Html::openElement( 'ul', [ 'class' => 'mw-prefixindex-list' ] ); + $linkCache = MediaWikiServices::getInstance()->getLinkCache(); $prefixLength = strlen( $prefix ); - while ( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) { - $t = Title::makeTitle( $s->page_namespace, $s->page_title ); - if ( $t ) { - $displayed = $t->getText(); - // Try not to generate unclickable links - if ( $this->stripPrefix && $prefixLength !== strlen( $displayed ) ) { - $displayed = substr( $displayed, $prefixLength ); - } - $link = ( $s->page_is_redirect ? '
' : '' ) . - Linker::linkKnown( - $t, - htmlspecialchars( $displayed ), - $s->page_is_redirect ? [ 'class' => 'mw-redirect' ] : [] - ) . - ( $s->page_is_redirect ? '
' : '' ); - } else { - $link = '[[' . htmlspecialchars( $s->page_title ) . ']]'; + foreach ( $res as $row ) { + if ( $n >= $this->maxPerPage ) { + break; } + $title = Title::newFromRow( $row ); + // Make sure it gets into LinkCache + $linkCache->addGoodLinkObjFromRow( $title, $row ); + $displayed = $title->getText(); + // Try not to generate unclickable links + if ( $this->stripPrefix && $prefixLength !== strlen( $displayed ) ) { + $displayed = substr( $displayed, $prefixLength ); + } + $link = ( $title->isRedirect() ? '
' : '' ) . + Linker::linkKnown( + $title, + htmlspecialchars( $displayed ) + ) . + ( $title->isRedirect() ? '
' : '' ); $out .= "
  • $link
  • \n"; $n++; -- 2.20.1