SpecialCategories: Use LinkRenderer instead of MediaWikiPageLinkRenderer
authorKunal Mehta <legoktm@member.fsf.org>
Tue, 24 May 2016 02:16:27 +0000 (19:16 -0700)
committerSiebrand <siebrand@kitano.nl>
Thu, 23 Jun 2016 12:27:15 +0000 (12:27 +0000)
And use TitleValue in one place that we can. While it is technically not
equivalent since Title::makeTitleSafe() can return null, since it is
coming directly out of the database, it should be safe to not require
validation.

Change-Id: I97bc0fd8e86f212414487ec88fbb2d7600bdacb6

includes/specials/SpecialCategories.php
includes/specials/pagers/CategoryPager.php

index d7d338c..84d1f7c 100644 (file)
  */
 class SpecialCategories extends SpecialPage {
 
-       /**
-        * @var PageLinkRenderer
-        */
-       protected $linkRenderer = null;
-
        public function __construct() {
                parent::__construct( 'Categories' );
 
@@ -39,42 +34,18 @@ class SpecialCategories extends SpecialPage {
                // using the initServices() method.
        }
 
-       /**
-        * Initialize or override the PageLinkRenderer SpecialCategories collaborates with.
-        * Useful mainly for testing.
-        *
-        * @todo the pager should also be injected, and de-coupled from the rendering logic.
-        *
-        * @param PageLinkRenderer $linkRenderer
-        */
-       public function setPageLinkRenderer(
-               PageLinkRenderer $linkRenderer
-       ) {
-               $this->linkRenderer = $linkRenderer;
-       }
-
-       /**
-        * Initialize any services we'll need (unless it has already been provided via a setter).
-        * This allows for dependency injection even though we don't control object creation.
-        */
-       private function initServices() {
-               if ( !$this->linkRenderer ) {
-                       $lang = $this->getContext()->getLanguage();
-                       $titleFormatter = new MediaWikiTitleCodec( $lang, GenderCache::singleton() );
-                       $this->linkRenderer = new MediaWikiPageLinkRenderer( $titleFormatter );
-               }
-       }
-
        public function execute( $par ) {
-               $this->initServices();
-
                $this->setHeaders();
                $this->outputHeader();
                $this->getOutput()->allowClickjacking();
 
                $from = $this->getRequest()->getText( 'from', $par );
 
-               $cap = new CategoryPager( $this->getContext(), $from, $this->linkRenderer );
+               $cap = new CategoryPager(
+                       $this->getContext(),
+                       $from,
+                       $this->getLinkRenderer()
+               );
                $cap->doQuery();
 
                $this->getOutput()->addHTML(
index cba4952..b78fed8 100644 (file)
@@ -18,6 +18,7 @@
  * @file
  * @ingroup Pager
  */
+use MediaWiki\Linker\LinkRenderer;
 
 /**
  * @ingroup Pager
 class CategoryPager extends AlphabeticPager {
 
        /**
-        * @var PageLinkRenderer
+        * @var LinkRenderer
         */
        protected $linkRenderer;
 
        /**
         * @param IContextSource $context
         * @param string $from
-        * @param PageLinkRenderer $linkRenderer
+        * @param LinkRenderer $linkRenderer
         */
-       public function __construct( IContextSource $context, $from, PageLinkRenderer $linkRenderer
+       public function __construct( IContextSource $context, $from, LinkRenderer $linkRenderer
        ) {
                parent::__construct( $context );
                $from = str_replace( ' ', '_', $from );
@@ -74,7 +75,7 @@ class CategoryPager extends AlphabeticPager {
                $this->mResult->rewind();
 
                foreach ( $this->mResult as $row ) {
-                       $batch->addObj( Title::makeTitleSafe( NS_CATEGORY, $row->cat_title ) );
+                       $batch->addObj( new TitleValue( NS_CATEGORY, $row->cat_title ) );
                }
                $batch->execute();
                $this->mResult->rewind();
@@ -85,7 +86,7 @@ class CategoryPager extends AlphabeticPager {
        function formatRow( $result ) {
                $title = new TitleValue( NS_CATEGORY, $result->cat_title );
                $text = $title->getText();
-               $link = $this->linkRenderer->renderHtmlLink( $title, $text );
+               $link = $this->linkRenderer->makeLink( $title, $text );
 
                $count = $this->msg( 'nmembers' )->numParams( $result->cat_pages )->escaped();
                return Html::rawElement( 'li', null, $this->getLanguage()->specialList( $link, $count ) ) . "\n";