PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.17
Independent Analytics – WordPress Analytics Plugin v1.17
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 3 years ago Template.php 3 years ago VarSpecifier.php 3 years ago VariableBag.php 3 years ago
Template.php
118 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 IAWP\League\Uri\UriTemplate;
13
14 use IAWP\League\Uri\Exceptions\SyntaxError;
15 use IAWP\League\Uri\Exceptions\TemplateCanNotBeExpanded;
16 use function array_merge;
17 use function array_unique;
18 use function gettype;
19 use function is_object;
20 use function is_string;
21 use function method_exists;
22 use function preg_match_all;
23 use function preg_replace;
24 use function sprintf;
25 use function strpos;
26 use const PREG_SET_ORDER;
27 final class Template
28 {
29 /**
30 * Expression regular expression pattern.
31 */
32 private const REGEXP_EXPRESSION_DETECTOR = '/\\{[^\\}]*\\}/x';
33 /**
34 * @var string
35 */
36 private $template;
37 /**
38 * @var array<string, Expression>
39 */
40 private $expressions = [];
41 /**
42 * @var array<string>
43 */
44 private $variableNames;
45 private function __construct(string $template, Expression ...$expressions)
46 {
47 $this->template = $template;
48 $variableNames = [];
49 foreach ($expressions as $expression) {
50 $this->expressions[$expression->toString()] = $expression;
51 $variableNames[] = $expression->variableNames();
52 }
53 $this->variableNames = array_unique(array_merge([], ...$variableNames));
54 }
55 /**
56 * {@inheritDoc}
57 */
58 public static function __set_state(array $properties) : self
59 {
60 return new self($properties['template'], ...\array_values($properties['expressions']));
61 }
62 /**
63 * @param object|string $template a string or an object with the __toString method
64 *
65 * @throws \TypeError if the template is not a string or an object with the __toString method
66 * @throws SyntaxError if the template contains invalid expressions
67 * @throws SyntaxError if the template contains invalid variable specification
68 */
69 public static function createFromString($template) : self
70 {
71 if (is_object($template) && method_exists($template, '__toString')) {
72 $template = (string) $template;
73 }
74 if (!is_string($template)) {
75 throw new \TypeError(sprintf('The template must be a string or a stringable object %s given.', gettype($template)));
76 }
77 /** @var string $remainder */
78 $remainder = preg_replace(self::REGEXP_EXPRESSION_DETECTOR, '', $template);
79 if (\false !== strpos($remainder, '{') || \false !== strpos($remainder, '}')) {
80 throw new SyntaxError('The template "' . $template . '" contains invalid expressions.');
81 }
82 $names = [];
83 preg_match_all(self::REGEXP_EXPRESSION_DETECTOR, $template, $findings, PREG_SET_ORDER);
84 $arguments = [];
85 foreach ($findings as $finding) {
86 if (!isset($names[$finding[0]])) {
87 $arguments[] = Expression::createFromString($finding[0]);
88 $names[$finding[0]] = 1;
89 }
90 }
91 return new self($template, ...$arguments);
92 }
93 public function toString() : string
94 {
95 return $this->template;
96 }
97 /**
98 * @return array<string>
99 */
100 public function variableNames() : array
101 {
102 return $this->variableNames;
103 }
104 /**
105 * @throws TemplateCanNotBeExpanded if the variables is an array and a ":" modifier needs to be applied
106 * @throws TemplateCanNotBeExpanded if the variables contains nested array values
107 */
108 public function expand(VariableBag $variables) : string
109 {
110 $uriString = $this->template;
111 /** @var Expression $expression */
112 foreach ($this->expressions as $pattern => $expression) {
113 $uriString = \str_replace($pattern, $expression->expand($variables), $uriString);
114 }
115 return $uriString;
116 }
117 }
118