]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - includes/specials/SpecialUnwatchedpages.php
MediaWiki 1.30.2 renames
[autoinstallsdev/mediawiki.git] / includes / specials / SpecialUnwatchedpages.php
1 <?php
2 /**
3  * Implements Special:Unwatchedpages
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 displays a list of pages that are not on anyones watchlist.
32  *
33  * @ingroup SpecialPage
34  */
35 class UnwatchedpagesPage extends QueryPage {
36
37         function __construct( $name = 'Unwatchedpages' ) {
38                 parent::__construct( $name, 'unwatchedpages' );
39         }
40
41         public function isExpensive() {
42                 return true;
43         }
44
45         function isSyndicated() {
46                 return false;
47         }
48
49         /**
50          * Pre-cache page existence to speed up link generation
51          *
52          * @param IDatabase $db
53          * @param ResultWrapper $res
54          */
55         public function preprocessResults( $db, $res ) {
56                 if ( !$res->numRows() ) {
57                         return;
58                 }
59
60                 $batch = new LinkBatch();
61                 foreach ( $res as $row ) {
62                         $batch->add( $row->namespace, $row->title );
63                 }
64                 $batch->execute();
65
66                 $res->seek( 0 );
67         }
68
69         public function getQueryInfo() {
70                 $dbr = wfGetDB( DB_REPLICA );
71                 return [
72                         'tables' => [ 'page', 'watchlist' ],
73                         'fields' => [
74                                 'namespace' => 'page_namespace',
75                                 'title' => 'page_title',
76                                 'value' => 'page_namespace'
77                         ],
78                         'conds' => [
79                                 'wl_title IS NULL',
80                                 'page_is_redirect' => 0,
81                                 'page_namespace != ' . $dbr->addQuotes( NS_MEDIAWIKI ),
82                         ],
83                         'join_conds' => [ 'watchlist' => [
84                                 'LEFT JOIN', [ 'wl_title = page_title',
85                                         'wl_namespace = page_namespace' ] ] ]
86                 ];
87         }
88
89         function sortDescending() {
90                 return false;
91         }
92
93         function getOrderFields() {
94                 return [ 'page_namespace', 'page_title' ];
95         }
96
97         /**
98          * Add the JS
99          * @param string|null $par
100          */
101         public function execute( $par ) {
102                 parent::execute( $par );
103                 $this->getOutput()->addModules( 'mediawiki.special.unwatchedPages' );
104         }
105
106         /**
107          * @param Skin $skin
108          * @param object $result Result row
109          * @return string
110          */
111         function formatResult( $skin, $result ) {
112                 global $wgContLang;
113
114                 $nt = Title::makeTitleSafe( $result->namespace, $result->title );
115                 if ( !$nt ) {
116                         return Html::element( 'span', [ 'class' => 'mw-invalidtitle' ],
117                                 Linker::getInvalidTitleDescription( $this->getContext(), $result->namespace, $result->title ) );
118                 }
119
120                 $text = $wgContLang->convert( $nt->getPrefixedText() );
121
122                 $linkRenderer = $this->getLinkRenderer();
123
124                 $plink = $linkRenderer->makeKnownLink( $nt, $text );
125                 $wlink = $linkRenderer->makeKnownLink(
126                         $nt,
127                         $this->msg( 'watch' )->text(),
128                         [ 'class' => 'mw-watch-link' ],
129                         [ 'action' => 'watch' ]
130                 );
131
132                 return $this->getLanguage()->specialList( $plink, $wlink );
133         }
134
135         protected function getGroupName() {
136                 return 'maintenance';
137         }
138 }