From 53ccc289fa4046a1af87c5c2c2922e277a9b88db Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Fri, 13 May 2016 00:24:29 -0700 Subject: [PATCH] ChangesList: Use LinkRenderer instead of Linker::link() Change-Id: Iae32a9e365aad268d2671df6a0b916e4d9c0a801 --- includes/changes/ChangesList.php | 24 +++++++++---- includes/changes/EnhancedChangesList.php | 36 ++++++++++--------- includes/changes/RCCacheEntryFactory.php | 28 ++++++++++----- .../changes/RCCacheEntryFactoryTest.php | 30 ++++++++++++++-- .../changes/TestRecentChangesHelper.php | 7 +++- 5 files changed, 89 insertions(+), 36 deletions(-) diff --git a/includes/changes/ChangesList.php b/includes/changes/ChangesList.php index b938ff0b35..9948040ea9 100644 --- a/includes/changes/ChangesList.php +++ b/includes/changes/ChangesList.php @@ -21,6 +21,8 @@ * * @file */ +use MediaWiki\Linker\LinkRenderer; +use MediaWiki\MediaWikiServices; class ChangesList extends ContextSource { /** @@ -39,6 +41,11 @@ class ChangesList extends ContextSource { /** @var BagOStuff */ protected $watchMsgCache; + /** + * @var LinkRenderer + */ + protected $linkRenderer; + /** * Changeslist constructor * @@ -54,6 +61,7 @@ class ChangesList extends ContextSource { } $this->preCacheMessages(); $this->watchMsgCache = new HashBagOStuff( [ 'maxKeys' => 50 ] ); + $this->linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer(); } /** @@ -337,8 +345,10 @@ class ChangesList extends ContextSource { */ public function insertLog( &$s, $title, $logtype ) { $page = new LogPage( $logtype ); - $logname = $page->getName()->setContext( $this->getContext() )->escaped(); - $s .= $this->msg( 'parentheses' )->rawParams( Linker::linkKnown( $title, $logname ) )->escaped(); + $logname = $page->getName()->setContext( $this->getContext() )->text(); + $s .= $this->msg( 'parentheses' )->rawParams( + $this->linkRenderer->makeKnownLink( $title, $logname ) + )->escaped(); } /** @@ -363,9 +373,9 @@ class ChangesList extends ContextSource { 'oldid' => $rc->mAttribs['rc_last_oldid'] ]; - $diffLink = Linker::linkKnown( + $diffLink = $this->linkRenderer->makeKnownLink( $rc->getTitle(), - $this->message['diff'], + new HtmlArmor( $this->message['diff'] ), [], $query ); @@ -375,9 +385,9 @@ class ChangesList extends ContextSource { } else { $diffhist = $diffLink . $this->message['pipe-separator']; # History link - $diffhist .= Linker::linkKnown( + $diffhist .= $this->linkRenderer->makeKnownLink( $rc->getTitle(), - $this->message['hist'], + new HtmlArmor( $this->message['hist'] ), [], [ 'curid' => $rc->mAttribs['rc_cur_id'], @@ -415,7 +425,7 @@ class ChangesList extends ContextSource { $params = [ 'redirect' => 'no' ]; } - $articlelink = Linker::link( + $articlelink = $this->linkRenderer->makeLink( $rc->getTitle(), null, [ 'class' => 'mw-changeslist-title' ], diff --git a/includes/changes/EnhancedChangesList.php b/includes/changes/EnhancedChangesList.php index 1070877c5d..099a295c91 100644 --- a/includes/changes/EnhancedChangesList.php +++ b/includes/changes/EnhancedChangesList.php @@ -54,7 +54,8 @@ class EnhancedChangesList extends ChangesList { // message is set by the parent ChangesList class $this->cacheEntryFactory = new RCCacheEntryFactory( $context, - $this->message + $this->message, + $this->linkRenderer ); } @@ -390,9 +391,9 @@ class EnhancedChangesList extends ChangesList { } elseif ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) { $link = '' . $rcObj->timestamp . ' '; } else { - $link = Linker::linkKnown( + $link = $this->linkRenderer->makeKnownLink( $rcObj->getTitle(), - $rcObj->timestamp, + new HtmlArmor( $rcObj->timestamp ), [], $params ); @@ -524,26 +525,24 @@ class EnhancedChangesList extends ChangesList { ) { $links['total-changes'] = $nchanges[$n]; } else { - $links['total-changes'] = Linker::link( + $links['total-changes'] = $this->linkRenderer->makeKnownLink( $block0->getTitle(), - $nchanges[$n], + new HtmlArmor( $nchanges[$n] ), [], $queryParams + [ 'diff' => $currentRevision, 'oldid' => $last->mAttribs['rc_last_oldid'], - ], - [ 'known', 'noclasses' ] + ] ); if ( $sinceLast > 0 && $sinceLast < $n ) { - $links['total-changes-since-last'] = Linker::link( + $links['total-changes-since-last'] = $this->linkRenderer->makeKnownLink( $block0->getTitle(), - $sinceLastVisitMsg[$sinceLast], + new HtmlArmor( $sinceLastVisitMsg[$sinceLast] ), [], $queryParams + [ 'diff' => $currentRevision, 'oldid' => $unvisitedOldid, - ], - [ 'known', 'noclasses' ] + ] ); } } @@ -558,9 +557,9 @@ class EnhancedChangesList extends ChangesList { $params = $queryParams; $params['action'] = 'history'; - $links['history'] = Linker::linkKnown( + $links['history'] = $this->linkRenderer->makeKnownLink( $block0->getTitle(), - $this->message['enhancedrc-history'], + new HtmlArmor( $this->message['enhancedrc-history'] ), [], $params ); @@ -618,9 +617,11 @@ class EnhancedChangesList extends ChangesList { if ( $logType ) { $logPage = new LogPage( $logType ); $logTitle = SpecialPage::getTitleFor( 'Log', $logType ); - $logName = $logPage->getName()->escaped(); + $logName = $logPage->getName()->text(); $data['logLink'] = $this->msg( 'parentheses' ) - ->rawParams( Linker::linkKnown( $logTitle, $logName ) )->escaped(); + ->rawParams( + $this->linkRenderer->makeKnownLink( $logTitle, $logName ) + )->escaped(); } else { $data['articleLink'] = $this->getArticleLink( $rcObj, $rcObj->unpatrolled, $rcObj->watched ); } @@ -710,9 +711,10 @@ class EnhancedChangesList extends ChangesList { } $retVal = ' ' . $this->msg( 'parentheses' ) - ->rawParams( $rc->difflink . $this->message['pipe-separator'] . Linker::linkKnown( + ->rawParams( $rc->difflink . $this->message['pipe-separator'] + . $this->linkRenderer->makeKnownLink( $pageTitle, - $this->message['hist'], + new HtmlArmor( $this->message['hist'] ), [], $query ) )->escaped(); diff --git a/includes/changes/RCCacheEntryFactory.php b/includes/changes/RCCacheEntryFactory.php index 549bc3730e..2c5c8b128c 100644 --- a/includes/changes/RCCacheEntryFactory.php +++ b/includes/changes/RCCacheEntryFactory.php @@ -19,6 +19,7 @@ * * @file */ +use MediaWiki\Linker\LinkRenderer; class RCCacheEntryFactory { @@ -28,13 +29,22 @@ class RCCacheEntryFactory { /* @var string[] */ private $messages; + /** + * @var LinkRenderer + */ + private $linkRenderer; + /** * @param IContextSource $context * @param string[] $messages + * @param LinkRenderer $linkRenderer */ - public function __construct( IContextSource $context, $messages ) { + public function __construct( + IContextSource $context, $messages, LinkRenderer $linkRenderer + ) { $this->context = $context; $this->messages = $messages; + $this->linkRenderer = $linkRenderer; } /** @@ -99,7 +109,7 @@ class RCCacheEntryFactory { // New unpatrolled pages if ( $cacheEntry->unpatrolled && $type == RC_NEW ) { - $clink = Linker::linkKnown( $cacheEntry->getTitle() ); + $clink = $this->linkRenderer->makeKnownLink( $cacheEntry->getTitle() ); // Log entries } elseif ( $type == RC_LOG ) { $logType = $cacheEntry->mAttribs['rc_log_type']; @@ -108,7 +118,7 @@ class RCCacheEntryFactory { $clink = $this->getLogLink( $logType ); } else { wfDebugLog( 'recentchanges', 'Unexpected log entry with no log type in recent changes' ); - $clink = Linker::link( $cacheEntry->getTitle() ); + $clink = $this->linkRenderer->makeLink( $cacheEntry->getTitle() ); } // Log entries (old format) and special pages } elseif ( $cacheEntry->mAttribs['rc_namespace'] == NS_SPECIAL ) { @@ -116,7 +126,7 @@ class RCCacheEntryFactory { $clink = ''; // Edits } else { - $clink = Linker::linkKnown( $cacheEntry->getTitle() ); + $clink = $this->linkRenderer->makeKnownLink( $cacheEntry->getTitle() ); } return $clink; @@ -125,10 +135,12 @@ class RCCacheEntryFactory { private function getLogLink( $logType ) { $logtitle = SpecialPage::getTitleFor( 'Log', $logType ); $logpage = new LogPage( $logType ); - $logname = $logpage->getName()->escaped(); + $logname = $logpage->getName()->text(); $logLink = $this->context->msg( 'parentheses' ) - ->rawParams( Linker::linkKnown( $logtitle, $logname ) )->escaped(); + ->rawParams( + $this->linkRenderer->makeKnownLink( $logtitle, $logname ) + )->escaped(); return $logLink; } @@ -242,9 +254,9 @@ class RCCacheEntryFactory { if ( !$showDiffLinks || !$lastOldid || in_array( $type, $logTypes ) ) { $lastLink = $lastMessage; } else { - $lastLink = Linker::linkKnown( + $lastLink = $this->linkRenderer->makeKnownLink( $cacheEntry->getTitle(), - $lastMessage, + new HtmlArmor( $lastMessage ), [], $this->buildDiffQueryParams( $cacheEntry ) ); diff --git a/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php b/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php index 9debc03ef8..16f210b717 100644 --- a/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php +++ b/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php @@ -1,5 +1,8 @@ setMwGlobals( [ 'wgArticlePath' => '/wiki/$1' ] ); + + $this->linkRenderer = new LinkRenderer( + MediaWikiServices::getInstance()->getTitleFormatter() + ); } public function testNewFromRecentChange() { @@ -40,7 +52,11 @@ class RCCacheEntryFactoryTest extends MediaWikiLangTestCase { 0, // counter 0 // number of watching users ); - $cacheEntryFactory = new RCCacheEntryFactory( $this->getContext(), $this->getMessages() ); + $cacheEntryFactory = new RCCacheEntryFactory( + $this->getContext(), + $this->getMessages(), + $this->linkRenderer + ); $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, false ); $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry ); @@ -78,7 +94,11 @@ class RCCacheEntryFactoryTest extends MediaWikiLangTestCase { 0, // counter 0 // number of watching users ); - $cacheEntryFactory = new RCCacheEntryFactory( $this->getContext(), $this->getMessages() ); + $cacheEntryFactory = new RCCacheEntryFactory( + $this->getContext(), + $this->getMessages(), + $this->linkRenderer + ); $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, false ); $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry ); @@ -108,7 +128,11 @@ class RCCacheEntryFactoryTest extends MediaWikiLangTestCase { 0, // counter 0 // number of watching users ); - $cacheEntryFactory = new RCCacheEntryFactory( $this->getContext(), $this->getMessages() ); + $cacheEntryFactory = new RCCacheEntryFactory( + $this->getContext(), + $this->getMessages(), + $this->linkRenderer + ); $cacheEntry = $cacheEntryFactory->newFromRecentChange( $recentChange, false ); $this->assertInstanceOf( 'RCCacheEntry', $cacheEntry ); diff --git a/tests/phpunit/includes/changes/TestRecentChangesHelper.php b/tests/phpunit/includes/changes/TestRecentChangesHelper.php index faa1dccd01..cac3d436b3 100644 --- a/tests/phpunit/includes/changes/TestRecentChangesHelper.php +++ b/tests/phpunit/includes/changes/TestRecentChangesHelper.php @@ -1,4 +1,6 @@ 'diff', 'cur' => 'cur', 'last' => 'last' ] + [ 'diff' => 'diff', 'cur' => 'cur', 'last' => 'last' ], + new LinkRenderer( + MediaWikiServices::getInstance()->getTitleFormatter() + ) ); return $rcCacheFactory->newFromRecentChange( $recentChange, false ); } -- 2.20.1