1 | <?php |
||
2 | /** |
||
3 | * Copyright (c) 2017–2019 Ryan Parman <http://ryanparman.com>. |
||
4 | * Copyright (c) 2017–2019 Contributors. |
||
5 | * |
||
6 | * http://opensource.org/licenses/Apache2.0 |
||
7 | */ |
||
8 | |||
9 | declare(strict_types=1); |
||
10 | |||
11 | namespace SimplePie\Util; |
||
12 | |||
13 | use DOMDocument; |
||
14 | use Psr\Log\NullLogger; |
||
15 | use SimplePie\Mixin as Tr; |
||
16 | |||
17 | /** |
||
18 | * Provides tools for managing and working with XML namespaces. |
||
19 | */ |
||
20 | class Ns |
||
21 | { |
||
22 | use Tr\DomDocumentTrait; |
||
0 ignored issues
–
show
|
|||
23 | use Tr\LoggerTrait; |
||
0 ignored issues
–
show
The type
SimplePie\Mixin\LoggerTrait was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||
24 | |||
25 | /** |
||
26 | * A mapping of namespace URIs to preferred namespace aliases. |
||
27 | * |
||
28 | * @var array |
||
29 | */ |
||
30 | protected $mapping = []; |
||
31 | |||
32 | /** |
||
33 | * Constructs a new instance of this class. |
||
34 | * |
||
35 | * @param DOMDocument $dom A DOMDocument object representing the XML file to be parsed. |
||
36 | */ |
||
37 | 560 | public function __construct(DOMDocument $dom) |
|
38 | { |
||
39 | 560 | $this->logger = new NullLogger(); |
|
0 ignored issues
–
show
|
|||
40 | 560 | $this->domDocument = $dom; |
|
0 ignored issues
–
show
|
|||
41 | 560 | $this->mapping = []; |
|
42 | 560 | } |
|
43 | |||
44 | /** |
||
45 | * Adds new aliases to this list of aliases. Set an associative array where |
||
46 | * the key is the namespace URI and the namespace alias as the value. |
||
47 | * |
||
48 | * @param array $aliases An associative array of namespace URIs to namespace aliases. |
||
49 | * |
||
50 | * @return array The updated list of namespace aliases. |
||
51 | */ |
||
52 | 560 | public function addAliases(array $aliases): array |
|
53 | { |
||
54 | 560 | $this->mapping = \array_merge($this->mapping, $aliases); |
|
55 | 560 | $this->getLogger()->info('Added namespace URIs and namespace aliases.', $this->mapping); |
|
56 | |||
57 | 560 | return $this->mapping; |
|
58 | } |
||
59 | |||
60 | /** |
||
61 | * Gets the list of document-defined namespace aliases and namespace URIs. |
||
62 | */ |
||
63 | public function getDocNamespaces(): array |
||
64 | { |
||
65 | return \simplexml_import_dom($this->domDocument)->getDocNamespaces(true, true); |
||
66 | } |
||
67 | |||
68 | /** |
||
69 | * Gets the preferred namespace alias for a particular feed dialect. |
||
70 | * |
||
71 | * @param string|null $namespaceUri The namespace URI used inside the XML document. If the value is `null`, then |
||
72 | * the preferred namespace alias of the root namespace will be returned. The |
||
73 | * default value is `null`. |
||
74 | */ |
||
75 | 560 | public function getPreferredNamespaceAlias(?string $namespaceUri = null): string |
|
76 | { |
||
77 | 560 | $namespaceUri = $namespaceUri |
|
78 | ?? $this->domDocument->documentElement->namespaceURI |
||
79 | 560 | ?? ''; |
|
80 | |||
81 | // If the namespace URI has an exact match, use it. |
||
82 | 560 | if (isset($this->mapping[$namespaceUri])) { |
|
83 | 560 | return $this->mapping[$namespaceUri]; |
|
84 | } |
||
85 | |||
86 | // If not an exact match, attempt a regex match. |
||
87 | foreach ($this->mapping as $regex => $alias) { |
||
88 | // Regex delimiter must not be alphanumeric or backslash. Check this first. |
||
89 | // @phpcs:disable Generic.Files.LineLength.MaxExceeded |
||
90 | if (!empty($regex) && 0 === \preg_match('/[0-9a-z\\\\]/i', $regex[0]) && 0 !== \preg_match($regex, $namespaceUri)) { |
||
91 | // @phpcs:enable |
||
92 | return $alias; |
||
93 | } |
||
94 | } |
||
95 | |||
96 | return null; |
||
97 | } |
||
98 | } |
||
99 |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"]
, you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths