From: Matěj Suchánek Date: Tue, 9 Jul 2019 10:45:54 +0000 (+0200) Subject: Clean up LinkRenderer usage in IndexPager and extensions X-Git-Tag: 1.34.0-rc.0~564^2~1 X-Git-Url: http://git.cyclocoop.org/data/%24self?a=commitdiff_plain;h=2ec627ea02ad07db4842d3d53a1cce2b3c1384ee;p=lhc%2Fweb%2Fwiklou.git 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 --- 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 ); } /**