Breaking: #97135 - Removed support for module handling based on TBE_MODULES_EXT

See forge#97135

Description

Previously it had been possible to add additional functionality to TYPO3 backend modules, such as Web > Info or Web > Template, using the ExtensionManagementUtility::insertModuleFunction() API method, which attached a new entry to the global TBE_MODULES_EXT array.

Since the introduction of the new Module Registration API, all modules are registered in the dedicated Configuration/Backend/Modules.php configuration file. Additional modules, or "third-level modules" are now also registered via the new mechanism.

Therefore, the $GLOBALS['TBE_MODULES_EXT'] has been removed, while the corresponding ExtensionManagementUtility::insertModuleFunction() API method has no effect.

The related TSconfig options mod.web_info.menu.function as well as mod.web_ts.menu.function have been removed in favor of the existing hideModules option and the module access logic, which due to the new registration, now also covers those modules.

Additionally, the following hooks have been removed, because their use cases does no longer exist:

  • $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController']['newStandardTemplateView']

  • $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController']['newStandardTemplateHandler']

Impact

The global TBE_MODULES_EXT array does no longer exist and the ExtensionManagementUtility::insertModuleFunction() API method no longer has any effect.

The TSconfig options mod.web_info.menu.function and mod.web_ts.menu.function are no longer evaluated.

Using one of mentioned, TypoScriptTemplateModuleController related hooks does no longer have any effect.

Affected Installations

All installations using the global TBE_MODULES_EXT array or calling ExtensionManagementUtility::insertModuleFunction() in custom extension code.

All installations using one of the removed TSconfig options or one of the removed hooks.

Migration

Register your "third-level" module in our extension's Configuration/Backend/Modules.php file.

Previous configuration in ext_tables.php:

ExtensionManagementUtility::insertModuleFunction(
    'web_info',
    MyAdditonalInfoModuleController::class,
    '',
    'LLL:EXT:extkey/Resources/Private/Language/locallang.xlf:mod_title'
);

Will now be registered in Configuration/Backend/Modules.php:

'web_info_additional' => [
    'parent' => 'web_info',
    'access' => 'user',
    'path' => '/module/web/info/additional',
    'iconIdentifier' => 'module-my-icon-identifier',
    'labels' => [
        'title' => 'LLL:EXT:extkey/Resources/Private/Language/locallang.xlf:mod_title',
    ],
    'routes' => [
        '_default' => [
            'target' => MyAdditonalInfoModuleController::class . '::handleRequest',
        ],
    ],
],

To hide a "third-level" module in the doc header menu, use the options.hideModules option:

# before
mod.web_info.menu.function.TYPO3\CMS\Info\Controller\TranslationStatusController = 0

# after
options.hideModules := addToList(web_info_translations)

Additionally, use the module access logic to restrict access to those modules.

Remove any registration of the mentioned hooks. There is no direct migration, since the use cases for those hooks do no longer exist.