Completed
Branch master (8d5465)
by
unknown
31:25
created

CategoryPage::newFromID()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * Special handling for category description pages.
4
 * Modelled after ImagePage.php.
5
 *
6
 * This program is free software; you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation; either version 2 of the License, or
9
 * (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License along
17
 * with this program; if not, write to the Free Software Foundation, Inc.,
18
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
 * http://www.gnu.org/copyleft/gpl.html
20
 *
21
 * @file
22
 */
23
24
/**
25
 * Special handling for category description pages, showing pages,
26
 * subcategories and file that belong to the category
27
 */
28
class CategoryPage extends Article {
29
	# Subclasses can change this to override the viewer class.
30
	protected $mCategoryViewerClass = 'CategoryViewer';
31
32
	/**
33
	 * @var WikiCategoryPage
34
	 */
35
	protected $mPage;
36
37
	/**
38
	 * @param Title $title
39
	 * @return WikiCategoryPage
40
	 */
41
	protected function newPage( Title $title ) {
42
		// Overload mPage with a category-specific page
43
		return new WikiCategoryPage( $title );
44
	}
45
46
	function view() {
47
		$request = $this->getContext()->getRequest();
48
		$diff = $request->getVal( 'diff' );
49
		$diffOnly = $request->getBool( 'diffonly',
50
			$this->getContext()->getUser()->getOption( 'diffonly' ) );
51
52
		if ( $diff !== null && $diffOnly ) {
53
			parent::view();
54
			return;
55
		}
56
57
		if ( !Hooks::run( 'CategoryPageView', [ &$this ] ) ) {
58
			return;
59
		}
60
61
		$title = $this->getTitle();
62
		if ( $title->inNamespace( NS_CATEGORY ) ) {
63
			$this->openShowCategory();
64
		}
65
66
		parent::view();
67
68
		if ( $title->inNamespace( NS_CATEGORY ) ) {
69
			$this->closeShowCategory();
70
		}
71
	}
72
73
	function openShowCategory() {
74
		# For overloading
75
	}
76
77
	function closeShowCategory() {
78
		// Use these as defaults for back compat --catrope
79
		$request = $this->getContext()->getRequest();
80
		$oldFrom = $request->getVal( 'from' );
81
		$oldUntil = $request->getVal( 'until' );
82
83
		$reqArray = $request->getValues();
84
85
		$from = $until = [];
86
		foreach ( [ 'page', 'subcat', 'file' ] as $type ) {
87
			$from[$type] = $request->getVal( "{$type}from", $oldFrom );
88
			$until[$type] = $request->getVal( "{$type}until", $oldUntil );
89
90
			// Do not want old-style from/until propagating in nav links.
91 View Code Duplication
			if ( !isset( $reqArray["{$type}from"] ) && isset( $reqArray["from"] ) ) {
92
				$reqArray["{$type}from"] = $reqArray["from"];
93
			}
94 View Code Duplication
			if ( !isset( $reqArray["{$type}to"] ) && isset( $reqArray["to"] ) ) {
95
				$reqArray["{$type}to"] = $reqArray["to"];
96
			}
97
		}
98
99
		unset( $reqArray["from"] );
100
		unset( $reqArray["to"] );
101
102
		$viewer = new $this->mCategoryViewerClass(
103
			$this->getContext()->getTitle(),
104
			$this->getContext(),
105
			$from,
106
			$until,
107
			$reqArray
108
		);
109
		$out = $this->getContext()->getOutput();
110
		$out->addHTML( $viewer->getHTML() );
111
		$this->addHelpLink( 'Help:Categories' );
112
	}
113
}
114