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

DisallowObjectParamsWithGeneratedName::check()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 6
cts 6
cp 1
rs 9.9
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 DisallowObjectParamsWithGeneratedName extends TemplateCheck
17
{
18
	/**
19
	* Check for <param> elements with a generated "name" attribute
20
	*
21
	* This check will reject <param> elements whose "name" attribute is generated by an
22
	* <xsl:attribute/> element. This is a setup that has no practical use and should be eliminated
23
	* because it makes it much harder to check the param's name, and therefore infer the type of
24
	* content it expects
25
	*
26
	* @param  DOMElement $template <xsl:template/> node
27
	* @param  Tag        $tag      Tag this template belongs to
28
	* @return void
29
	*/
30 2
	public function check(DOMElement $template, Tag $tag)
31
	{
32 2
		$xpath = new DOMXPath($template->ownerDocument);
33 2
		$query = '//object//param[contains(@name, "{") or .//xsl:attribute[translate(@name, "NAME", "name") = "name"]]';
34 2
		$nodes = $xpath->query($query);
35
36 2
		foreach ($nodes as $node)
37
		{
38 2
			throw new UnsafeTemplateException("A 'param' element with a suspect name has been found", $node);
39
		}
40
	}
41
}