Completed
Push — master ( e70e95...72eb9f )
by Josh
04:30
created

DisallowElement::check()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 14
ccs 8
cts 8
cp 1
rs 9.7998
c 0
b 0
f 0
cc 2
nc 2
nop 2
crap 2
1
<?php
2
3
/**
4
* @package   s9e\TextFormatter
5
* @copyright Copyright (c) 2010-2019 The s9e Authors
6
* @license   http://www.opensource.org/licenses/mit-license.php The MIT License
7
*/
8
namespace s9e\TextFormatter\Configurator\TemplateChecks;
9
10
use DOMElement;
11
use DOMXPath;
12
use s9e\TextFormatter\Configurator\Exceptions\UnsafeTemplateException;
13
use s9e\TextFormatter\Configurator\Items\Tag;
14
use s9e\TextFormatter\Configurator\TemplateCheck;
15
16
class DisallowElement extends TemplateCheck
17
{
18
	/**
19
	* @var string Local name of the disallowed element
20
	*/
21
	public $elName;
22
23
	/**
24
	* Constructor
25
	*
26
	* @param  string $elName Local name of the disallowed element
27
	*/
28 4
	public function __construct($elName)
29
	{
30
		// NOTE: the default template normalization rules force elements' names to be lowercase
31 4
		$this->elName = strtolower($elName);
32
	}
33
34
	/**
35
	* Test for the presence of an element of given name
36
	*
37
	* @param  DOMElement $template <xsl:template/> node
38
	* @param  Tag        $tag      Tag this template belongs to
39
	* @return void
40
	*/
41 4
	public function check(DOMElement $template, Tag $tag)
42
	{
43 4
		$xpath = new DOMXPath($template->ownerDocument);
44
		$query
45 4
			= '//*[translate(local-name(), "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz") = "' . $this->elName . '"]'
46 4
			. '|'
47 4
			. '//xsl:element[translate(@name,"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz") = "' . $this->elName . '"]';
48
49 4
		$node = $xpath->query($query)->item(0);
50 4
		if ($node)
51
		{
52 4
			throw new UnsafeTemplateException("Element '" . $this->elName . "' is disallowed", $node);
53
		}
54
	}
55
}