X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/specials/SpecialUncategorizedcategories.php diff --git a/includes/specials/SpecialUncategorizedcategories.php b/includes/specials/SpecialUncategorizedcategories.php index 9574af70..5ff9e04e 100644 --- a/includes/specials/SpecialUncategorizedcategories.php +++ b/includes/specials/SpecialUncategorizedcategories.php @@ -27,22 +27,67 @@ * @ingroup SpecialPage */ class UncategorizedCategoriesPage extends UncategorizedPagesPage { - function __construct() { + /** + * Holds a list of categories, which shouldn't be listed on this special page, + * even if it is uncategorized. + * @var array + */ + private $exceptionList = null; + + function __construct( $name = 'Uncategorizedcategories' ) { + parent::__construct( $name ); $this->requestedNamespace = NS_CATEGORY; } - function getName() { - return "Uncategorizedcategories"; + /** + * Returns an array of category titles (usually without the namespace), which + * shouldn't be listed on this page, even if they're uncategorized. + * + * @return array + */ + private function getExceptionList() { + if ( $this->exceptionList === null ) { + $exList = $this->msg( 'uncategorized-categories-exceptionlist' ) + ->inContentLanguage()->plain(); + $proposedTitles = explode( "\n", $exList ); + foreach ( $proposedTitles as $count => $titleStr ) { + if ( strpos( $titleStr, '*' ) !== 0 ) { + continue; + } + $titleStr = preg_replace( "/^\\*\\s*/", '', $titleStr ); + $title = Title::newFromText( $titleStr, NS_CATEGORY ); + if ( $title && $title->getNamespace() !== NS_CATEGORY ) { + $title = Title::makeTitleSafe( NS_CATEGORY, $titleStr ); + } + if ( $title ) { + $this->exceptionList[] = $title->getDBKey(); + } + } + } + return $this->exceptionList; } -} -/** - * constructor - */ -function wfSpecialUncategorizedcategories() { - list( $limit, $offset ) = wfCheckLimits(); + public function getQueryInfo() { + $dbr = wfGetDB( DB_REPLICA ); + $query = parent::getQueryInfo(); + $exceptionList = $this->getExceptionList(); + if ( $exceptionList ) { + $query['conds'][] = 'page_title not in ( ' . $dbr->makeList( $exceptionList ) . ' )'; + } - $lpp = new UncategorizedCategoriesPage(); + return $query; + } + + /** + * Formats the result + * @param Skin $skin The current skin + * @param object $result The query result + * @return string The category link + */ + function formatResult( $skin, $result ) { + $title = Title::makeTitle( NS_CATEGORY, $result->title ); + $text = $title->getText(); - return $lpp->doQuery( $offset, $limit ); + return $this->getLinkRenderer()->makeKnownLink( $title, $text ); + } }