‪TYPO3CMS  ‪main
VariableValue.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
21 {
23 
24  private string ‪$value;
25 
29  private array ‪$variableNames;
30 
32 
37 
38  public static function ‪create(string ‪$value, ‪Variables ‪$defaultVariables = null): self
39  {
40  return new static(‪$value, ‪$defaultVariables);
41  }
42 
43  private function ‪__construct(string ‪$value, ‪Variables ‪$defaultVariables = null)
44  {
46  if (count(‪$variableNames) === 0) {
47  throw new \LogicException(
48  sprintf(
49  'Payload did not contain any variables "%s"',
50  ‪$value
51  ),
52  1577789315
53  );
54  }
55 
56  $this->value = ‪$value;
57  $this->variableNames = ‪$variableNames;
58  $this->defaultVariables = ‪$defaultVariables;
59  }
60 
61  public function ‪apply(‪Variables $variables): string
62  {
63  $variables = $variables->‪withDefined($this->defaultVariables);
64 
65  $this->‪assertVariableNames($variables);
66  if (!$this->‪hasAllRequiredDefinedVariableNames($variables)) {
67  return '';
68  }
69 
70  return str_replace(
71  array_map([$this, 'wrap'], $variables->‪keys()),
72  $variables->‪values(),
73  $this->value
74  );
75  }
76 
77  private function ‪assertVariableNames(‪Variables $variables): void
78  {
79  $missingVariableNames = array_diff($this->variableNames, $variables->‪keys());
80  if (!empty($missingVariableNames)) {
81  throw new \LogicException(
82  sprintf(
83  'Missing variable names "%s" for "%s"',
84  implode(',', $missingVariableNames),
85  $this->value
86  ),
87  1577789316
88  );
89  }
90  }
91 
92  private function ‪extractVariableNames(string ‪$value): array
93  {
94  if (!preg_match_all('#\[\[(?P<variableName>[^\[\]]+)\]\]#', ‪$value, $matches)) {
95  return [];
96  }
97  return array_unique($matches['variableName']);
98  }
99 
100  private function ‪wrap(string $item): string
101  {
102  return '[[' . $item . ']]';
103  }
104 }
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variables\withDefined
‪withDefined(?Variables $other)
Definition: Variables.php:55
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variables
Definition: Variables.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\$requiredDefinedVariableNames
‪array $requiredDefinedVariableNames
Definition: VariableValue.php:35
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variables\values
‪values()
Definition: Variables.php:32
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariablesTrait
Definition: VariablesTrait.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\wrap
‪wrap(string $item)
Definition: VariableValue.php:99
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\create
‪static create(string $value, Variables $defaultVariables=null)
Definition: VariableValue.php:37
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\$variableNames
‪array $variableNames
Definition: VariableValue.php:28
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variables\keys
‪keys()
Definition: Variables.php:27
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\$defaultVariables
‪Variables $defaultVariables
Definition: VariableValue.php:30
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\$value
‪string $value
Definition: VariableValue.php:23
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\__construct
‪__construct(string $value, Variables $defaultVariables=null)
Definition: VariableValue.php:42
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\apply
‪apply(Variables $variables)
Definition: VariableValue.php:60
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\assertVariableNames
‪assertVariableNames(Variables $variables)
Definition: VariableValue.php:76
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder
Definition: Applicable.php:18
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\extractVariableNames
‪extractVariableNames(string $value)
Definition: VariableValue.php:91
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue
Definition: VariableValue.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariablesTrait\hasAllRequiredDefinedVariableNames
‪hasAllRequiredDefinedVariableNames(Variables $variables)
Definition: VariablesTrait.php:29