Completed
Branch master (6a5c07)
by
unknown
29:40
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
		return [
68
			'tables' => [ 'page', 'watchlist' ],
69
			'fields' => [
70
				'namespace' => 'page_namespace',
71
				'title' => 'page_title',
72
				'value' => 'page_namespace'
73
			],
74
			'conds' => [
75
				'wl_title IS NULL',
76
				'page_is_redirect' => 0,
77
				"page_namespace != '" . NS_MEDIAWIKI . "'"
78
			],
79
			'join_conds' => [ 'watchlist' => [
80
				'LEFT JOIN', [ 'wl_title = page_title',
81
					'wl_namespace = page_namespace' ] ] ]
82
		];
83
	}
84
85
	function sortDescending() {
86
		return false;
87
	}
88
89
	function getOrderFields() {
90
		return [ 'page_namespace', 'page_title' ];
91
	}
92
93
	/**
94
	 * Add the JS
95
	 * @param string|null $par
96
	 */
97
	public function execute( $par ) {
98
		parent::execute( $par );
99
		$this->getOutput()->addModules( 'mediawiki.special.unwatchedPages' );
100
	}
101
102
	/**
103
	 * @param Skin $skin
104
	 * @param object $result Result row
105
	 * @return string
106
	 */
107
	function formatResult( $skin, $result ) {
108
		global $wgContLang;
109
110
		$nt = Title::makeTitleSafe( $result->namespace, $result->title );
111
		if ( !$nt ) {
112
			return Html::element( 'span', [ 'class' => 'mw-invalidtitle' ],
113
				Linker::getInvalidTitleDescription( $this->getContext(), $result->namespace, $result->title ) );
114
		}
115
116
		$text = $wgContLang->convert( $nt->getPrefixedText() );
117
118
		$plink = Linker::linkKnown( $nt, htmlspecialchars( $text ) );
119
		$wlink = Linker::linkKnown(
120
			$nt,
121
			$this->msg( 'watch' )->escaped(),
122
			[ 'class' => 'mw-watch-link' ],
123
			[ 'action' => 'watch' ]
124
		);
125
126
		return $this->getLanguage()->specialList( $plink, $wlink );
127
	}
128
129
	protected function getGroupName() {
130
		return 'maintenance';
131
	}
132
}
133