‪TYPO3CMS  ‪main
YamlSetDefinitionProvider.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 
20 use Symfony\Component\DependencyInjection\Attribute\Autoconfigure;
21 use Symfony\Component\Yaml\Exception\ParseException;
22 use Symfony\Component\Yaml\Yaml;
24 
28 #[Autoconfigure(public: true)]
30 {
32  protected array ‪$sets = [];
33 
37  public function getSetDefinitions(): array
38  {
40  }
41 
42  public function ‪addSet(‪SetDefinition $set): void
43  {
44  $this->‪sets[$set->name] = $set;
45  }
46 
47  public function get(\SplFileInfo $fileInfo): ‪SetDefinition
48  {
49  $filename = $fileInfo->getPathname();
50  // No placeholders or imports processed on purpose
51  // Use dependencies for shared sets
52  try {
53  $set = Yaml::parseFile($filename);
54  } catch (ParseException $e) {
55  throw new ‪InvalidSetException('Invalid set definition. Filename: ' . $filename, 1711024370, $e);
56  }
57  $path = dirname($filename);
58 
59  $settingsDefinitionsFile = $path . '/settings.definitions.yaml';
60  if (is_file($settingsDefinitionsFile)) {
61  try {
62  $settingsDefinitions = Yaml::parseFile($settingsDefinitionsFile);
63  } catch (ParseException $e) {
64  throw new ‪InvalidSetException('Invalid settings definition. Filename: ' . $settingsDefinitionsFile, 1711024374, $e);
65  }
66  $version = (int)($settingsDefinitions['version'] ?? 0);
67  if (!is_array($settingsDefinitions['settings'] ?? null)) {
68  throw new \RuntimeException('Missing "settings" key in settings definitions. Filename: ' . $settingsDefinitionsFile, 1711024378);
69  }
70  $set['settingsDefinitions'] = $settingsDefinitions['settings'];
71  }
72 
73  $settingsFile = $path . '/settings.yaml';
74  if (is_file($settingsFile)) {
75  try {
76  $settings = Yaml::parseFile($settingsFile);
77  } catch (ParseException $e) {
78  throw new ‪InvalidSetException('Invalid settings format. Filename: ' . $settingsFile, 1711024380, $e);
79  }
80  if (!is_array($settings)) {
81  throw new \RuntimeException('Invalid settings format. Filename: ' . $settingsFile, 1711024382);
82  }
83  $set['settings'] = $settings;
84  }
85 
86  return $this->‪createDefinition($set, $path);
87  }
88 
89  protected function ‪createDefinition(array $set, string $basePath): ‪SetDefinition
90  {
91  try {
92  $settingsDefinitions = [];
93  foreach (($set['settingsDefinitions'] ?? []) as $setting => $options) {
94  try {
95  $definition = new ‪SettingDefinition(...[...['key' => $setting], ...$options]);
96  } catch (\Error $e) {
97  throw new \Exception('Invalid setting definition: ' . json_encode($options), 1702623312, $e);
98  }
99  $settingsDefinitions[] = $definition;
100  }
101  $setData = [
102  ...$set,
103  'settingsDefinitions' => $settingsDefinitions,
104  ];
105  $setData['typoscript'] ??= $basePath;
106  $setData['pagets'] ??= $basePath . '/page.tsconfig';
107  return new ‪SetDefinition(...$setData);
108  } catch (\Error $e) {
109  throw new \Exception('Invalid set definition: ' . json_encode($set), 1170859526, $e);
110  }
111  }
112 }
‪TYPO3\CMS\Core\Site\Set\YamlSetDefinitionProvider\addSet
‪addSet(SetDefinition $set)
Definition: YamlSetDefinitionProvider.php:42
‪TYPO3\CMS\Core\Site\Set
Definition: InvalidSetException.php:18
‪TYPO3\CMS\Core\Site\Set\YamlSetDefinitionProvider\createDefinition
‪createDefinition(array $set, string $basePath)
Definition: YamlSetDefinitionProvider.php:89
‪TYPO3\CMS\Core\Site\Set\YamlSetDefinitionProvider\$sets
‪array $sets
Definition: YamlSetDefinitionProvider.php:32
‪TYPO3\CMS\Core\Site\Set\InvalidSetException
Definition: InvalidSetException.php:20
‪TYPO3\CMS\Core\Site\Set\YamlSetDefinitionProvider\sets
‪array< string, function getSetDefinitions():array { return $this-> sets
Definition: YamlSetDefinitionProvider.php:39
‪TYPO3\CMS\Core\Settings\SettingDefinition
Definition: SettingDefinition.php:24
‪TYPO3\CMS\Core\Site\Set\YamlSetDefinitionProvider
Definition: YamlSetDefinitionProvider.php:30
‪TYPO3\CMS\Core\Site\Set\SetDefinition
Definition: SetDefinition.php:23