From 2ec627ea02ad07db4842d3d53a1cce2b3c1384ee Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mat=C4=9Bj=20Such=C3=A1nek?= Date: Tue, 9 Jul 2019 12:45:54 +0200 Subject: [PATCH] Clean up LinkRenderer usage in IndexPager and extensions The property needs to be private because pagers in extensions may declare the same property with stronger visibility which would crash. Bug: T149346 Change-Id: I082152b64141f1a9a4085bba23fe81a99ec8d886 --- includes/actions/pagers/HistoryPager.php | 6 ++--- includes/pager/IndexPager.php | 23 +++++++++++++++---- includes/pager/TablePager.php | 10 ++++---- .../specials/pagers/AllMessagesTablePager.php | 5 ++-- includes/specials/pagers/BlockListPager.php | 6 ++--- includes/specials/pagers/CategoryPager.php | 11 ++------- includes/specials/pagers/ContribsPager.php | 2 +- .../specials/pagers/DeletedContribsPager.php | 2 +- includes/specials/pagers/ImageListPager.php | 7 +++--- includes/specials/pagers/NewFilesPager.php | 2 +- .../specials/pagers/ProtectedPagesPager.php | 13 ++++------- includes/specials/pagers/UsersPager.php | 6 +---- 12 files changed, 43 insertions(+), 50 deletions(-) diff --git a/includes/actions/pagers/HistoryPager.php b/includes/actions/pagers/HistoryPager.php index 14f76bc37f..fd2fbd0d99 100644 --- a/includes/actions/pagers/HistoryPager.php +++ b/includes/actions/pagers/HistoryPager.php @@ -422,7 +422,7 @@ class HistoryPager extends ReverseChronologicalPager { $undoTooltip = $latest ? [ 'title' => $this->msg( 'tooltip-undo' )->text() ] : []; - $undolink = MediaWikiServices::getInstance()->getLinkRenderer()->makeKnownLink( + $undolink = $this->getLinkRenderer()->makeKnownLink( $this->getTitle(), $this->msg( 'editundo' )->text(), $undoTooltip, @@ -502,7 +502,7 @@ class HistoryPager extends ReverseChronologicalPager { ) { return $cur; } else { - return MediaWikiServices::getInstance()->getLinkRenderer()->makeKnownLink( + return $this->getLinkRenderer()->makeKnownLink( $this->getTitle(), new HtmlArmor( $cur ), [], @@ -531,7 +531,7 @@ class HistoryPager extends ReverseChronologicalPager { return $last; } - $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer(); + $linkRenderer = $this->getLinkRenderer(); if ( $next === 'unknown' ) { # Next row probably exists but is unknown, use an oldid=prev link return $linkRenderer->makeKnownLink( diff --git a/includes/pager/IndexPager.php b/includes/pager/IndexPager.php index 04021cc038..472bcdd8a2 100644 --- a/includes/pager/IndexPager.php +++ b/includes/pager/IndexPager.php @@ -21,10 +21,12 @@ * @ingroup Pager */ -use Wikimedia\Rdbms\IResultWrapper; -use Wikimedia\Rdbms\IDatabase; +use MediaWiki\Linker\LinkRenderer; use MediaWiki\Linker\LinkTarget; +use MediaWiki\MediaWikiServices; use MediaWiki\Navigation\PrevNextNavigationRenderer; +use Wikimedia\Rdbms\IDatabase; +use Wikimedia\Rdbms\IResultWrapper; /** * IndexPager is an efficient pager which uses a (roughly unique) index in the @@ -157,7 +159,10 @@ abstract class IndexPager extends ContextSource implements Pager { */ public $mResult; - public function __construct( IContextSource $context = null ) { + /** @var LinkRenderer */ + private $linkRenderer; + + public function __construct( IContextSource $context = null, LinkRenderer $linkRenderer = null ) { if ( $context ) { $this->setContext( $context ); } @@ -209,6 +214,7 @@ abstract class IndexPager extends ContextSource implements Pager { ? $dir[$this->mOrderType] : $dir; } + $this->linkRenderer = $linkRenderer; } /** @@ -526,9 +532,9 @@ abstract class IndexPager extends ContextSource implements Pager { $attrs['class'] = "mw-{$type}link"; } - return Linker::linkKnown( + return $this->getLinkRenderer()->makeKnownLink( $this->getTitle(), - $text, + new HtmlArmor( $text ), $attrs, $query + $this->getDefaultQuery() ); @@ -804,4 +810,11 @@ abstract class IndexPager extends ContextSource implements Pager { return $prevNext->buildPrevNextNavigation( $title, $offset, $limit, $query, $atend ); } + + protected function getLinkRenderer() { + if ( $this->linkRenderer === null ) { + $this->linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer(); + } + return $this->linkRenderer; + } } diff --git a/includes/pager/TablePager.php b/includes/pager/TablePager.php index d94104bda9..7f546173aa 100644 --- a/includes/pager/TablePager.php +++ b/includes/pager/TablePager.php @@ -21,6 +21,8 @@ * @ingroup Pager */ +use MediaWiki\Linker\LinkRenderer; + /** * Table-based display with a user-selectable sort order * @ingroup Pager @@ -32,10 +34,8 @@ abstract class TablePager extends IndexPager { /** @var stdClass */ protected $mCurrentRow; - public function __construct( IContextSource $context = null ) { - if ( $context ) { - $this->setContext( $context ); - } + public function __construct( IContextSource $context = null, LinkRenderer $linkRenderer = null ) { + parent::__construct( $context, $linkRenderer ); $this->mSort = $this->getRequest()->getText( 'sort' ); if ( !array_key_exists( $this->mSort, $this->getFieldNames() ) @@ -48,8 +48,6 @@ abstract class TablePager extends IndexPager { } elseif ( $this->getRequest()->getBool( 'desc' ) ) { $this->mDefaultDirection = IndexPager::DIR_DESCENDING; } /* Else leave it at whatever the class default is */ - - parent::__construct(); } /** diff --git a/includes/specials/pagers/AllMessagesTablePager.php b/includes/specials/pagers/AllMessagesTablePager.php index 76e2ab7754..45d77cea01 100644 --- a/includes/specials/pagers/AllMessagesTablePager.php +++ b/includes/specials/pagers/AllMessagesTablePager.php @@ -235,7 +235,7 @@ class AllMessagesTablePager extends TablePager { } function formatValue( $field, $value ) { - $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer(); + $linkRenderer = $this->getLinkRenderer(); switch ( $field ) { case 'am_title' : $title = Title::makeTitle( NS_MEDIAWIKI, $value . $this->suffix ); @@ -256,8 +256,7 @@ class AllMessagesTablePager extends TablePager { $title = $linkRenderer->makeKnownLink( $title, $this->getLanguage()->lcfirst( $value ) ); } else { $title = $linkRenderer->makeBrokenLink( - $title, - $this->getLanguage()->lcfirst( $value ) + $title, $this->getLanguage()->lcfirst( $value ) ); } if ( $this->mCurrentRow->am_talk_exists ) { diff --git a/includes/specials/pagers/BlockListPager.php b/includes/specials/pagers/BlockListPager.php index 01aed22726..77b732635e 100644 --- a/includes/specials/pagers/BlockListPager.php +++ b/includes/specials/pagers/BlockListPager.php @@ -45,9 +45,9 @@ class BlockListPager extends TablePager { * @param array $conds */ public function __construct( $page, $conds ) { + parent::__construct( $page->getContext(), $page->getLinkRenderer() ); $this->conds = $conds; $this->mDefaultDirection = IndexPager::DIR_DESCENDING; - parent::__construct( $page->getContext() ); } function getFieldNames() { @@ -97,7 +97,7 @@ class BlockListPager extends TablePager { $formatted = ''; - $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer(); + $linkRenderer = $this->getLinkRenderer(); switch ( $name ) { case 'ipb_timestamp': @@ -250,7 +250,7 @@ class BlockListPager extends TablePager { */ private function getRestrictionListHTML( stdClass $row ) { $items = []; - $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer(); + $linkRenderer = $this->getLinkRenderer(); foreach ( $this->restrictions as $restriction ) { if ( $restriction->getBlockId() !== (int)$row->ipb_id ) { diff --git a/includes/specials/pagers/CategoryPager.php b/includes/specials/pagers/CategoryPager.php index 7db90c1788..db2ee388b5 100644 --- a/includes/specials/pagers/CategoryPager.php +++ b/includes/specials/pagers/CategoryPager.php @@ -25,11 +25,6 @@ use MediaWiki\Linker\LinkRenderer; */ class CategoryPager extends AlphabeticPager { - /** - * @var LinkRenderer - */ - protected $linkRenderer; - /** * @param IContextSource $context * @param string $from @@ -37,15 +32,13 @@ class CategoryPager extends AlphabeticPager { */ public function __construct( IContextSource $context, $from, LinkRenderer $linkRenderer ) { - parent::__construct( $context ); + parent::__construct( $context, $linkRenderer ); $from = str_replace( ' ', '_', $from ); if ( $from !== '' ) { $from = Title::capitalize( $from, NS_CATEGORY ); $this->setOffset( $from ); $this->setIncludeOffset( true ); } - - $this->linkRenderer = $linkRenderer; } function getQueryInfo() { @@ -85,7 +78,7 @@ class CategoryPager extends AlphabeticPager { function formatRow( $result ) { $title = new TitleValue( NS_CATEGORY, $result->cat_title ); $text = $title->getText(); - $link = $this->linkRenderer->makeLink( $title, $text ); + $link = $this->getLinkRenderer()->makeLink( $title, $text ); $count = $this->msg( 'nmembers' )->numParams( $result->cat_pages )->escaped(); return Html::rawElement( 'li', null, $this->getLanguage()->specialList( $link, $count ) ) . "\n"; diff --git a/includes/specials/pagers/ContribsPager.php b/includes/specials/pagers/ContribsPager.php index 9ac7df5a0b..1b0c59ab25 100644 --- a/includes/specials/pagers/ContribsPager.php +++ b/includes/specials/pagers/ContribsPager.php @@ -621,7 +621,7 @@ class ContribsPager extends RangeChronologicalPager { $classes = []; $attribs = []; - $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer(); + $linkRenderer = $this->getLinkRenderer(); $page = null; // Create a title for the revision if possible diff --git a/includes/specials/pagers/DeletedContribsPager.php b/includes/specials/pagers/DeletedContribsPager.php index 2f40aceaa8..7dbfae80d9 100644 --- a/includes/specials/pagers/DeletedContribsPager.php +++ b/includes/specials/pagers/DeletedContribsPager.php @@ -289,7 +289,7 @@ class DeletedContribsPager extends IndexPager { function formatRevisionRow( $row ) { $page = Title::makeTitle( $row->ar_namespace, $row->ar_title ); - $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer(); + $linkRenderer = $this->getLinkRenderer(); $rev = new Revision( [ 'title' => $page, diff --git a/includes/specials/pagers/ImageListPager.php b/includes/specials/pagers/ImageListPager.php index 2d3b6b291f..d0f05e62e4 100644 --- a/includes/specials/pagers/ImageListPager.php +++ b/includes/specials/pagers/ImageListPager.php @@ -53,7 +53,8 @@ class ImageListPager extends TablePager { public function __construct( IContextSource $context, $userName = null, $search = '', $including = false, $showAll = false ) { - $this->setContext( $context ); + parent::__construct( $context ); + $this->mIncluding = $including; $this->mShowAll = $showAll; @@ -94,8 +95,6 @@ class ImageListPager extends TablePager { } else { $this->mDefaultDirection = IndexPager::DIR_DESCENDING; } - - parent::__construct( $context ); } /** @@ -437,7 +436,7 @@ class ImageListPager extends TablePager { */ function formatValue( $field, $value ) { $services = MediaWikiServices::getInstance(); - $linkRenderer = $services->getLinkRenderer(); + $linkRenderer = $this->getLinkRenderer(); switch ( $field ) { case 'thumb': $opt = [ 'time' => wfTimestamp( TS_MW, $this->mCurrentRow->img_timestamp ) ]; diff --git a/includes/specials/pagers/NewFilesPager.php b/includes/specials/pagers/NewFilesPager.php index ed86e54273..57db8b3f5f 100644 --- a/includes/specials/pagers/NewFilesPager.php +++ b/includes/specials/pagers/NewFilesPager.php @@ -194,7 +194,7 @@ class NewFilesPager extends RangeChronologicalPager { $user = User::newFromId( $row->img_user ); $title = Title::makeTitle( NS_FILE, $name ); - $ul = MediaWikiServices::getInstance()->getLinkRenderer()->makeLink( + $ul = $this->getLinkRenderer()->makeLink( $user->getUserPage(), $user->getName() ); diff --git a/includes/specials/pagers/ProtectedPagesPager.php b/includes/specials/pagers/ProtectedPagesPager.php index 5583842497..747dea284a 100644 --- a/includes/specials/pagers/ProtectedPagesPager.php +++ b/includes/specials/pagers/ProtectedPagesPager.php @@ -26,11 +26,6 @@ class ProtectedPagesPager extends TablePager { public $mConds; private $type, $level, $namespace, $sizetype, $size, $indefonly, $cascadeonly, $noredirect; - /** - * @var LinkRenderer - */ - private $linkRenderer; - /** * @param SpecialPage $form * @param array $conds @@ -48,6 +43,7 @@ class ProtectedPagesPager extends TablePager { $sizetype, $size, $indefonly, $cascadeonly, $noredirect, LinkRenderer $linkRenderer ) { + parent::__construct( $form->getContext(), $linkRenderer ); $this->mConds = $conds; $this->type = $type ?: 'edit'; $this->level = $level; @@ -57,8 +53,6 @@ class ProtectedPagesPager extends TablePager { $this->indefonly = (bool)$indefonly; $this->cascadeonly = (bool)$cascadeonly; $this->noredirect = (bool)$noredirect; - $this->linkRenderer = $linkRenderer; - parent::__construct( $form->getContext() ); } function preprocessResults( $result ) { @@ -119,6 +113,7 @@ class ProtectedPagesPager extends TablePager { function formatValue( $field, $value ) { /** @var object $row */ $row = $this->mCurrentRow; + $linkRenderer = $this->getLinkRenderer(); switch ( $field ) { case 'log_timestamp': @@ -148,7 +143,7 @@ class ProtectedPagesPager extends TablePager { ) ); } else { - $formatted = $this->linkRenderer->makeLink( $title ); + $formatted = $linkRenderer->makeLink( $title ); } if ( !is_null( $row->page_len ) ) { $formatted .= $this->getLanguage()->getDirMark() . @@ -165,7 +160,7 @@ class ProtectedPagesPager extends TablePager { $value, /* User preference timezone */true ) ); $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title ); if ( $this->getUser()->isAllowed( 'protect' ) && $title ) { - $changeProtection = $this->linkRenderer->makeKnownLink( + $changeProtection = $linkRenderer->makeKnownLink( $title, $this->msg( 'protect_change' )->text(), [], diff --git a/includes/specials/pagers/UsersPager.php b/includes/specials/pagers/UsersPager.php index 57b575b8ec..e27fb58655 100644 --- a/includes/specials/pagers/UsersPager.php +++ b/includes/specials/pagers/UsersPager.php @@ -44,10 +44,6 @@ class UsersPager extends AlphabeticPager { * another page */ public function __construct( IContextSource $context = null, $par = null, $including = null ) { - if ( $context ) { - $this->setContext( $context ); - } - $request = $this->getRequest(); $par = $par ?? ''; $parms = explode( '/', $par ); @@ -87,7 +83,7 @@ class UsersPager extends AlphabeticPager { } } - parent::__construct(); + parent::__construct( $context ); } /** -- 2.20.1