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