ChangesList: Use LinkRenderer instead of Linker::link()
authorKunal Mehta <legoktm@member.fsf.org>
Fri, 13 May 2016 07:24:29 +0000 (00:24 -0700)
committerKunal Mehta <legoktm@member.fsf.org>
Thu, 26 May 2016 21:47:45 +0000 (14:47 -0700)
Change-Id: Iae32a9e365aad268d2671df6a0b916e4d9c0a801

includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/changes/RCCacheEntryFactory.php
tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php
tests/phpunit/includes/changes/TestRecentChangesHelper.php

index b938ff0..9948040 100644 (file)
@@ -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' ],
index 1070877..099a295 100644 (file)
@@ -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 = '<span class="history-deleted">' . $rcObj->timestamp . '</span> ';
                } 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();
index 549bc37..2c5c8b1 100644 (file)
@@ -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 )
                        );
index 9debc03..16f210b 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+use MediaWiki\Linker\LinkRenderer;
+use MediaWiki\MediaWikiServices;
+
 /**
  * @covers RCCacheEntryFactory
  *
@@ -14,6 +17,11 @@ class RCCacheEntryFactoryTest extends MediaWikiLangTestCase {
         */
        private $testRecentChangesHelper;
 
+       /**
+        * @var LinkRenderer;
+        */
+       private $linkRenderer;
+
        public function __construct( $name = null, array $data = [], $dataName = '' ) {
                parent::__construct( $name, $data, $dataName );
 
@@ -26,6 +34,10 @@ class RCCacheEntryFactoryTest extends MediaWikiLangTestCase {
                $this->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 );
index faa1dcc..cac3d43 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+use MediaWiki\Linker\LinkRenderer;
+use MediaWiki\MediaWikiServices;
 
 /**
  * Helper for generating test recent changes entries.
@@ -100,7 +102,10 @@ class TestRecentChangesHelper {
        public function getCacheEntry( $recentChange ) {
                $rcCacheFactory = new RCCacheEntryFactory(
                        new RequestContext(),
-                       [ 'diff' => 'diff', 'cur' => 'cur', 'last' => 'last' ]
+                       [ 'diff' => 'diff', 'cur' => 'cur', 'last' => 'last' ],
+                       new LinkRenderer(
+                               MediaWikiServices::getInstance()->getTitleFormatter()
+                       )
                );
                return $rcCacheFactory->newFromRecentChange( $recentChange, false );
        }