diff options
Diffstat (limited to 'includes/specials/SpecialTrackingCategories.php')
-rw-r--r-- | includes/specials/SpecialTrackingCategories.php | 142 |
1 files changed, 97 insertions, 45 deletions
diff --git a/includes/specials/SpecialTrackingCategories.php b/includes/specials/SpecialTrackingCategories.php index 552031f1..d219c99d 100644 --- a/includes/specials/SpecialTrackingCategories.php +++ b/includes/specials/SpecialTrackingCategories.php @@ -36,6 +36,24 @@ class SpecialTrackingCategories extends SpecialPage { parent::__construct( 'TrackingCategories' ); } + /** + * Tracking categories that exist in core + * + * @var array + */ + private static $coreTrackingCategories = array( + 'index-category', + 'noindex-category', + 'duplicate-args-category', + 'expensive-parserfunction-category', + 'post-expand-template-argument-category', + 'post-expand-template-inclusion-category', + 'hidden-category-category', + 'broken-file-category', + 'node-count-exceeded-category', + 'expansion-depth-exceeded-category', + ); + function execute( $par ) { $this->setHeaders(); $this->outputHeader(); @@ -56,23 +74,88 @@ class SpecialTrackingCategories extends SpecialPage { </tr></thead>" ); - foreach ( $this->getConfig()->get( 'TrackingCategories' ) as $catMsg ) { + $trackingCategories = $this->prepareTrackingCategoriesData(); + + $batch = new LinkBatch(); + foreach ( $trackingCategories as $catMsg => $data ) { + $batch->addObj( $data['msg'] ); + foreach ( $data['cats'] as $catTitle ) { + $batch->addObj( $catTitle ); + } + } + $batch->execute(); + + foreach ( $trackingCategories as $catMsg => $data ) { + $allMsgs = array(); + $catDesc = $catMsg . '-desc'; + + $catMsgTitleText = Linker::link( + $data['msg'], + htmlspecialchars( $catMsg ) + ); + + foreach ( $data['cats'] as $catTitle ) { + $catTitleText = Linker::link( + $catTitle, + htmlspecialchars( $catTitle->getText() ) + ); + $allMsgs[] = $catTitleText; + } + + # Extra message, when no category was found + if ( !count( $allMsgs ) ) { + $allMsgs[] = $this->msg( 'trackingcategories-disabled' )->parse(); + } + + /* + * Show category description if it exists as a system message + * as category-name-desc + */ + $descMsg = $this->msg( $catDesc ); + if ( $descMsg->isBlank() ) { + $descMsg = $this->msg( 'trackingcategories-nodesc' ); + } + + $this->getOutput()->addHTML( + Html::openElement( 'tr' ) . + Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-name' ) ) . + $this->getLanguage()->commaList( array_unique( $allMsgs ) ) . + Html::closeElement( 'td' ) . + Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-msg' ) ) . + $catMsgTitleText . + Html::closeElement( 'td' ) . + Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-desc' ) ) . + $descMsg->parse() . + Html::closeElement( 'td' ) . + Html::closeElement( 'tr' ) + ); + } + $this->getOutput()->addHTML( Html::closeElement( 'table' ) ); + } + + /** + * Read the global and extract title objects from the corresponding messages + * @return array Array( 'msg' => Title, 'cats' => Title[] ) + */ + private function prepareTrackingCategoriesData() { + $categories = array_merge( + self::$coreTrackingCategories, + ExtensionRegistry::getInstance()->getAttribute( 'TrackingCategories' ), + $this->getConfig()->get( 'TrackingCategories' ) // deprecated + ); + $trackingCategories = array(); + foreach ( $categories as $catMsg ) { /* * Check if the tracking category varies by namespace * Otherwise only pages in the current namespace will be displayed * If it does vary, show pages considering all namespaces */ $msgObj = $this->msg( $catMsg )->inContentLanguage(); - $allMsgs = array(); - $catDesc = $catMsg . '-desc'; + $allCats = array(); $catMsgTitle = Title::makeTitleSafe( NS_MEDIAWIKI, $catMsg ); if ( !$catMsgTitle ) { continue; } - $catMsgTitleText = Linker::link( - $catMsgTitle, - htmlspecialchars( $catMsg ) - ); // Match things like {{NAMESPACE}} and {{NAMESPACENUMBER}}. // False positives are ok, this is just an efficiency shortcut @@ -88,11 +171,7 @@ class SpecialTrackingCategories extends SpecialPage { if ( $catName !== '-' ) { $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName ); if ( $catTitle ) { - $catTitleText = Linker::link( - $catTitle, - htmlspecialchars( $catName ) - ); - $allMsgs[] = $catTitleText; + $allCats[] = $catTitle; } } } @@ -102,44 +181,17 @@ class SpecialTrackingCategories extends SpecialPage { if ( $catName !== '-' ) { $catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName ); if ( $catTitle ) { - $catTitleText = Linker::link( - $catTitle, - htmlspecialchars( $catName ) - ); - $allMsgs[] = $catTitleText; + $allCats[] = $catTitle; } } } - - # Extra message, when no category was found - if ( !count( $allMsgs ) ) { - $allMsgs[] = $this->msg( 'trackingcategories-disabled' )->parse(); - } - - /* - * Show category description if it exists as a system message - * as category-name-desc - */ - $descMsg = $this->msg( $catDesc ); - if ( $descMsg->isBlank() ) { - $descMsg = $this->msg( 'trackingcategories-nodesc' ); - } - - $this->getOutput()->addHTML( - Html::openElement( 'tr' ) . - Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-name' ) ) . - $this->getLanguage()->commaList( array_unique( $allMsgs ) ) . - Html::closeElement( 'td' ) . - Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-msg' ) ) . - $catMsgTitleText . - Html::closeElement( 'td' ) . - Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-desc' ) ) . - $descMsg->parse() . - Html::closeElement( 'td' ) . - Html::closeElement( 'tr' ) + $trackingCategories[$catMsg] = array( + 'cats' => $allCats, + 'msg' => $catMsgTitle, ); } - $this->getOutput()->addHTML( Html::closeElement( 'table' ) ); + + return $trackingCategories; } protected function getGroupName() { |