]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - includes/specials/SpecialMostcategories.php
MediaWiki 1.30.2-scripts2
[autoinstalls/mediawiki.git] / includes / specials / SpecialMostcategories.php
1 <?php
2 /**
3  * Implements Special:Mostcategories
4  *
5  * Copyright © 2005 Ævar Arnfjörð Bjarmason
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  * http://www.gnu.org/copyleft/gpl.html
21  *
22  * @file
23  * @ingroup SpecialPage
24  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
25  */
26
27 use Wikimedia\Rdbms\ResultWrapper;
28 use Wikimedia\Rdbms\IDatabase;
29
30 /**
31  * A special page that list pages that have highest category count
32  *
33  * @ingroup SpecialPage
34  */
35 class MostcategoriesPage extends QueryPage {
36         function __construct( $name = 'Mostcategories' ) {
37                 parent::__construct( $name );
38         }
39
40         public function isExpensive() {
41                 return true;
42         }
43
44         function isSyndicated() {
45                 return false;
46         }
47
48         public function getQueryInfo() {
49                 return [
50                         'tables' => [ 'categorylinks', 'page' ],
51                         'fields' => [
52                                 'namespace' => 'page_namespace',
53                                 'title' => 'page_title',
54                                 'value' => 'COUNT(*)'
55                         ],
56                         'conds' => [ 'page_namespace' => MWNamespace::getContentNamespaces() ],
57                         'options' => [
58                                 'HAVING' => 'COUNT(*) > 1',
59                                 'GROUP BY' => [ 'page_namespace', 'page_title' ]
60                         ],
61                         'join_conds' => [
62                                 'page' => [
63                                         'LEFT JOIN',
64                                         'page_id = cl_from'
65                                 ]
66                         ]
67                 ];
68         }
69
70         /**
71          * @param IDatabase $db
72          * @param ResultWrapper $res
73          */
74         function preprocessResults( $db, $res ) {
75                 $this->executeLBFromResultWrapper( $res );
76         }
77
78         /**
79          * @param Skin $skin
80          * @param object $result Result row
81          * @return string
82          */
83         function formatResult( $skin, $result ) {
84                 $title = Title::makeTitleSafe( $result->namespace, $result->title );
85                 if ( !$title ) {
86                         return Html::element(
87                                 'span',
88                                 [ 'class' => 'mw-invalidtitle' ],
89                                 Linker::getInvalidTitleDescription(
90                                         $this->getContext(),
91                                         $result->namespace,
92                                         $result->title
93                                 )
94                         );
95                 }
96
97                 $linkRenderer = $this->getLinkRenderer();
98                 if ( $this->isCached() ) {
99                         $link = $linkRenderer->makeLink( $title );
100                 } else {
101                         $link = $linkRenderer->makeKnownLink( $title );
102                 }
103
104                 $count = $this->msg( 'ncategories' )->numParams( $result->value )->escaped();
105
106                 return $this->getLanguage()->specialList( $link, $count );
107         }
108
109         protected function getGroupName() {
110                 return 'highuse';
111         }
112 }