‪TYPO3CMS  ‪main
ModuleFactory.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 Psr\EventDispatcher\EventDispatcherInterface;
24 
29 {
30  public function ‪__construct(
31  protected readonly ‪IconRegistry $iconRegistry,
32  protected readonly EventDispatcherInterface $eventDispatcher,
33  ) {}
34 
35  public function ‪createModule(string ‪$identifier, array $configuration): ‪ModuleInterface
36  {
37  $configuration = $this->eventDispatcher->dispatch(
38  new ‪BeforeModuleCreationEvent(‪$identifier, $configuration)
39  )->getConfiguration();
40 
41  $configuration = $this->‪sanitizeConfiguration($identifier, $configuration);
42 
43  if (is_array($configuration['controllerActions'] ?? false)) {
45  }
46  return ‪Module::createFromConfiguration(‪$identifier, $configuration);
47  }
48 
49  private function ‪sanitizeConfiguration(string ‪$identifier, array $configuration): array
50  {
51  if (empty($configuration['path'])) {
52  $configuration['path'] = '/module/' . trim(str_replace('_', '/', ‪$identifier), '/');
53  }
54 
55  if ($configuration['icon'] ?? false) {
56  $iconPath = $configuration['icon'];
57  if (!‪PathUtility::isExtensionPath($iconPath)) {
58  $iconPath = GeneralUtility::getFileAbsFileName($iconPath);
59  }
60  if ($iconPath !== '') {
61  $iconIdentifier = 'module-' . ‪$identifier;
62  $iconProvider = $this->iconRegistry->detectIconProvider($iconPath);
63  $this->iconRegistry->registerIcon($iconIdentifier, $iconProvider, ['source' => $iconPath]);
64  $configuration['iconIdentifier'] = $iconIdentifier;
65  }
66  unset($configuration['icon']);
67  }
68  return $configuration;
69  }
70 
76  public function ‪adaptAliasMappingFromModuleConfiguration(array $moduleConfigurations): array
77  {
78  // collect ALL aliases
79  $availableAliases = [];
80  foreach ($moduleConfigurations as $moduleIdentifier => $moduleConfiguration) {
81  foreach ($moduleConfiguration['aliases'] ?? [] as $aliasIdentifier) {
82  $availableAliases[$aliasIdentifier] = $moduleIdentifier;
83  }
84  }
85  // rewrite references
86  $adaptedModuleConfiguration = [];
87  foreach ($moduleConfigurations as $moduleIdentifier => $moduleConfiguration) {
88  if (isset($moduleConfiguration['parent'], $availableAliases[$moduleConfiguration['parent']])) {
89  $moduleConfiguration['parent'] = $availableAliases[$moduleConfiguration['parent']];
90  }
91  if (isset($moduleConfiguration['position']['before'], $availableAliases[$moduleConfiguration['position']['before']])) {
92  $moduleConfiguration['position']['before'] = $availableAliases[$moduleConfiguration['position']['before']];
93  }
94  if (isset($moduleConfiguration['position']['after'], $availableAliases[$moduleConfiguration['position']['after']])) {
95  $moduleConfiguration['position']['after'] = $availableAliases[$moduleConfiguration['position']['after']];
96  }
97  $adaptedModuleConfiguration[$moduleIdentifier] = $moduleConfiguration;
98  }
99  return $adaptedModuleConfiguration;
100  }
101 }
‪TYPO3\CMS\Core\Utility\PathUtility\isExtensionPath
‪static isExtensionPath(string $path)
Definition: PathUtility.php:117
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:27
‪TYPO3\CMS\Backend\Module\Module\createFromConfiguration
‪static createFromConfiguration(string $identifier, array $configuration)
Definition: Module.php:69
‪TYPO3\CMS\Backend\Module\ModuleFactory
Definition: ModuleFactory.php:29
‪TYPO3\CMS\Backend\Module\ModuleFactory\__construct
‪__construct(protected readonly IconRegistry $iconRegistry, protected readonly EventDispatcherInterface $eventDispatcher,)
Definition: ModuleFactory.php:30
‪TYPO3\CMS\Core\Imaging\IconRegistry
Definition: IconRegistry.php:32
‪TYPO3\CMS\Backend\Module\ModuleInterface
Definition: ModuleInterface.php:24
‪TYPO3\CMS\Backend\Module\ModuleFactory\adaptAliasMappingFromModuleConfiguration
‪adaptAliasMappingFromModuleConfiguration(array $moduleConfigurations)
Definition: ModuleFactory.php:76
‪TYPO3\CMS\Backend\Module\BeforeModuleCreationEvent
Definition: BeforeModuleCreationEvent.php:24
‪TYPO3\CMS\Backend\Module\ExtbaseModule\createFromConfiguration
‪static createFromConfiguration(string $identifier, array $configuration)
Definition: ExtbaseModule.php:109
‪TYPO3\CMS\Backend\Module\ModuleFactory\sanitizeConfiguration
‪sanitizeConfiguration(string $identifier, array $configuration)
Definition: ModuleFactory.php:49
‪TYPO3\CMS\Backend\Module\ModuleFactory\createModule
‪createModule(string $identifier, array $configuration)
Definition: ModuleFactory.php:35
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Backend\Module
Definition: BaseModule.php:18
‪TYPO3\CMS\Webhooks\Message\$identifier
‪identifier readonly string $identifier
Definition: FileAddedMessage.php:37