</tr></thead>"
);
+ $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() {
+ $trackingCategories = array();
foreach ( $this->getConfig()->get( 'TrackingCategories' ) as $catMsg ) {
/*
* Check if the tracking category varies by namespace
* 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
if ( $catName !== '-' ) {
$catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
if ( $catTitle ) {
- $catTitleText = Linker::link(
- $catTitle,
- htmlspecialchars( $catName )
- );
- $allMsgs[] = $catTitleText;
+ $allCats[] = $catTitle;
}
}
}
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() {