From 2bbe34ff545054cdabcdeba3f7b8c92c21664282 Mon Sep 17 00:00:00 2001 From: Rob Church Date: Mon, 4 Jun 2007 21:39:12 +0000 Subject: [PATCH] * (bug 10118) Introduce Special:Mostlinkedtemplates * Change default text for "specialpage-empty" --- RELEASE-NOTES | 2 + includes/AutoLoader.php | 1 + includes/QueryPage.php | 1 + includes/SpecialMostlinkedtemplates.php | 132 ++++++++++++++++++++++++ includes/SpecialPage.php | 1 + languages/messages/MessagesEn.php | 5 +- 6 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 includes/SpecialMostlinkedtemplates.php diff --git a/RELEASE-NOTES b/RELEASE-NOTES index fa58e33a34..933fc87b76 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -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 == diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 09426d196f..06e5b37937 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -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', diff --git a/includes/QueryPage.php b/includes/QueryPage.php index 9e71c93282..f7f90d771c 100644 --- a/includes/QueryPage.php +++ b/includes/QueryPage.php @@ -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 index 0000000000..874cc23c30 --- /dev/null +++ b/includes/SpecialMostlinkedtemplates.php @@ -0,0 +1,132 @@ + + */ +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 diff --git a/includes/SpecialPage.php b/includes/SpecialPage.php index 5a9376e7e9..fbf76259cf 100644 --- a/includes/SpecialPage.php +++ b/includes/SpecialPage.php @@ -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' ), diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index d36d852ccf..f5e2972223 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -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', -- 2.20.1