X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/specials/SpecialCategories.php diff --git a/includes/specials/SpecialCategories.php b/includes/specials/SpecialCategories.php index c2dd40cd..84d1f7c7 100644 --- a/includes/specials/SpecialCategories.php +++ b/includes/specials/SpecialCategories.php @@ -26,113 +26,40 @@ */ class SpecialCategories extends SpecialPage { - function __construct() { + public function __construct() { parent::__construct( 'Categories' ); - } - function execute( $par ) { - global $wgOut, $wgRequest; + // Since we don't control the constructor parameters, we can't inject services that way. + // Instead, we initialize services in the execute() method, and allow them to be overridden + // using the initServices() method. + } + public function execute( $par ) { $this->setHeaders(); $this->outputHeader(); - $wgOut->allowClickjacking(); - - $from = $wgRequest->getText( 'from', $par ); + $this->getOutput()->allowClickjacking(); - $cap = new CategoryPager( $from ); - $cap->doQuery(); + $from = $this->getRequest()->getText( 'from', $par ); - $wgOut->addHTML( - Html::openElement( 'div', array( 'class' => 'mw-spcontent' ) ) . - wfMsgExt( 'categoriespagetext', array( 'parse' ), $cap->getNumRows() ) . - $cap->getStartForm( $from ) . - $cap->getNavigationBar() . - '' . - $cap->getNavigationBar() . - Html::closeElement( 'div' ) + $cap = new CategoryPager( + $this->getContext(), + $from, + $this->getLinkRenderer() ); - } -} + $cap->doQuery(); -/** - * TODO: Allow sorting by count. We need to have a unique index to do this - * properly. - * - * @ingroup SpecialPage Pager - */ -class CategoryPager extends AlphabeticPager { - function __construct( $from ) { - parent::__construct(); - $from = str_replace( ' ', '_', $from ); - if( $from !== '' ) { - $from = Title::capitalize( $from, NS_CATEGORY ); - $this->mOffset = $from; - } - } - - function getQueryInfo() { - return array( - 'tables' => array( 'category' ), - 'fields' => array( 'cat_title','cat_pages' ), - 'conds' => array( 'cat_pages > 0' ), - 'options' => array( 'USE INDEX' => 'cat_title' ), + $this->getOutput()->addHTML( + Html::openElement( 'div', [ 'class' => 'mw-spcontent' ] ) . + $this->msg( 'categoriespagetext', $cap->getNumRows() )->parseAsBlock() . + $cap->getStartForm( $from ) . + $cap->getNavigationBar() . + '' . + $cap->getNavigationBar() . + Html::closeElement( 'div' ) ); } - 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) { - global $wgLang; - $title = Title::makeTitle( NS_CATEGORY, $result->cat_title ); - $titleText = $this->getSkin()->link( $title, htmlspecialchars( $title->getText() ) ); - $count = wfMsgExt( 'nmembers', array( 'parsemag', 'escape' ), - $wgLang->formatNum( $result->cat_pages ) ); - return Xml::tags('li', null, "$titleText ($count)" ) . "\n"; - } - - public function getStartForm( $from ) { - global $wgScript; - $t = SpecialPage::getTitleFor( 'Categories' ); - - return - Xml::tags( 'form', array( 'method' => 'get', 'action' => $wgScript ), - Html::hidden( 'title', $t->getPrefixedText() ) . - Xml::fieldset( wfMsg( 'categories' ), - Xml::inputLabel( wfMsg( 'categoriesfrom' ), - 'from', 'from', 20, $from ) . - ' ' . - Xml::submitButton( wfMsg( 'allpagessubmit' ) ) ) ); + protected function getGroupName() { + return 'pages'; } }