PageContentLanguageOnTheFlyModifier   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 2
dl 0
loc 76
rs 10
c 0
b 0
f 0
ccs 21
cts 21
cp 1

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A addToIntermediaryCache() 0 3 1
A getHashFrom() 0 3 1
A getPageContentLanguage() 0 27 5
1
<?php
2
3
namespace SIL;
4
5
use Onoi\Cache\Cache;
6
use SMW\Store;
7
use SMW\DIWikiPage;
8
use SMW\DIProperty;
9
10
use Title;
11
12
/**
13
 * Modifies the content language based on the SIL annotation found
14
 * for the selected page.
15
 *
16
 * @license GNU GPL v2+
17
 * @since 1.0
18
 *
19
 * @author mwjames
20
 */
21
class PageContentLanguageOnTheFlyModifier {
22
23
	const POOLCACHE_ID = 'sil.pagecontentlanguage';
24
25
	/**
26
	 * @var InterlanguageLinksLookup
27
	 */
28
	private $interlanguageLinksLookup;
29
30
	/**
31
	 * @var Cache
32
	 */
33
	private $intermediaryCache;
34
35
	/**
36
	 * @since 1.0
37
	 *
38
	 * @param InterlanguageLinksLookup $interlanguageLinksLookup
39
	 * @param Cache $intermediaryCache
40
	 */
41 8
	public function __construct( InterlanguageLinksLookup $interlanguageLinksLookup, Cache $intermediaryCache ) {
42 8
		$this->interlanguageLinksLookup = $interlanguageLinksLookup;
43 8
		$this->intermediaryCache = $intermediaryCache;
44 8
	}
45
46
	/**
47
	 * @since 1.3
48
	 *
49
	 * @param Title $title
50
	 * @param string &languageCode
51
	 */
52 3
	public function addToIntermediaryCache( Title $title, $languageCode ) {
53 3
		$this->intermediaryCache->save( $this->getHashFrom( $title ), $languageCode );
54 3
	}
55
56
	/**
57
	 * @since 1.0
58
	 *
59
	 * @param Title $title
60
	 * @param Language|string &$pageLanguage
61
	 *
62
	 * @return string
63
	 */
64 8
	public function getPageContentLanguage( Title $title, $pageLanguage ) {
65
66 8
		$hash = $this->getHashFrom( $title );
67
68
		// Convert language codes from BCP 47 to lowercase to ensure that codes
69
		// are matchable against `Language::fetchLanguageNames` for languages like
70
		// zh-Hans etc.
71 8
		if ( ( $cachedLanguageCode = $this->intermediaryCache->fetch( $hash ) ) ) {
72 3
			return strtolower( $cachedLanguageCode );
73
		}
74
75 7
		$lookupLanguageCode = $this->interlanguageLinksLookup->findPageLanguageForTarget( $title );
76
77 7
		if ( $lookupLanguageCode !== null && $lookupLanguageCode !== '' ) {
78 2
			$pageLanguage = $lookupLanguageCode;
79
		}
80
81 7
		if ( $pageLanguage instanceof \Language ) {
82 3
			$pageLanguage = $pageLanguage->getCode();
83
		}
84
85 7
		$pageLanguage = strtolower( $pageLanguage );
86
87 7
		$this->intermediaryCache->save( $hash, $pageLanguage );
88
89 7
		return $pageLanguage;
90
	}
91
92 9
	private function getHashFrom( Title $title ) {
93 9
		return md5( $title->getPrefixedText() );
94
	}
95
96
}
97