* (bug 10118) Introduce Special:Mostlinkedtemplates
authorRob Church <robchurch@users.mediawiki.org>
Mon, 4 Jun 2007 21:39:12 +0000 (21:39 +0000)
committerRob Church <robchurch@users.mediawiki.org>
Mon, 4 Jun 2007 21:39:12 +0000 (21:39 +0000)
* Change default text for "specialpage-empty"

RELEASE-NOTES
includes/AutoLoader.php
includes/QueryPage.php
includes/SpecialMostlinkedtemplates.php [new file with mode: 0644]
includes/SpecialPage.php
languages/messages/MessagesEn.php

index fa58e33..933fc87 100644 (file)
@@ -112,6 +112,8 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
 * (bug 10113) Fix double-click for view source on protected pages
 * (bug 10117) Special:Wantedpages doesn't handle invalid titles in result
   set [now prints out a warning]
+* (bug 10118) Introduced Special:Mostlinkedtemplates, report which lists
+  templates with a high number of inclusion links
 
 == MediaWiki API changes since 1.10 ==
 
index 09426d1..06e5b37 100644 (file)
@@ -190,6 +190,7 @@ function __autoload($className) {
                'MostimagesPage' => 'includes/SpecialMostimages.php',
                'MostlinkedPage' => 'includes/SpecialMostlinked.php',
                'MostlinkedCategoriesPage' => 'includes/SpecialMostlinkedcategories.php',
+               'SpecialMostlinkedtemplates' => 'includes/SpecialMostlinkedtemplates.php',
                'MostrevisionsPage' => 'includes/SpecialMostrevisions.php',
                'FewestrevisionsPage' => 'includes/SpecialFewestrevisions.php',
                'MovePageForm' => 'includes/SpecialMovepage.php',
index 9e71c93..f7f90d7 100644 (file)
@@ -25,6 +25,7 @@ $wgQueryPages = array(
        array( 'MostcategoriesPage',            'Mostcategories'                ),
        array( 'MostimagesPage',                'Mostimages'                    ),
        array( 'MostlinkedCategoriesPage',      'Mostlinkedcategories'          ),
+       array( 'SpecialMostlinkedtemplates',    'Mostlinkedtemplates'                   ),
        array( 'MostlinkedPage',                'Mostlinked'                    ),
        array( 'MostrevisionsPage',             'Mostrevisions'                 ),
        array( 'FewestrevisionsPage',           'Fewestrevisions'               ),
diff --git a/includes/SpecialMostlinkedtemplates.php b/includes/SpecialMostlinkedtemplates.php
new file mode 100644 (file)
index 0000000..874cc23
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * Special page lists templates with a large number of
+ * transclusion links, i.e. "most used" templates
+ *
+ * @addtogroup SpecialPage
+ * @author Rob Church <robchur@gmail.com>
+ */
+class SpecialMostlinkedtemplates extends QueryPage {
+
+       /**
+        * Name of the report
+        *
+        * @return string
+        */
+       public function getName() {
+               return 'Mostlinkedtemplates';
+       }
+       
+       /**
+        * Is this report expensive, i.e should it be cached?
+        *
+        * @return bool
+        */
+       public function isExpensive() {
+               return true;
+       }
+       
+       /**
+        * Is there a feed available?
+        *
+        * @return bool
+        */
+       public function isSyndicated() {
+               return false;
+       }
+
+       /**
+        * Sort the results in descending order?
+        *
+        * @return bool
+        */
+       public function sortDescending() {
+               return true;
+       }
+       
+       /**
+        * Generate SQL for the report
+        *
+        * @return string
+        */
+       public function getSql() {
+               $dbr = wfGetDB( DB_SLAVE );
+               $templatelinks = $dbr->tableName( 'templatelinks' );
+               $name = $dbr->addQuotes( $this->getName() );
+               return "SELECT {$name} AS type,
+                       " . NS_TEMPLATE . " AS namespace,
+                       tl_title AS title,
+                       COUNT(*) AS value
+                       FROM {$templatelinks}
+                       WHERE tl_namespace = " . NS_TEMPLATE . "
+                       GROUP BY 1, 2, 3";                      
+       }
+       
+       /**
+        * Pre-cache page existence to speed up link generation
+        *
+        * @param Database $dbr Database connection
+        * @param int $res Result pointer
+        */
+       public function preprocessResults( $dbr, $res ) {
+               $batch = new LinkBatch();
+               while( $row = $dbr->fetchObject( $res ) ) {
+                       $title = Title::makeTitleSafe( $row->namespace, $row->title );
+                       $batch->addObj( $title );
+               }
+               $batch->execute();
+               if( $dbr->numRows( $res ) > 0 )
+                       $dbr->dataSeek( $res, 0 );
+       }
+       
+       /**
+        * Format a result row
+        *
+        * @param Skin $skin Skin to use for UI elements
+        * @param object $result Result row
+        * @return string
+        */
+       public function formatResult( $skin, $result ) {
+               $title = Title::makeTitleSafe( $result->namespace, $result->title );
+               if( $title instanceof Title ) {
+                       return wfSpecialList(
+                               $skin->makeLinkObj( $title ),
+                               $this->makeWlhLink( $title, $skin, $result )
+                       );
+               } else {
+                       $tsafe = htmlspecialchars( $result->title );
+                       return "Invalid title in result set; {$tsafe}";
+               }
+       }
+       
+       /**
+        * Make a "what links here" link for a given title
+        *
+        * @param Title $title Title to make the link for
+        * @param Skin $skin Skin to use
+        * @param object $result Result row
+        * @return string
+        */
+       private function makeWlhLink( $title, $skin, $result ) {
+               global $wgLang;
+               $wlh = SpecialPage::getTitleFor( 'Whatlinkshere' );
+               $label = wfMsgExt( 'nlinks', array( 'parsemag', 'escape' ),
+                       $wgLang->formatNum( $result->value ) );
+               return $skin->makeKnownLinkObj( $wlh, $label, 'target=' . $title->getPrefixedUrl() );
+       }
+       
+}
+
+/**
+ * Execution function
+ *
+ * @param mixed $par Parameters passed to the page
+ */
+function wfSpecialMostlinkedtemplates( $par = false ) {
+       list( $limit, $offset ) = wfCheckLimits();
+       $mlt = new SpecialMostlinkedtemplates();
+       $mlt->doQuery( $offset, $limit );
+}
+
+?>
\ No newline at end of file
index 5a9376e..fbf7625 100644 (file)
@@ -100,6 +100,7 @@ class SpecialPage
                'Wantedcategories'          => array( 'SpecialPage', 'Wantedcategories' ),
                'Mostlinked'                => array( 'SpecialPage', 'Mostlinked' ),
                'Mostlinkedcategories'      => array( 'SpecialPage', 'Mostlinkedcategories' ),
+               'Mostlinkedtemplates'           => array( 'SpecialPage', 'Mostlinkedtemplates' ),
                'Mostcategories'            => array( 'SpecialPage', 'Mostcategories' ),
                'Mostimages'                => array( 'SpecialPage', 'Mostimages' ),
                'Mostrevisions'             => array( 'SpecialPage', 'Mostrevisions' ),
index d36d852..f5e2972 100644 (file)
@@ -375,6 +375,7 @@ $specialPageAliases = array(
        'Wantedcategories'          => array( 'Wantedcategories' ),
        'Mostlinked'                => array( 'Mostlinked' ),
        'Mostlinkedcategories'      => array( 'Mostlinkedcategories' ),
+       'Mostlinkedtemplates'           => array( 'Mostlinkedtemplates' ),
        'Mostcategories'            => array( 'Mostcategories' ),
        'Mostimages'                => array( 'Mostimages' ),
        'Mostrevisions'             => array( 'Mostrevisions' ),
@@ -1549,7 +1550,7 @@ The [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] length is '''$7'''
 'nmembers'             => '$1 {{PLURAL:$1|member|members}}',
 'nrevisions'           => '$1 {{PLURAL:$1|revision|revisions}}',
 'nviews'               => '$1 {{PLURAL:$1|view|views}}',
-'specialpage-empty'     => 'This page is empty.',
+'specialpage-empty'     => 'There are no results for this report.',
 'lonelypages'  => 'Orphaned pages',
 'lonelypages-summary'  => '',
 'lonelypagestext'      => 'The following pages are not linked from other pages in this wiki.',
@@ -1571,6 +1572,8 @@ The [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] length is '''$7'''
 'mostlinked-summary' => '',
 'mostlinkedcategories' => 'Most linked to categories',
 'mostlinkedcategories-summary' => '',
+'mostlinkedtemplates' => 'Most linked-to templates',
+'mostlinkedtemplates-summary' => '',
 'mostcategories' => 'Articles with the most categories',
 'mostcategories-summary' => '',
 'mostimages'   => 'Most linked to images',