1 | <?php |
||
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 ) { |
|
45 | |||
46 | /** |
||
47 | * @since 1.3 |
||
48 | * |
||
49 | * @param Title $title |
||
50 | * @param string &languageCode |
||
51 | */ |
||
52 | 3 | public function addToIntermediaryCache( Title $title, $languageCode ) { |
|
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 ) { |
|
95 | |||
96 | } |
||
97 |