‪TYPO3CMS  ‪main
BaseModule.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 
25 abstract class ‪BaseModule
26 {
27  protected string ‪$identifier;
28  protected string ‪$packageName = '';
29  protected string ‪$absolutePackagePath = '';
30  protected string ‪$path = '';
31  protected string ‪$iconIdentifier = '';
32  protected string ‪$title = '';
33  protected string ‪$description = '';
34  protected string ‪$shortDescription = '';
35  protected array ‪$position = [];
36  protected array ‪$appearance = [];
37  protected string ‪$access = '';
38  protected string ‪$workspaceAccess = '';
39  protected string ‪$parent = '';
42  protected array ‪$subModules = [];
43  protected bool ‪$standalone = false;
44  protected string ‪$component = '@typo3/backend/module/iframe';
45  protected string ‪$navigationComponent = '';
46  protected array ‪$defaultModuleData = [];
47  protected array ‪$aliases = [];
48  protected bool ‪$inheritNavigationComponent = true;
49  protected array ‪$routeOptions = [];
50 
51  final protected function ‪__construct(string ‪$identifier)
52  {
53  $this->identifier = ‪$identifier;
54  }
55 
56  public function ‪getIdentifier(): string
57  {
58  return ‪$this->identifier;
59  }
60 
61  public function ‪getPath(): string
62  {
63  return ‪$this->path;
64  }
65 
66  public function ‪getIconIdentifier(): string
67  {
69  }
70 
71  public function ‪getTitle(): string
72  {
73  return ‪$this->title;
74  }
75 
76  public function ‪getDescription(): string
77  {
78  return ‪$this->description;
79  }
80 
81  public function ‪getShortDescription(): string
82  {
84  }
85 
86  public function ‪isStandalone(): bool
87  {
88  return ‪$this->standalone;
89  }
90 
91  public function ‪getNavigationComponent(): string
92  {
93  if ($this->inheritNavigationComponent && $this->‪hasParentModule()) {
94  // Use parent navigation component if inheritance is enabled.
95  // Fallback if parent does not define a navigation component.
96  return $this->‪getParentModule()->getNavigationComponent() ?: ‪$this->navigationComponent;
97  }
99  }
100 
101  public function ‪getComponent(): string
102  {
103  return ‪$this->component;
104  }
105 
106  public function ‪getPosition(): array
107  {
108  return ‪$this->position;
109  }
110 
111  public function ‪getAccess(): string
112  {
113  return ‪$this->access;
114  }
115 
116  public function ‪getWorkspaceAccess(): string
117  {
119  }
120 
121  public function ‪getParentIdentifier(): string
122  {
123  return ‪$this->parent;
124  }
125 
126  public function ‪setParentModule(‪ModuleInterface $module): void
127  {
128  $this->parentModule = $module;
129  }
130 
132  {
133  return ‪$this->parentModule;
134  }
135 
136  public function ‪hasParentModule(): bool
137  {
138  return $this->parentModule !== null;
139  }
140 
141  public function ‪addSubModule(‪ModuleInterface $module): void
142  {
143  $this->‪subModules[$module->‪getIdentifier()] = $module;
144  }
145 
146  public function ‪hasSubModule(string ‪$identifier): bool
147  {
148  return isset($this->‪subModules[$identifier]);
149  }
150 
151  public function ‪hasSubModules(): bool
152  {
153  return $this->‪subModules !== [];
154  }
155 
156  public function ‪getSubModule(string $identifier): ?‪ModuleInterface
157  {
158  return $this->‪subModules[‪$identifier] ?? null;
159  }
160 
161  public function ‪removeSubModule(string $identifier): void
162  {
163  unset($this->‪subModules[$identifier]);
164  }
165 
169  public function getSubModules(): array
170  {
172  }
173 
174  public function ‪getAppearance(): array
175  {
176  return ‪$this->appearance;
177  }
178 
179  public function ‪getAliases(): array
180  {
181  return ‪$this->aliases;
182  }
183 
184  abstract public function ‪getDefaultRouteOptions(): array;
185 
186  public function ‪getDefaultModuleData(): array
187  {
189  }
190 
191  public static function ‪createFromConfiguration(string ‪$identifier, array $configuration): static
192  {
193  $obj = new static(‪$identifier);
194  $obj->packageName = (string)($configuration['packageName'] ?? '');
195  $obj->absolutePackagePath = (string)($configuration['absolutePackagePath'] ?? '');
196  $obj->path = '/' . ltrim((string)$configuration['path'], '/');
197  $obj->standalone = (bool)($configuration['standalone'] ?? false);
198 
199  if ($configuration['parent'] ?? false) {
200  $obj->parent = (string)$configuration['parent'];
201  }
202  if ($configuration['iconIdentifier'] ?? false) {
203  $obj->iconIdentifier = (string)$configuration['iconIdentifier'];
204  }
205  if ($configuration['access'] ?? false) {
206  $obj->access = (string)$configuration['access'];
207  }
208  if ($configuration['workspaces'] ?? false) {
209  $obj->workspaceAccess = (string)$configuration['workspaces'];
210  }
211  if ($configuration['component'] ?? false) {
212  $obj->component = (string)$configuration['component'];
213  }
214 
215  if (is_array($configuration['labels'] ?? null)) {
216  $obj->title = (string)($configuration['labels']['title'] ?? '');
217  $obj->description = (string)($configuration['labels']['description'] ?? '');
218  $obj->shortDescription = (string)($configuration['labels']['shortDescription'] ?? '');
219  } elseif (str_starts_with((string)($configuration['labels'] ?? ''), 'LLL:')) {
220  $labelsFile = $configuration['labels'];
221  $obj->title = $labelsFile . ':mlang_tabs_tab';
222  $obj->description = $labelsFile . ':mlang_labels_tabdescr';
223  $obj->shortDescription = $labelsFile . ':mlang_labels_tablabel';
224  }
225 
226  if (is_array($configuration['position'] ?? false)) {
227  if (in_array('top', $configuration['position'], true)) {
228  $configuration['position'] = [
229  'before' => '*',
230  ];
231  }
232  if (in_array('bottom', $configuration['position'], true)) {
233  $configuration['position'] = [
234  'after' => '*',
235  ];
236  }
237  $obj->position = $configuration['position'];
238  }
239  if (is_array($configuration['appearance'] ?? false)) {
240  $obj->appearance = $configuration['appearance'];
241  }
242  if (is_array($configuration['moduleData'] ?? false)) {
243  $obj->defaultModuleData = $configuration['moduleData'];
244  }
245  if (is_array($configuration['aliases'] ?? false)) {
246  $obj->aliases = $configuration['aliases'];
247  }
248 
249  if (isset($configuration['inheritNavigationComponentFromMainModule'])) {
250  $obj->inheritNavigationComponent = (bool)$configuration['inheritNavigationComponentFromMainModule'];
251  }
252 
253  if (isset($configuration['navigationComponent'])) {
254  $obj->navigationComponent = (string)$configuration['navigationComponent'];
255  } elseif (isset($configuration['navigationComponentId'])) {
256  $obj->navigationComponent = (string)$configuration['navigationComponentId'];
257  }
258  if (is_array($configuration['routeOptions'] ?? null)) {
259  $obj->routeOptions = $configuration['routeOptions'];
260  }
261 
262  return $obj;
263  }
264 }
‪TYPO3\CMS\Backend\Module\BaseModule\getIdentifier
‪getIdentifier()
Definition: BaseModule.php:56
‪TYPO3\CMS\Backend\Module\BaseModule\setParentModule
‪setParentModule(ModuleInterface $module)
Definition: BaseModule.php:126
‪TYPO3\CMS\Backend\Module\BaseModule\getDefaultRouteOptions
‪getDefaultRouteOptions()
‪TYPO3\CMS\Backend\Module\BaseModule\getAccess
‪getAccess()
Definition: BaseModule.php:111
‪TYPO3\CMS\Backend\Module\BaseModule\$navigationComponent
‪string $navigationComponent
Definition: BaseModule.php:45
‪TYPO3\CMS\Backend\Module\BaseModule\getPosition
‪getPosition()
Definition: BaseModule.php:106
‪TYPO3\CMS\Backend\Module\BaseModule\subModules
‪array< string, function getSubModules():array { return $this-> subModules
Definition: BaseModule.php:171
‪TYPO3\CMS\Backend\Module\BaseModule\getParentModule
‪getParentModule()
Definition: BaseModule.php:131
‪TYPO3\CMS\Backend\Module\BaseModule\$description
‪string $description
Definition: BaseModule.php:33
‪TYPO3\CMS\Backend\Module\BaseModule\$parent
‪string $parent
Definition: BaseModule.php:39
‪TYPO3\CMS\Backend\Module\BaseModule\removeSubModule
‪removeSubModule(string $identifier)
Definition: BaseModule.php:161
‪TYPO3\CMS\Backend\Module\BaseModule\$standalone
‪bool $standalone
Definition: BaseModule.php:43
‪TYPO3\CMS\Backend\Module\BaseModule\getNavigationComponent
‪getNavigationComponent()
Definition: BaseModule.php:91
‪TYPO3\CMS\Backend\Module\BaseModule\hasSubModules
‪hasSubModules()
Definition: BaseModule.php:151
‪TYPO3\CMS\Backend\Module\BaseModule
Definition: BaseModule.php:26
‪TYPO3\CMS\Backend\Module\BaseModule\$access
‪string $access
Definition: BaseModule.php:37
‪TYPO3\CMS\Backend\Module\BaseModule\getParentIdentifier
‪getParentIdentifier()
Definition: BaseModule.php:121
‪TYPO3\CMS\Backend\Module\BaseModule\$aliases
‪array $aliases
Definition: BaseModule.php:47
‪TYPO3\CMS\Backend\Module\BaseModule\isStandalone
‪isStandalone()
Definition: BaseModule.php:86
‪TYPO3\CMS\Backend\Module\BaseModule\hasParentModule
‪hasParentModule()
Definition: BaseModule.php:136
‪TYPO3\CMS\Backend\Module\BaseModule\$appearance
‪array $appearance
Definition: BaseModule.php:36
‪TYPO3\CMS\Backend\Module\BaseModule\$path
‪string $path
Definition: BaseModule.php:30
‪TYPO3\CMS\Backend\Module\ModuleInterface\getIdentifier
‪getIdentifier()
‪TYPO3\CMS\Backend\Module\BaseModule\$identifier
‪string $identifier
Definition: BaseModule.php:27
‪TYPO3\CMS\Backend\Module\BaseModule\$position
‪array $position
Definition: BaseModule.php:35
‪TYPO3\CMS\Backend\Module\BaseModule\__construct
‪__construct(string $identifier)
Definition: BaseModule.php:51
‪TYPO3\CMS\Backend\Module\BaseModule\addSubModule
‪addSubModule(ModuleInterface $module)
Definition: BaseModule.php:141
‪TYPO3\CMS\Backend\Module\BaseModule\getShortDescription
‪getShortDescription()
Definition: BaseModule.php:81
‪TYPO3\CMS\Backend\Module\BaseModule\getWorkspaceAccess
‪getWorkspaceAccess()
Definition: BaseModule.php:116
‪TYPO3\CMS\Backend\Module\BaseModule\getDefaultModuleData
‪getDefaultModuleData()
Definition: BaseModule.php:186
‪TYPO3\CMS\Backend\Module\BaseModule\$subModules
‪array $subModules
Definition: BaseModule.php:42
‪TYPO3\CMS\Backend\Module\BaseModule\getSubModule
‪getSubModule(string $identifier)
Definition: BaseModule.php:156
‪TYPO3\CMS\Backend\Module\BaseModule\hasSubModule
‪hasSubModule(string $identifier)
Definition: BaseModule.php:146
‪TYPO3\CMS\Backend\Module\ModuleInterface
Definition: ModuleInterface.php:24
‪TYPO3\CMS\Backend\Module\BaseModule\$title
‪string $title
Definition: BaseModule.php:32
‪TYPO3\CMS\Backend\Module\BaseModule\$packageName
‪string $packageName
Definition: BaseModule.php:28
‪TYPO3\CMS\Backend\Module\BaseModule\getPath
‪getPath()
Definition: BaseModule.php:61
‪TYPO3\CMS\Backend\Module\BaseModule\createFromConfiguration
‪static createFromConfiguration(string $identifier, array $configuration)
Definition: BaseModule.php:191
‪TYPO3\CMS\Backend\Module\BaseModule\$inheritNavigationComponent
‪bool $inheritNavigationComponent
Definition: BaseModule.php:48
‪TYPO3\CMS\Backend\Module\BaseModule\getIconIdentifier
‪getIconIdentifier()
Definition: BaseModule.php:66
‪TYPO3\CMS\Backend\Module\BaseModule\$component
‪string $component
Definition: BaseModule.php:44
‪TYPO3\CMS\Backend\Module\BaseModule\getComponent
‪getComponent()
Definition: BaseModule.php:101
‪TYPO3\CMS\Backend\Module\BaseModule\$iconIdentifier
‪string $iconIdentifier
Definition: BaseModule.php:31
‪TYPO3\CMS\Backend\Module\BaseModule\$routeOptions
‪array $routeOptions
Definition: BaseModule.php:49
‪TYPO3\CMS\Backend\Module\BaseModule\$parentModule
‪ModuleInterface $parentModule
Definition: BaseModule.php:40
‪TYPO3\CMS\Backend\Module\BaseModule\getAliases
‪getAliases()
Definition: BaseModule.php:179
‪TYPO3\CMS\Backend\Module\BaseModule\getTitle
‪getTitle()
Definition: BaseModule.php:71
‪TYPO3\CMS\Backend\Module\BaseModule\$defaultModuleData
‪array $defaultModuleData
Definition: BaseModule.php:46
‪TYPO3\CMS\Backend\Module\BaseModule\$workspaceAccess
‪string $workspaceAccess
Definition: BaseModule.php:38
‪TYPO3\CMS\Backend\Module\BaseModule\getDescription
‪getDescription()
Definition: BaseModule.php:76
‪TYPO3\CMS\Backend\Module\BaseModule\$shortDescription
‪string $shortDescription
Definition: BaseModule.php:34
‪TYPO3\CMS\Backend\Module\BaseModule\$absolutePackagePath
‪string $absolutePackagePath
Definition: BaseModule.php:29
‪TYPO3\CMS\Backend\Module
Definition: BaseModule.php:18
‪TYPO3\CMS\Backend\Module\BaseModule\getAppearance
‪getAppearance()
Definition: BaseModule.php:174