Completed
Push — ciFixes ( 191642...412eb6 )
by adam
07:41 queued 06:01
created

NamespaceGetter   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 96.67%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 16
c 1
b 0
f 0
lcom 1
cbo 3
dl 0
loc 76
ccs 29
cts 30
cp 0.9667
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getNamespaceByCanonicalName() 0 8 4
B getNamespaceByName() 0 9 5
A getNamespaces() 0 7 2
A createNamespaceFromQuery() 0 9 3
A getNamespaceResult() 0 8 1
1
<?php
2
3
namespace Mediawiki\Api\Service;
4
5
use Mediawiki\Api\MediawikiApi;
6
use Mediawiki\Api\SimpleRequest;
7
use Mediawiki\DataModel\NamespaceInfo;
8
9
/**
10
 * @access private
11
 *
12
 * @author gbirke
13
 */
14
class NamespaceGetter
15
{
16
	private $api;
17
18 4
	public function __construct( MediawikiApi $api ) {
19
20 4
		$this->api = $api;
21 4
	}
22
23
	/**
24
	 * @since 0.7
25
	 *
26
	 * @param string $canonicalName
27
	 * @return NamespaceInfo|null
28
	 */
29 2
	public function getNamespaceByCanonicalName( $canonicalName ) {
30 2
		foreach ( $this->getNamespaceResult()['query']['namespaces'] as $nsInfo ) {
31 2
			if ( !empty( $nsInfo['canonical'] ) && $nsInfo['canonical'] === $canonicalName ) {
32 2
				return $this->createNamespaceFromQuery( $nsInfo );
33
			}
34
		}
35 1
		return null;
36
	}
37
38
	/**
39
	 * @since 0.7
40
	 *
41
	 * @param string $name
42
	 * @return NamespaceInfo|null
43
	 */
44 1
	public function getNamespaceByName( $name ) {
45 1
		foreach ( $this->getNamespaceResult()['query']['namespaces'] as $nsInfo ) {
46 1
			if ( ( !empty( $nsInfo['canonical'] ) && $nsInfo['canonical'] === $name ) ||
47 1
				$nsInfo['*'] === $name ) {
48 1
				return $this->createNamespaceFromQuery( $nsInfo );
49
			}
50
		}
51
		return null;
52
	}
53
54
	/**
55
	 * @since 0.7
56
	 *
57
	 * @return NamespaceInfo[]
58
	 */
59 1
	public function getNamespaces() {
60 1
		$namespaces = [];
61 1
		foreach ( $this->getNamespaceResult()['query']['namespaces'] as $nsInfo ) {
62 1
			$namespaces[$nsInfo['id']] = $this->createNamespaceFromQuery( $nsInfo );
63
		}
64 1
		return $namespaces;
65
	}
66
67 3
	private function createNamespaceFromQuery( $nsInfo ) {
68 3
		return new NamespaceInfo(
69 3
			$nsInfo['id'],
70 3
			empty( $nsInfo['canonical'] ) ? '' : $nsInfo['canonical'],
71 3
			$nsInfo['*'],
72 3
			$nsInfo['case'],
73 3
			empty( $nsInfo['defaultcontentmodel'] ) ? null : $nsInfo['defaultcontentmodel']
74
		);
75
	}
76
77
	/**
78
	 * @return array
79
	 */
80 4
	private function getNamespaceResult() {
81 4
		return $this->api->getRequest( new SimpleRequest(
82 4
			'query', [
83 4
				'meta' => 'siteinfo',
84
				'siprop' => 'namespaces|namespacealiases'
85
			]
86
		) );
87
	}
88
89
}
90