Copy wl_notificationtimestamp when copying watchlist entries on move
[lhc/web/wiklou.git] / includes / specials / SpecialTrackingCategories.php
index 73bdbd6..7684c05 100644 (file)
@@ -37,14 +37,11 @@ class SpecialTrackingCategories extends SpecialPage {
        }
 
        function execute( $par ) {
-               // Global array containing names of tracking categories
-               global $wgTrackingCategories;
-
                $this->setHeaders();
                $this->outputHeader();
                $this->getOutput()->allowClickjacking();
                $this->getOutput()->addHTML(
-                       Html::openElement( 'table', array( 'class' => 'mw-datatable TablePager',
+                       Html::openElement( 'table', array( 'class' => 'mw-datatable',
                                'id' => 'mw-trackingcategories-table' ) ) . "\n" .
                        "<thead><tr>
                        <th>" .
@@ -59,23 +56,83 @@ class SpecialTrackingCategories extends SpecialPage {
                        </tr></thead>"
                );
 
-               foreach ( $wgTrackingCategories 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() {
+               $trackingCategories = array();
+               foreach ( $this->getConfig()->get( 'TrackingCategories' ) 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
@@ -91,11 +148,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;
                                                }
                                        }
                                }
@@ -105,44 +158,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() {