Completed
Pull Request — master (#50)
by mw
07:35 queued 17s
created

createTemplateInclusionCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 14
ccs 9
cts 9
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 9
nc 1
nop 3
crap 1
1
<?php
2
3
namespace SIL;
4
5
use Title;
6
use Language;
7
8
/**
9
 * @license GNU GPL v2+
10
 * @since 1.4
11
 *
12
 * @author mwjames
13
 */
14
class AnnotatedLanguageParserFunction {
15
16
	/**
17
	 * @var InterlanguageLinksLookup
18
	 */
19
	private $interlanguageLinksLookup;
20
21
	/**
22
	 * @since 1.0
23
	 *
24
	 * @param InterlanguageLinksLookup $interlanguageLinksLookup
25
	 */
26 4
	public function __construct( InterlanguageLinksLookup $interlanguageLinksLookup ) {
27 4
		$this->interlanguageLinksLookup = $interlanguageLinksLookup;
28 4
	}
29
30
	/**
31
	 * @since 1.0
32
	 *
33
	 * @param Title $source
34
	 * @param string $template
35
	 *
36
	 * @return string
37
	 */
38 3
	public function parse( Title $source, $template ) {
39
40 3
		$source = $this->interlanguageLinksLookup->getRedirectTargetFor( $source );
41
42 3
		if ( $source === null ) {
43
			return '';
44
		}
45
46 3
		$languageCode = $this->interlanguageLinksLookup->findPageLanguageForTarget( $source );
47
48 3
		if ( $languageCode === '' ) {
49 1
			return '';
50
		}
51
52 2
		if ( $template === '' ) {
53 1
			return $languageCode;
54
		}
55
56 1
		$templateText = $this->createTemplateInclusionCode(
57 1
			$source,
58 1
			$languageCode,
59
			$template
60 1
		);
61
62 1
		return array( $templateText, 'noparse' => $templateText === '', 'isHTML' => false );
63
	}
64
65 1
	private function createTemplateInclusionCode( $source, $languageCode, $template ) {
66
67 1
		$result = '';
68 1
		$templateText = '';
69 1
		$wikitext = '';
70
71 1
		$wikitext .= "|target-link=" . $this->modifyTargetLink( $source );
72 1
		$wikitext .= "|lang-code=" . wfBCP47( $languageCode );
73 1
		$wikitext .= "|lang-name=" . Language::fetchLanguageName( $languageCode );
74
75 1
		$templateText .= '{{' . $template . $wikitext . '}}';
76
77 1
		return $templateText;
78
	}
79
80 1
	private function modifyTargetLink( $targetLink ) {
81
82 1
		if ( !$targetLink instanceOf Title ) {
83
			$targetLink = Title::newFromText( $targetLink );
84
		}
85
86 1
		return ( $targetLink->getNamespace() === NS_CATEGORY ? ':' : '' ) . $targetLink->getPrefixedText();
87
	}
88
89
}
90