Completed
Pull Request — master (#16)
by mw
02:37
created

PageDisplayOutputModifier   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 70
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 4
Bugs 0 Features 1
Metric Value
wmc 11
c 4
b 0
f 1
lcom 1
cbo 2
dl 0
loc 70
ccs 26
cts 26
cp 1
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setHideSubpageParentState() 0 3 1
A setSubpageByNamespace() 0 3 1
A modifyOutput() 0 13 4
A getPageTitle() 0 15 3
A hasSubpageEnabledNamespace() 0 3 2
1
<?php
2
3
namespace SBL;
4
5
use OutputPage;
6
use Title;
7
use SMW\DataValueFactory;
8
use SMW\DIWikiPage;
9
10
/**
11
 * @license GNU GPL v2+
12
 * @since 1.0
13
 *
14
 * @author mwjames
15
 */
16
class PageDisplayOutputModifier {
17
18
	/**
19
	 * @var boolean
20
	 */
21
	private $hideSubpageParentState;
22
23
	/**
24
	 * @var array
25
	 */
26
	private $subpageByNamespace;
27
28
	/**
29
	 * @since  1.0
30
	 *
31
	 * @param boolean $hideSubpageParentState
32
	 */
33 3
	public function setHideSubpageParentState( $hideSubpageParentState ) {
34 3
		$this->hideSubpageParentState = $hideSubpageParentState;
35 3
	}
36
37
	/**
38
	 * @since  1.0
39
	 *
40
	 * @param array $subpageByNamespace
41
	 */
42 3
	public function setSubpageByNamespace( array $subpageByNamespace ) {
43 3
		$this->subpageByNamespace = $subpageByNamespace;
44 3
	}
45
46
	/**
47
	 * @since  1.0
48
	 *
49
	 * @param OutputPage $outputPage
50
	 */
51 3
	public function modifyOutput( OutputPage $outputPage ) {
52
53 3
		$outputPage->addModuleStyles( 'ext.semanticbreadcrumblinks' );
54 3
		$outputPage->addModules( 'ext.semanticbreadcrumblinks' );
55
56 3
		if ( !$this->hideSubpageParentState || !$this->hasSubpageEnabledNamespace( $outputPage->getTitle()->getNamespace() ) ) {
57 2
			return;
58
		}
59
60 1
		if ( $outputPage->getTitle()->isSubpage() ) {
61 1
			$outputPage->setPageTitle( $this->getPageTitle( $outputPage->getTitle() ) );
62 1
		}
63 1
	}
64
65 1
	private function getPageTitle( Title $title ) {
66
67 1
		$displayTitle = '';
68
69 1
		$dataValue = DataValueFactory::getInstance()->newDataItemValue(
70 1
			DIWikiPage::newFromTitle( $title )
71 1
		);
72
73
		// 2.4+
74 1
		if ( method_exists( $dataValue , 'getDisplayTitle' ) ) {
75 1
			$displayTitle = $dataValue->getDisplayTitle();
76 1
		}
77
78 1
		return $displayTitle !== '' ? $displayTitle : $title->getSubpageText();
79
	}
80
81 2
	private function hasSubpageEnabledNamespace( $namespace ) {
82 2
		return isset( $this->subpageByNamespace[ $namespace ] ) && $this->subpageByNamespace[ $namespace ];
83
	}
84
85
}
86