PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / trunk
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress vtrunk
4.17.2 4.17.1 4.17.0 4.16.19 4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / third-party / vendor / symfony / translation / Util / XliffUtils.php
wp-user-avatar / third-party / vendor / symfony / translation / Util Last commit date
ArrayConverter.php 2 months ago XliffUtils.php 2 months ago
XliffUtils.php
159 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace ProfilePressVendor\Symfony\Component\Translation\Util;
12
13 use ProfilePressVendor\Symfony\Component\Translation\Exception\InvalidArgumentException;
14 use ProfilePressVendor\Symfony\Component\Translation\Exception\InvalidResourceException;
15 /**
16 * Provides some utility methods for XLIFF translation files, such as validating
17 * their contents according to the XSD schema.
18 *
19 * @author Fabien Potencier <fabien@symfony.com>
20 */
21 class XliffUtils
22 {
23 /**
24 * Gets xliff file version based on the root "version" attribute.
25 *
26 * Defaults to 1.2 for backwards compatibility.
27 *
28 * @throws InvalidArgumentException
29 */
30 public static function getVersionNumber(\DOMDocument $dom): string
31 {
32 /** @var \DOMNode $xliff */
33 foreach ($dom->getElementsByTagName('xliff') as $xliff) {
34 $version = $xliff->attributes->getNamedItem('version');
35 if ($version) {
36 return $version->nodeValue;
37 }
38 $namespace = $xliff->attributes->getNamedItem('xmlns');
39 if ($namespace) {
40 if (0 !== substr_compare('urn:oasis:names:tc:xliff:document:', $namespace->nodeValue, 0, 34)) {
41 throw new InvalidArgumentException(sprintf('Not a valid XLIFF namespace "%s".', $namespace));
42 }
43 return substr($namespace, 34);
44 }
45 }
46 // Falls back to v1.2
47 return '1.2';
48 }
49 /**
50 * Validates and parses the given file into a DOMDocument.
51 *
52 * @throws InvalidResourceException
53 */
54 public static function validateSchema(\DOMDocument $dom): array
55 {
56 $xliffVersion = static::getVersionNumber($dom);
57 $internalErrors = libxml_use_internal_errors(\true);
58 if ($shouldEnable = self::shouldEnableEntityLoader()) {
59 $disableEntities = libxml_disable_entity_loader(\false);
60 }
61 try {
62 $isValid = @$dom->schemaValidateSource(self::getSchema($xliffVersion));
63 if (!$isValid) {
64 return self::getXmlErrors($internalErrors);
65 }
66 } finally {
67 if ($shouldEnable) {
68 libxml_disable_entity_loader($disableEntities);
69 }
70 }
71 $dom->normalizeDocument();
72 libxml_clear_errors();
73 libxml_use_internal_errors($internalErrors);
74 return [];
75 }
76 private static function shouldEnableEntityLoader(): bool
77 {
78 // Version prior to 8.0 can be enabled without deprecation
79 if (\PHP_VERSION_ID < 80000) {
80 return \true;
81 }
82 static $dom, $schema;
83 if (null === $dom) {
84 $dom = new \DOMDocument();
85 $dom->loadXML('<?xml version="1.0"?><test/>');
86 $tmpfile = tempnam(sys_get_temp_dir(), 'symfony');
87 register_shutdown_function(static function () use ($tmpfile) {
88 @unlink($tmpfile);
89 });
90 $schema = '<?xml version="1.0" encoding="utf-8"?>
91 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
92 <xsd:include schemaLocation="file:///' . str_replace('\\', '/', $tmpfile) . '" />
93 </xsd:schema>';
94 file_put_contents($tmpfile, '<?xml version="1.0" encoding="utf-8"?>
95 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
96 <xsd:element name="test" type="testType" />
97 <xsd:complexType name="testType"/>
98 </xsd:schema>');
99 }
100 return !@$dom->schemaValidateSource($schema);
101 }
102 public static function getErrorsAsString(array $xmlErrors): string
103 {
104 $errorsAsString = '';
105 foreach ($xmlErrors as $error) {
106 $errorsAsString .= sprintf("[%s %s] %s (in %s - line %d, column %d)\n", \LIBXML_ERR_WARNING === $error['level'] ? 'WARNING' : 'ERROR', $error['code'], $error['message'], $error['file'], $error['line'], $error['column']);
107 }
108 return $errorsAsString;
109 }
110 private static function getSchema(string $xliffVersion): string
111 {
112 if ('1.2' === $xliffVersion) {
113 $schemaSource = file_get_contents(__DIR__ . '/../Resources/schemas/xliff-core-1.2-strict.xsd');
114 $xmlUri = 'http://www.w3.org/2001/xml.xsd';
115 } elseif ('2.0' === $xliffVersion) {
116 $schemaSource = file_get_contents(__DIR__ . '/../Resources/schemas/xliff-core-2.0.xsd');
117 $xmlUri = 'informativeCopiesOf3rdPartySchemas/w3c/xml.xsd';
118 } else {
119 throw new InvalidArgumentException(sprintf('No support implemented for loading XLIFF version "%s".', $xliffVersion));
120 }
121 return self::fixXmlLocation($schemaSource, $xmlUri);
122 }
123 /**
124 * Internally changes the URI of a dependent xsd to be loaded locally.
125 */
126 private static function fixXmlLocation(string $schemaSource, string $xmlUri): string
127 {
128 $newPath = str_replace('\\', '/', __DIR__) . '/../Resources/schemas/xml.xsd';
129 $parts = explode('/', $newPath);
130 $locationstart = 'file:///';
131 if (0 === stripos($newPath, 'phar://')) {
132 $tmpfile = tempnam(sys_get_temp_dir(), 'symfony');
133 if ($tmpfile) {
134 copy($newPath, $tmpfile);
135 $parts = explode('/', str_replace('\\', '/', $tmpfile));
136 } else {
137 array_shift($parts);
138 $locationstart = 'phar:///';
139 }
140 }
141 $drive = '\\' === \DIRECTORY_SEPARATOR ? array_shift($parts) . '/' : '';
142 $newPath = $locationstart . $drive . implode('/', array_map('rawurlencode', $parts));
143 return str_replace($xmlUri, $newPath, $schemaSource);
144 }
145 /**
146 * Returns the XML errors of the internal XML parser.
147 */
148 private static function getXmlErrors(bool $internalErrors): array
149 {
150 $errors = [];
151 foreach (libxml_get_errors() as $error) {
152 $errors[] = ['level' => \LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR', 'code' => $error->code, 'message' => trim($error->message), 'file' => $error->file ?: 'n/a', 'line' => $error->line, 'column' => $error->column];
153 }
154 libxml_clear_errors();
155 libxml_use_internal_errors($internalErrors);
156 return $errors;
157 }
158 }
159