Change various uses of GROUP BY 1,2,3 and similar to use the actual column names...
[mediawiki.git] / includes / specials / SpecialMostlinkedtemplates.php
blobd597a4e005d2d88ff1afcc94a15493bf1516c3da
1 <?php
2 /**
3 * @file
4 * @ingroup SpecialPage
5 */
7 /**
8 * Special page lists templates with a large number of
9 * transclusion links, i.e. "most used" templates
11 * @ingroup SpecialPage
12 * @author Rob Church <robchur@gmail.com>
14 class SpecialMostlinkedtemplates extends QueryPage {
16 /**
17 * Name of the report
19 * @return string
21 public function getName() {
22 return 'Mostlinkedtemplates';
25 /**
26 * Is this report expensive, i.e should it be cached?
28 * @return bool
30 public function isExpensive() {
31 return true;
34 /**
35 * Is there a feed available?
37 * @return bool
39 public function isSyndicated() {
40 return false;
43 /**
44 * Sort the results in descending order?
46 * @return bool
48 public function sortDescending() {
49 return true;
52 /**
53 * Generate SQL for the report
55 * @return string
57 public function getSql() {
58 $dbr = wfGetDB( DB_SLAVE );
59 $templatelinks = $dbr->tableName( 'templatelinks' );
60 $name = $dbr->addQuotes( $this->getName() );
61 return "SELECT {$name} AS type,
62 " . NS_TEMPLATE . " AS namespace,
63 tl_title AS title,
64 COUNT(*) AS value
65 FROM {$templatelinks}
66 WHERE tl_namespace = " . NS_TEMPLATE . "
67 GROUP BY tl_title";
70 /**
71 * Pre-cache page existence to speed up link generation
73 * @param Database $dbr Database connection
74 * @param int $res Result pointer
76 public function preprocessResults( $db, $res ) {
77 $batch = new LinkBatch();
78 while( $row = $db->fetchObject( $res ) ) {
79 $batch->add( $row->namespace, $row->title );
81 $batch->execute();
82 if( $db->numRows( $res ) > 0 )
83 $db->dataSeek( $res, 0 );
86 /**
87 * Format a result row
89 * @param Skin $skin Skin to use for UI elements
90 * @param object $result Result row
91 * @return string
93 public function formatResult( $skin, $result ) {
94 $title = Title::makeTitleSafe( $result->namespace, $result->title );
95 if( $title instanceof Title ) {
96 return wfSpecialList(
97 $skin->makeLinkObj( $title ),
98 $this->makeWlhLink( $title, $skin, $result )
100 } else {
101 $tsafe = htmlspecialchars( $result->title );
102 return "Invalid title in result set; {$tsafe}";
107 * Make a "what links here" link for a given title
109 * @param Title $title Title to make the link for
110 * @param Skin $skin Skin to use
111 * @param object $result Result row
112 * @return string
114 private function makeWlhLink( $title, $skin, $result ) {
115 global $wgLang;
116 $wlh = SpecialPage::getTitleFor( 'Whatlinkshere' );
117 $label = wfMsgExt( 'nlinks', array( 'parsemag', 'escape' ),
118 $wgLang->formatNum( $result->value ) );
119 return $skin->makeKnownLinkObj( $wlh, $label, 'target=' . $title->getPrefixedUrl() );
124 * Execution function
126 * @param mixed $par Parameters passed to the page
128 function wfSpecialMostlinkedtemplates( $par = false ) {
129 list( $limit, $offset ) = wfCheckLimits();
130 $mlt = new SpecialMostlinkedtemplates();
131 $mlt->doQuery( $offset, $limit );