2 namespace TYPO3\CMS\Backend\Domain\Repository\Module;
54 if (empty($excludeGroupNames)) {
55 return $this->moduleStorage->getEntries();
58 $modules = new \SplObjectStorage();
59 foreach ($this->moduleStorage->getEntries() as $moduleGroup) {
60 if (!in_array($moduleGroup->getName(), $excludeGroupNames,
true)) {
61 if ($moduleGroup->getChildren()->count() > 0) {
62 $modules->attach($moduleGroup);
76 foreach ($this->moduleStorage->getEntries() as $moduleGroup) {
77 if ($moduleGroup->getName() === $groupName) {
93 $entries = $this->moduleStorage->getEntries();
107 foreach ($entries as $entry) {
108 if ($entry->getName() === $name) {
111 $children = $entry->getChildren();
112 if (!empty($children)) {
114 if ($childRecord !==
false) {
130 foreach ($rawModuleData as $module) {
131 $entry = $this->createEntryFromRawData($module);
132 if (isset($module[
'subitems']) && !empty($module[
'subitems'])) {
133 foreach ($module[
'subitems'] as $subitem) {
134 $subEntry = $this->createEntryFromRawData($subitem);
135 $entry->addChild($subEntry);
138 $this->moduleStorage->attachEntry($entry);
148 protected function createEntryFromRawData(array $module)
151 $entry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Domain\Model\Module\BackendModule::class);
152 if (!empty($module[
'name']) && is_string($module[
'name'])) {
153 $entry->setName($module[
'name']);
155 if (!empty($module[
'title']) && is_string($module[
'title'])) {
158 if (!empty($module[
'onclick']) && is_string($module[
'onclick'])) {
159 $entry->setOnClick($module[
'onclick']);
161 if (!empty($module[
'link']) && is_string($module[
'link'])) {
162 $entry->setLink($module[
'link']);
163 }
elseif (empty($module[
'link']) && !empty($module[
'path']) && is_string($module[
'path'])) {
164 $entry->setLink($module[
'path']);
166 if (!empty($module[
'description']) && is_string($module[
'description'])) {
167 $entry->setDescription($module[
'description']);
169 if (!empty($module[
'icon'])) {
170 $entry->setIcon($module[
'icon']);
172 if (!empty($module[
'navigationComponentId']) && is_string($module[
'navigationComponentId'])) {
173 $entry->setNavigationComponentId($module[
'navigationComponentId']);
175 if (!empty($module[
'navigationFrameScript']) && is_string($module[
'navigationFrameScript'])) {
176 $entry->setNavigationFrameScript($module[
'navigationFrameScript']);
177 }
elseif (!empty($module[
'parentNavigationFrameScript']) && is_string($module[
'parentNavigationFrameScript'])) {
178 $entry->setNavigationFrameScript($module[
'parentNavigationFrameScript']);
180 if (!empty($module[
'navigationFrameScriptParam']) && is_string($module[
'navigationFrameScriptParam'])) {
181 $entry->setNavigationFrameScriptParameters($module[
'navigationFrameScriptParam']);
194 foreach (
$GLOBALS[
'TBE_MODULES_EXT'] as $mainModule => $tbeModuleExt) {
195 list($main) = explode(
'_', $mainModule);
197 if ($mainEntry ===
false) {
201 $subEntries = $mainEntry->getChildren();
202 if (empty($subEntries)) {
206 if ($matchingSubEntry !==
false) {
207 if (isset($tbeModuleExt[
'MOD_MENU']) && isset($tbeModuleExt[
'MOD_MENU'][
'function'])) {
208 foreach ($tbeModuleExt[
'MOD_MENU'][
'function'] as $subModule) {
209 $entry = $this->createEntryFromRawData($subModule);
210 $matchingSubEntry->addChild($entry);
237 $moduleLoader->observeWorkspaces =
true;
238 $moduleLoader->load(
$GLOBALS[
'TBE_MODULES']);
239 $loadedModules = $moduleLoader->modules;
245 $dummyScript = BackendUtility::getModuleUrl(
'dummy');
246 foreach ($loadedModules as $moduleName => $moduleData) {
248 if (!is_array($moduleData[
'sub'])) {
249 $moduleLink = $moduleData[
'script'];
252 $moduleKey =
'modmenu_' . $moduleName;
253 $modules[$moduleKey] = array(
254 'name' => $moduleName,
255 'title' =>
$GLOBALS[
'LANG']->moduleLabels[
'tabs'][$moduleName .
'_tab'],
257 'icon' => $this->
getModuleIcon($moduleName .
'_tab', $moduleData),
258 'link' => $moduleLink,
259 'description' =>
$GLOBALS[
'LANG']->moduleLabels[
'labels'][$moduleKey .
'label']
261 if (!is_array($moduleData[
'sub']) && $moduleData[
'script'] !== $dummyScript) {
263 $modules[$moduleKey][
'subitems'][$moduleKey] = array(
264 'name' => $moduleName,
265 'title' =>
$GLOBALS[
'LANG']->moduleLabels[
'tabs'][$moduleName .
'_tab'],
267 'icon' => $this->
getModuleIcon($moduleName .
'_tab', $moduleData),
268 'link' => $moduleLink,
269 'originalLink' => $moduleLink,
270 'description' =>
$GLOBALS[
'LANG']->moduleLabels[
'labels'][$moduleKey .
'label'],
271 'navigationFrameScript' => null,
272 'navigationFrameScriptParam' => null,
273 'navigationComponentId' => null
275 }
elseif (is_array($moduleData[
'sub'])) {
276 foreach ($moduleData[
'sub'] as $submoduleName => $submoduleData) {
277 if (isset($submoduleData[
'script'])) {
280 $submoduleLink = BackendUtility::getModuleUrl($submoduleData[
'name']);
282 $submoduleKey = $moduleName .
'_' . $submoduleName .
'_tab';
283 $submoduleDescription =
$GLOBALS[
'LANG']->moduleLabels[
'labels'][$submoduleKey .
'label'];
284 $originalLink = $submoduleLink;
285 $navigationFrameScript = $submoduleData[
'navFrameScript'];
286 $modules[$moduleKey][
'subitems'][$submoduleKey] = array(
287 'name' => $moduleName .
'_' . $submoduleName,
288 'title' =>
$GLOBALS[
'LANG']->moduleLabels[
'tabs'][$submoduleKey],
290 'icon' => $this->
getModuleIcon($submoduleKey, $submoduleData),
291 'link' => $submoduleLink,
292 'originalLink' => $originalLink,
293 'description' => $submoduleDescription,
294 'navigationFrameScript' => $navigationFrameScript,
295 'navigationFrameScriptParam' => $submoduleData[
'navFrameScriptParam'],
296 'navigationComponentId' => $submoduleData[
'navigationComponentId']
300 if ($moduleData[
'navFrameScript'] && $submoduleData[
'inheritNavigationComponentFromMainModule'] !==
false) {
301 $modules[$moduleKey][
'subitems'][$submoduleKey][
'parentNavigationFrameScript'] = $moduleData[
'navFrameScript'];
318 $hiddenModules =
$GLOBALS[
'BE_USER']->getTSConfig(
'options.hideModules');
321 if (!empty($hiddenModules[
'value'])) {
322 $hiddenMainModules = explode(
',', $hiddenModules[
'value']);
323 foreach ($hiddenMainModules as $hiddenMainModule) {
324 unset($loadedModules[trim($hiddenMainModule)]);
329 if (!empty($hiddenModules[
'properties']) && is_array($hiddenModules[
'properties'])) {
330 foreach ($hiddenModules[
'properties'] as $mainModuleName => $subModules) {
331 $hiddenSubModules = explode(
',', $subModules);
332 foreach ($hiddenSubModules as $hiddenSubModule) {
333 unset($loadedModules[$mainModuleName][
'sub'][trim($hiddenSubModule)]);
338 return $loadedModules;
353 if (!empty($moduleData[
'iconIdentifier'])) {
355 $icon = $iconFactory->getIcon($moduleData[
'iconIdentifier'])->render();
356 }
elseif (!empty(
$GLOBALS[
'LANG']->moduleLabels[
'tabs_images'][$moduleKey])) {
357 $imageReference =
$GLOBALS[
'LANG']->moduleLabels[
'tabs_images'][$moduleKey];
359 if (!empty($iconFileRelative)) {
360 $iconTitle =
$GLOBALS[
'LANG']->moduleLabels[
'tabs'][$moduleKey];
362 $icon =
'<img src="' . $iconFileRelative .
'" ' . $iconSizes[3] .
' title="' . htmlspecialchars($iconTitle) .
'" alt="' . htmlspecialchars($iconTitle) .
'" />';
380 $iconFilename =
$GLOBALS[
'BACK_PATH'] . $iconFilename;
382 return $iconFilename;
395 $iconFilename =
'../' . \TYPO3\CMS\Core\Utility\PathUtility::stripPathSitePrefix($iconFilename);
397 return $iconFilename;