Various fixes to Special:Mostcategories.
authorAlexandre Emsenhuber <ialex.wiki@gmail.com>
Wed, 9 May 2012 07:54:03 +0000 (09:54 +0200)
committerAlexandre Emsenhuber <ialex.wiki@gmail.com>
Wed, 9 May 2012 07:56:56 +0000 (09:56 +0200)
* Show descriptive error message on invalid title
* Don't check for page existence if the query is not cached, since the page must exist to be listed here
* Do a LinkBatch if the query is cached, otherwise we end up with on database query per displayed row

Change-Id: Ia10d0e7d69def0ee1f42727124518bc6f6335dda

includes/specials/SpecialMostcategories.php

index 98b7367..08f3cb4 100644 (file)
@@ -52,6 +52,26 @@ class MostcategoriesPage extends QueryPage {
                );
        }
 
+       /**
+        * @param $db DatabaseBase
+        * @param $res
+        */
+       function preprocessResults( $db, $res ) {
+               # There's no point doing a batch check if we aren't caching results;
+               # the page must exist for it to have been pulled out of the table
+               if ( !$this->isCached() || !$res->numRows() ) {
+                       return;
+               }
+
+               $batch = new LinkBatch();
+               foreach ( $res as $row ) {
+                       $batch->add( $row->namespace, $row->title );
+               }
+               $batch->execute();
+
+               $res->seek( 0 );
+       }
+
        /**
         * @param $skin Skin
         * @param $result
@@ -59,9 +79,19 @@ class MostcategoriesPage extends QueryPage {
         */
        function formatResult( $skin, $result ) {
                $title = Title::makeTitleSafe( $result->namespace, $result->title );
+               if ( !$title ) {
+                       return Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
+                               Linker::getInvalidTitleDescription( $this->getContext(), $result->namespace, $result->title ) );
+               }
+
+               if ( $this->isCached() ) {
+                       $link = Linker::link( $title );
+               } else {
+                       $link = Linker::linkKnown( $title );
+               }
 
                $count = $this->msg( 'ncategories' )->numParams( $result->value )->escaped();
-               $link = Linker::link( $title );
+
                return $this->getLanguage()->specialList( $link, $count );
        }
 }