summaryrefslogtreecommitdiff
path: root/includes/specials/SpecialTrackingCategories.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/specials/SpecialTrackingCategories.php')
-rw-r--r--includes/specials/SpecialTrackingCategories.php142
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() {