‪TYPO3CMS  11.5
VariableCompiler.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 {
22  public const ‪FLAG_MERGE_OVERRIDE = 1;
23  public const ‪FLAG_MERGE_RECURSIVE = 2;
24 
25  private array ‪$items;
27  private ?int ‪$flags;
28  private array ‪$results;
29 
30  public static function ‪create(array ‪$items, ‪Variables ‪$variables, int ‪$flags = self::FLAG_MERGE_RECURSIVE): self
31  {
32  return new static(‪$items, ‪$variables, ‪$flags);
33  }
34 
35  public function ‪__construct(array ‪$items, ‪Variables ‪$variables, int ‪$flags = self::FLAG_MERGE_RECURSIVE)
36  {
37  $this->items = ‪$items;
38  $this->variables = ‪$variables;
39  $this->flags = ‪$flags;
40  }
41 
42  public function ‪compile(): self
43  {
44  $this->results = $this->‪compileKeys($this->items);
45  $this->results = $this->‪compileValues($this->results);
46  return $this;
47  }
48 
52  public function ‪getResults(): array
53  {
54  return ‪$this->results;
55  }
56 
57  private function ‪compileKeys(array $array): array
58  {
59  $result = [];
60  // applying VariableItems
61  foreach ($array as $index => $item) {
62  $result = $this->‪assignItems(
63  $result,
64  $item instanceof ‪VariableItem ? $item->‪apply($this->variables) : [$index => $item]
65  );
66  }
67  // traversing into nested array items (if any)
68  foreach ($result as $index => $item) {
69  if (is_array($item)) {
70  $result[$index] = $this->‪compileKeys($item);
71  }
72  }
73  return $result;
74  }
75 
76  private function ‪assignItems(array $array, array ‪$items): array
77  {
78  if ($this->flags & self::FLAG_MERGE_OVERRIDE) {
79  // keep possible numeric indexes
80  return $array + ‪$items;
81  }
82  return array_replace_recursive($array, ‪$items);
83  }
84 
85  private function ‪compileValues(array $array): array
86  {
87  foreach ($array as &$item) {
88  if (is_array($item)) {
89  $item = $this->‪compileValues($item);
90  } elseif ($item instanceof ‪Variable) {
91  $item = $item->apply($this->variables);
92  } elseif ($item instanceof ‪VariableValue) {
93  $item = $item->apply($this->variables);
94  }
95  }
96  return $array;
97  }
98 }
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variable
Definition: Variable.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\$flags
‪int $flags
Definition: VariableCompiler.php:27
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableItem\apply
‪apply(Variables $variables)
Definition: VariableItem.php:50
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variables
Definition: Variables.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\compile
‪compile()
Definition: VariableCompiler.php:42
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\compileValues
‪compileValues(array $array)
Definition: VariableCompiler.php:85
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\$items
‪array $items
Definition: VariableCompiler.php:25
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\compileKeys
‪compileKeys(array $array)
Definition: VariableCompiler.php:57
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\FLAG_MERGE_RECURSIVE
‪const FLAG_MERGE_RECURSIVE
Definition: VariableCompiler.php:23
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\create
‪static create(array $items, Variables $variables, int $flags=self::FLAG_MERGE_RECURSIVE)
Definition: VariableCompiler.php:30
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler
Definition: VariableCompiler.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\getResults
‪array getResults()
Definition: VariableCompiler.php:52
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\__construct
‪__construct(array $items, Variables $variables, int $flags=self::FLAG_MERGE_RECURSIVE)
Definition: VariableCompiler.php:35
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\$results
‪array $results
Definition: VariableCompiler.php:28
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder
Definition: Applicable.php:18
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableItem
Definition: VariableItem.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue
Definition: VariableValue.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\$variables
‪Variables $variables
Definition: VariableCompiler.php:26
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\FLAG_MERGE_OVERRIDE
‪const FLAG_MERGE_OVERRIDE
Definition: VariableCompiler.php:22
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableCompiler\assignItems
‪assignItems(array $array, array $items)
Definition: VariableCompiler.php:76