X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialCategories.php;h=84d1f7c7fd2e74af73441783f1bef79a239dbcdd;hb=d56b46598d58f16eb8d7c8252083bbf3844e5430;hp=5314f63489604cf980ce0fb5e5839f5c25816f92;hpb=e3bd13db0c285f312e31bb1b7271af4628cca80c;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialCategories.php b/includes/specials/SpecialCategories.php index 5314f63489..84d1f7c7fd 100644 --- a/includes/specials/SpecialCategories.php +++ b/includes/specials/SpecialCategories.php @@ -26,11 +26,6 @@ */ 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( @@ -92,109 +63,3 @@ class SpecialCategories extends SpecialPage { return 'pages'; } } - -/** - * TODO: Allow sorting by count. We need to have a unique index to do this - * properly. - * - * @ingroup SpecialPage Pager - */ -class CategoryPager extends AlphabeticPager { - - /** - * @var PageLinkRenderer - */ - protected $linkRenderer; - - /** - * @param IContextSource $context - * @param string $from - * @param PageLinkRenderer $linkRenderer - */ - public function __construct( IContextSource $context, $from, PageLinkRenderer $linkRenderer - ) { - parent::__construct( $context ); - $from = str_replace( ' ', '_', $from ); - if ( $from !== '' ) { - $from = Title::capitalize( $from, NS_CATEGORY ); - $this->setOffset( $from ); - $this->setIncludeOffset( true ); - } - - $this->linkRenderer = $linkRenderer; - } - - function getQueryInfo() { - return [ - 'tables' => [ 'category' ], - 'fields' => [ 'cat_title', 'cat_pages' ], - 'conds' => [ 'cat_pages > 0' ], - 'options' => [ 'USE INDEX' => 'cat_title' ], - ]; - } - - function getIndexField() { -# return array( 'abc' => 'cat_title', 'count' => 'cat_pages' ); - return 'cat_title'; - } - - function getDefaultQuery() { - parent::getDefaultQuery(); - unset( $this->mDefaultQuery['from'] ); - - return $this->mDefaultQuery; - } - -# protected function getOrderTypeMessages() { -# return array( 'abc' => 'special-categories-sort-abc', -# 'count' => 'special-categories-sort-count' ); -# } - - protected function getDefaultDirections() { -# return array( 'abc' => false, 'count' => true ); - return false; - } - - /* Override getBody to apply LinksBatch on resultset before actually outputting anything. */ - public function getBody() { - $batch = new LinkBatch; - - $this->mResult->rewind(); - - foreach ( $this->mResult as $row ) { - $batch->addObj( Title::makeTitleSafe( NS_CATEGORY, $row->cat_title ) ); - } - $batch->execute(); - $this->mResult->rewind(); - - return parent::getBody(); - } - - function formatRow( $result ) { - $title = new TitleValue( NS_CATEGORY, $result->cat_title ); - $text = $title->getText(); - $link = $this->linkRenderer->renderHtmlLink( $title, $text ); - - $count = $this->msg( 'nmembers' )->numParams( $result->cat_pages )->escaped(); - return Html::rawElement( 'li', null, $this->getLanguage()->specialList( $link, $count ) ) . "\n"; - } - - public function getStartForm( $from ) { - return Xml::tags( - 'form', - [ 'method' => 'get', 'action' => wfScript() ], - Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . - Xml::fieldset( - $this->msg( 'categories' )->text(), - Xml::inputLabel( - $this->msg( 'categoriesfrom' )->text(), - 'from', 'from', 20, $from, [ 'class' => 'mw-ui-input-inline' ] ) . - ' ' . - Html::submitButton( - $this->msg( 'categories-submit' )->text(), - [], [ 'mw-ui-progressive' ] - ) - ) - ); - } -}