Completed
Push — master ( d0ca26...98fb90 )
by mw
37:57
created

LanguageFallbackFinder::getFallbackLanguageBy()   C

Complexity

Conditions 8
Paths 10

Size

Total Lines 37
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 19
nc 10
nop 1
dl 0
loc 37
rs 5.3846
c 0
b 0
f 0
1
<?php
2
3
namespace SMW\ExtraneousLanguage;
4
5
use RuntimeException;
6
7
/**
8
 * @license GNU GPL v2+
9
 * @since 2.5
10
 *
11
 * @author mwjames
12
 */
13
class LanguageFallbackFinder {
14
15
	/**
16
	 * @var languageFileContentsReader
17
	 */
18
	private $languageFileContentsReader;
19
20
	/**
21
	 * @var string
22
	 */
23
	private $canonicalFallbackLanguageCode = 'en';
24
25
	/**
26
	 * @var array
27
	 */
28
	private $fallbackLanguages = array();
29
30
	/**
31
	 * @since 2.5
32
	 *
33
	 * @param languageFileContentsReader $languageFileContentsReader
34
	 */
35
	public function __construct( LanguageFileContentsReader $languageFileContentsReader ) {
36
		$this->languageFileContentsReader = $languageFileContentsReader;
37
	}
38
39
	/**
40
	 * @since 2.5
41
	 */
42
	public function emptyByLanguageCode( $languageCode ) {
43
		unset( $this->fallbackLanguages[strtolower( trim( $languageCode ) )] );
44
	}
45
46
	/**
47
	 * @since 2.5
48
	 *
49
	 * @return string
50
	 */
51
	public function getCanonicalFallbackLanguageCode() {
52
		return $this->canonicalFallbackLanguageCode;
53
	}
54
55
	/**
56
	 * @since 2.5
57
	 *
58
	 * @param string $languageCode
59
	 *
60
	 * @return string
61
	 */
62
	public function getFallbackLanguageBy( $languageCode = '' ) {
63
64
		$languageCode = strtolower( trim( $languageCode ) );
65
66
		if ( isset( $this->fallbackLanguages[$languageCode] ) ) {
67
			return $this->fallbackLanguages[$languageCode];
68
		}
69
70
		$index = 'fallbackLanguage';
71
72
		// Unknown, use the default
73
		if ( $languageCode === '' ) {
74
			return $this->canonicalFallbackLanguageCode;
75
		}
76
77
		try {
78
			$contents = $this->languageFileContentsReader->readByLanguageCode( $languageCode );
79
		} catch ( RuntimeException $e ) {
80
			$this->fallbackLanguages[$languageCode] = $this->canonicalFallbackLanguageCode;
81
		}
82
83
		// Get customized fallbackLanguage
84
		if ( isset( $contents[$index] ) ) {
85
			$this->fallbackLanguages[$languageCode] = $contents[$index];
86
		}
87
88
		// The ultimate defense line, fallback was not set, or is false or empty
89
		// which means use the canonicalFallbackLanguageCode
90
		if (
91
			!isset( $contents[$index] ) ||
92
			$this->fallbackLanguages[$languageCode] === false ||
93
			$this->fallbackLanguages[$languageCode] === '' ) {
94
			$this->fallbackLanguages[$languageCode] = $this->canonicalFallbackLanguageCode;
95
		}
96
97
		return $this->fallbackLanguages[$languageCode];
98
	}
99
100
}
101