Completed
Branch master (715cbe)
by
unknown
51:55
created

UnwatchedpagesPage::preprocessResults()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

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