PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.3
MailPoet – Newsletters, Email Marketing, and Automation v5.34.3
5.36.1 5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / symfony / translation / Util / XliffUtils.php
mailpoet / vendor-prefixed / symfony / translation / Util Last commit date
ArrayConverter.php 1 year ago XliffUtils.php 4 years ago index.php 3 years ago
XliffUtils.php
125 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Component\Translation\Util;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Symfony\Component\Translation\Exception\InvalidArgumentException;
5 use MailPoetVendor\Symfony\Component\Translation\Exception\InvalidResourceException;
6 class XliffUtils
7 {
8 public static function getVersionNumber(\DOMDocument $dom) : string
9 {
10 foreach ($dom->getElementsByTagName('xliff') as $xliff) {
11 $version = $xliff->attributes->getNamedItem('version');
12 if ($version) {
13 return $version->nodeValue;
14 }
15 $namespace = $xliff->attributes->getNamedItem('xmlns');
16 if ($namespace) {
17 if (0 !== \substr_compare('urn:oasis:names:tc:xliff:document:', $namespace->nodeValue, 0, 34)) {
18 throw new InvalidArgumentException(\sprintf('Not a valid XLIFF namespace "%s".', $namespace));
19 }
20 return \substr($namespace, 34);
21 }
22 }
23 // Falls back to v1.2
24 return '1.2';
25 }
26 public static function validateSchema(\DOMDocument $dom) : array
27 {
28 $xliffVersion = static::getVersionNumber($dom);
29 $internalErrors = \libxml_use_internal_errors(\true);
30 if ($shouldEnable = self::shouldEnableEntityLoader()) {
31 $disableEntities = \libxml_disable_entity_loader(\false);
32 }
33 try {
34 $isValid = @$dom->schemaValidateSource(self::getSchema($xliffVersion));
35 if (!$isValid) {
36 return self::getXmlErrors($internalErrors);
37 }
38 } finally {
39 if ($shouldEnable) {
40 \libxml_disable_entity_loader($disableEntities);
41 }
42 }
43 $dom->normalizeDocument();
44 \libxml_clear_errors();
45 \libxml_use_internal_errors($internalErrors);
46 return [];
47 }
48 private static function shouldEnableEntityLoader() : bool
49 {
50 // Version prior to 8.0 can be enabled without deprecation
51 if (\PHP_VERSION_ID < 80000) {
52 return \true;
53 }
54 static $dom, $schema;
55 if (null === $dom) {
56 $dom = new \DOMDocument();
57 $dom->loadXML('<?xml version="1.0"?><test/>');
58 $tmpfile = \tempnam(\sys_get_temp_dir(), 'symfony');
59 \register_shutdown_function(static function () use($tmpfile) {
60 @\unlink($tmpfile);
61 });
62 $schema = '<?xml version="1.0" encoding="utf-8"?>
63 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
64 <xsd:include schemaLocation="file:///' . \str_replace('\\', '/', $tmpfile) . '" />
65 </xsd:schema>';
66 \file_put_contents($tmpfile, '<?xml version="1.0" encoding="utf-8"?>
67 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
68 <xsd:element name="test" type="testType" />
69 <xsd:complexType name="testType"/>
70 </xsd:schema>');
71 }
72 return !@$dom->schemaValidateSource($schema);
73 }
74 public static function getErrorsAsString(array $xmlErrors) : string
75 {
76 $errorsAsString = '';
77 foreach ($xmlErrors as $error) {
78 $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']);
79 }
80 return $errorsAsString;
81 }
82 private static function getSchema(string $xliffVersion) : string
83 {
84 if ('1.2' === $xliffVersion) {
85 $schemaSource = \file_get_contents(__DIR__ . '/../Resources/schemas/xliff-core-1.2-strict.xsd');
86 $xmlUri = 'http://www.w3.org/2001/xml.xsd';
87 } elseif ('2.0' === $xliffVersion) {
88 $schemaSource = \file_get_contents(__DIR__ . '/../Resources/schemas/xliff-core-2.0.xsd');
89 $xmlUri = 'informativeCopiesOf3rdPartySchemas/w3c/xml.xsd';
90 } else {
91 throw new InvalidArgumentException(\sprintf('No support implemented for loading XLIFF version "%s".', $xliffVersion));
92 }
93 return self::fixXmlLocation($schemaSource, $xmlUri);
94 }
95 private static function fixXmlLocation(string $schemaSource, string $xmlUri) : string
96 {
97 $newPath = \str_replace('\\', '/', __DIR__) . '/../Resources/schemas/xml.xsd';
98 $parts = \explode('/', $newPath);
99 $locationstart = 'file:///';
100 if (0 === \stripos($newPath, 'phar://')) {
101 $tmpfile = \tempnam(\sys_get_temp_dir(), 'symfony');
102 if ($tmpfile) {
103 \copy($newPath, $tmpfile);
104 $parts = \explode('/', \str_replace('\\', '/', $tmpfile));
105 } else {
106 \array_shift($parts);
107 $locationstart = 'phar:///';
108 }
109 }
110 $drive = '\\' === \DIRECTORY_SEPARATOR ? \array_shift($parts) . '/' : '';
111 $newPath = $locationstart . $drive . \implode('/', \array_map('rawurlencode', $parts));
112 return \str_replace($xmlUri, $newPath, $schemaSource);
113 }
114 private static function getXmlErrors(bool $internalErrors) : array
115 {
116 $errors = [];
117 foreach (\libxml_get_errors() as $error) {
118 $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];
119 }
120 \libxml_clear_errors();
121 \libxml_use_internal_errors($internalErrors);
122 return $errors;
123 }
124 }
125