PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.5
Independent Analytics – WordPress Analytics Plugin v2.15.5
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / league / uri / src / UriTemplate / Template.php
independent-analytics / vendor / league / uri / src / UriTemplate Last commit date
Expression.php 1 month ago Template.php 1 month ago VarSpecifier.php 1 month ago VariableBag.php 1 month ago
Template.php
113 lines
1 <?php
2
3 /**
4 * League.Uri (https://uri.thephpleague.com)
5 *
6 * (c) Ignace Nyamagana Butera <nyamsprod@gmail.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 declare (strict_types=1);
12 namespace IAWPSCOPED\League\Uri\UriTemplate;
13
14 use IAWPSCOPED\League\Uri\Exceptions\SyntaxError;
15 use IAWPSCOPED\League\Uri\Exceptions\TemplateCanNotBeExpanded;
16 use TypeError;
17 use function array_merge;
18 use function array_unique;
19 use function gettype;
20 use function is_object;
21 use function is_string;
22 use function method_exists;
23 use function preg_match_all;
24 use function preg_replace;
25 use function sprintf;
26 use function strpos;
27 use const PREG_SET_ORDER;
28 /** @internal */
29 final class Template
30 {
31 /**
32 * Expression regular expression pattern.
33 */
34 private const REGEXP_EXPRESSION_DETECTOR = '/\\{[^\\}]*\\}/x';
35 private string $template;
36 /** @var array<string, Expression> */
37 private array $expressions = [];
38 /** @var array<string> */
39 private array $variableNames;
40 private function __construct(string $template, Expression ...$expressions)
41 {
42 $this->template = $template;
43 $variableNames = [];
44 foreach ($expressions as $expression) {
45 $this->expressions[$expression->toString()] = $expression;
46 $variableNames[] = $expression->variableNames();
47 }
48 $this->variableNames = array_unique(array_merge([], ...$variableNames));
49 }
50 /**
51 * {@inheritDoc}
52 */
53 public static function __set_state(array $properties) : self
54 {
55 return new self($properties['template'], ...\array_values($properties['expressions']));
56 }
57 /**
58 * @param object|string $template a string or an object with the __toString method
59 *
60 * @throws TypeError if the template is not a string or an object with the __toString method
61 * @throws SyntaxError if the template contains invalid expressions
62 * @throws SyntaxError if the template contains invalid variable specification
63 */
64 public static function createFromString($template) : self
65 {
66 if (is_object($template) && method_exists($template, '__toString')) {
67 $template = (string) $template;
68 }
69 if (!is_string($template)) {
70 throw new TypeError(sprintf('The template must be a string or a stringable object %s given.', gettype($template)));
71 }
72 /** @var string $remainder */
73 $remainder = preg_replace(self::REGEXP_EXPRESSION_DETECTOR, '', $template);
74 if (\false !== strpos($remainder, '{') || \false !== strpos($remainder, '}')) {
75 throw new SyntaxError('The template "' . $template . '" contains invalid expressions.');
76 }
77 $names = [];
78 preg_match_all(self::REGEXP_EXPRESSION_DETECTOR, $template, $findings, PREG_SET_ORDER);
79 $arguments = [];
80 foreach ($findings as $finding) {
81 if (!isset($names[$finding[0]])) {
82 $arguments[] = Expression::createFromString($finding[0]);
83 $names[$finding[0]] = 1;
84 }
85 }
86 return new self($template, ...$arguments);
87 }
88 public function toString() : string
89 {
90 return $this->template;
91 }
92 /**
93 * @return array<string>
94 */
95 public function variableNames() : array
96 {
97 return $this->variableNames;
98 }
99 /**
100 * @throws TemplateCanNotBeExpanded if the variables is an array and a ":" modifier needs to be applied
101 * @throws TemplateCanNotBeExpanded if the variables contains nested array values
102 */
103 public function expand(VariableBag $variables) : string
104 {
105 $uriString = $this->template;
106 /** @var Expression $expression */
107 foreach ($this->expressions as $pattern => $expression) {
108 $uriString = \str_replace($pattern, $expression->expand($variables), $uriString);
109 }
110 return $uriString;
111 }
112 }
113