X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fspecials%2FSpecialUncategorizedcategories.php;h=77b69264577ad8a53df287a38e04caed1289bc73;hp=1cc40a9e900db1c9de69a588ae1a7cedea0b57a6;hb=22806b0a4509e97b56fb52b387e17e3c80fb7eb2;hpb=1f8441b6830111631c860c5c677d812de833a58f diff --git a/includes/specials/SpecialUncategorizedcategories.php b/includes/specials/SpecialUncategorizedcategories.php index 1cc40a9e90..77b6926457 100644 --- a/includes/specials/SpecialUncategorizedcategories.php +++ b/includes/specials/SpecialUncategorizedcategories.php @@ -27,11 +27,57 @@ * @ingroup SpecialPage */ class UncategorizedCategoriesPage extends UncategorizedPagesPage { + /** + * 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; } + /** + * 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; + } + + public function getQueryInfo() { + $dbr = wfGetDB( DB_SLAVE ); + $query = parent::getQueryInfo(); + $exceptionList = $this->getExceptionList(); + if ( $exceptionList ) { + $query['conds'][] = 'page_title not in ( ' . $dbr->makeList( $exceptionList ) . ' )'; + } + + return $query; + } + /** * Formats the result * @param Skin $skin The current skin @@ -42,6 +88,6 @@ class UncategorizedCategoriesPage extends UncategorizedPagesPage { $title = Title::makeTitle( NS_CATEGORY, $result->title ); $text = $title->getText(); - return Linker::linkKnown( $title, htmlspecialchars( $text ) ); + return $this->getLinkRenderer()->makeKnownLink( $title, $text ); } }