[TASK] Deprecate script-based modules 71/43871/8
authorBenjamin Mack <benni@typo3.org>
Tue, 6 Oct 2015 20:27:01 +0000 (22:27 +0200)
committerWouter Wolters <typo3@wouterwolters.nl>
Tue, 3 Nov 2015 21:32:07 +0000 (22:32 +0100)
Deprecate calling addModulePath() and calling modules
via paths.

Resolves: #51482
Releases: master
Change-Id: Ib94b3306ec47f77a907620d838598195e41b51de
Reviewed-on: https://review.typo3.org/43871
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/backend/Classes/Http/BackendModuleRequestHandler.php
typo3/sysext/backend/Classes/Module/ModuleLoader.php
typo3/sysext/core/Classes/Utility/ExtensionManagementUtility.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-51482-ScriptBasedModules.rst [new file with mode: 0644]

index 6504728..c123805 100644 (file)
@@ -91,6 +91,7 @@ class BackendModuleRequestHandler implements RequestHandlerInterface
         if ($this->isDispatchedModule($moduleName)) {
             return $this->dispatchModule($moduleName);
         } else {
+            // @deprecated: This else path is deprecated and throws deprecations logs at registration time. Can be removed with TYPO3 CMS 8.
             $isDispatched = $this->callTraditionalModule($moduleName);
             if (!$isDispatched) {
                 throw new Exception('No module "' . $moduleName . '" could be found.', 1294585070);
index aa1f3b6..d0047a7 100644 (file)
@@ -317,6 +317,7 @@ class ModuleLoader
                 $finalModuleConfiguration['script'] = BackendUtility::getModuleUrl($name);
             }
         } elseif ($setupInformation['configuration']['script'] && file_exists($setupInformation['path'] . '/' . $setupInformation['configuration']['script'])) {
+            GeneralUtility::deprecationLog('Loading module "' . $name . '" as a standalone script. Script-based modules are deprecated since TYPO3 CMS 7. Support will be removed with TYPO3 CMS 8, use the "routeTarget" option or dispatched modules instead.');
             $finalModuleConfiguration['script'] = $this->getRelativePath(PATH_typo3, $fullPath . '/' . $setupInformation['configuration']['script']);
         } else {
             $finalModuleConfiguration['script'] = BackendUtility::getModuleUrl('dummy');
@@ -330,6 +331,7 @@ class ModuleLoader
                     : array()
             );
         } elseif (!empty($setupInformation['configuration']['navFrameScript'])) {
+            GeneralUtility::deprecationLog('Loading navFrameScript "' . $setupInformation['configuration']['navFrameScript'] . '" as a standalone script. Script-based navigation frames are deprecated since TYPO3 CMS 7. Support will be removed with TYPO3 CMS 8, use "navigationFrameModule" option or the "navigationComponentId" option instead.');
             // Navigation Frame Script (GET params could be added)
             $navFrameScript = explode('?', $setupInformation['configuration']['navFrameScript']);
             $navFrameScript = $navFrameScript[0];
index f3423ce..7479567 100644 (file)
@@ -901,7 +901,7 @@ class ExtensionManagementUtility
      * @param string $main The main module key, $sub is the submodule key. So $main would be an index in the $TBE_MODULES array and $sub could be an element in the lists there.
      * @param string $sub The submodule key. If $sub is not set a blank $main module is created.
      * @param string $position Can be used to set the position of the $sub module within the list of existing submodules for the main module. $position has this syntax: [cmd]:[submodule-key]. cmd can be "after", "before" or "top" (or blank which is default). If "after"/"before" then submodule will be inserted after/before the existing submodule with [submodule-key] if found. If not found, the bottom of list. If "top" the module is inserted in the top of the submodule list.
-     * @param string $path The absolute path to the module. If this value is defined the path is added as an entry in $TBE_MODULES['_PATHS'][  main_sub  ] = $path; and thereby tells the backend where the newly added modules is found in the system.
+     * @param string $path The absolute path to the module. If this value is defined the path is added as an entry in $TBE_MODULES['_PATHS'][  main_sub  ] = $path; and thereby tells the backend where the newly added modules is found in the system. This option is deprecated as of TYPO3 CMS 7, and will have no effect in TYPO3 CMS 8 anymore.
      * @param array $moduleConfiguration additional configuration, previously put in "conf.php" of the module directory
      * @return void
      */
@@ -941,6 +941,7 @@ class ExtensionManagementUtility
         $fullModuleSignature = $main . ($sub ? '_' . $sub : '');
         // Adding path:
         if ($path) {
+            GeneralUtility::deprecationLog('Registered "' . $fullModuleSignature . '" as a script-based module. Script-based modules are deprecated since TYPO3 CMS 7. Support will be removed with TYPO3 CMS 8, use the "routeTarget" option or dispatched modules instead.');
             self::addModulePath($fullModuleSignature, $path);
         }
 
@@ -993,9 +994,11 @@ class ExtensionManagementUtility
      * @param string $name The name of the module, refer to conf.php of the module.
      * @param string $path The absolute path to the module directory inside of which "index.php" and "conf.php" is found.
      * @return void
+     * @deprecated since TYPO3 CMS 7, will be removed in TYPO3 CMS 8, use routeTarget or dispatched modules instead.
      */
     public static function addModulePath($name, $path)
     {
+        GeneralUtility::logDeprecatedFunction();
         if (StringUtility::beginsWith($path, 'EXT:')) {
             list($extensionKey, $relativePath) = explode('/', substr($path, 4), 2);
             $path = ExtensionManagementUtility::extPath($extensionKey) . $relativePath;
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-51482-ScriptBasedModules.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-51482-ScriptBasedModules.rst
new file mode 100644 (file)
index 0000000..5c99827
--- /dev/null
@@ -0,0 +1,36 @@
+==========================================
+Deprecation: #51482 - Script-based modules
+==========================================
+
+Description
+===========
+
+Pseudo-modules that are registered via ``ExtensionManagementUtility::addModulePath()`` and
+modules that are registered via ``ExtensionManagementUtility::addModule()`` using the fourth parameter
+as a custom script-path have been deprecated.
+
+The method ``ExtensionManagementUtility::addModulePath()`` itself has been deprecated.
+
+
+Impact
+======
+
+All existing modules which, are not registered via Routing will throw a deprecation warning on registration
+of the module and when calling the module directly.
+
+
+Affected Installations
+======================
+
+All third-party extensions registering a wizard, module or route without using routeTarget or Routes.php,
+which have been introduced with TYPO3 CMS 7.
+
+
+Migration
+=========
+
+Use Configuration/Backend/Routes.php to register wizards, and use
+``ExtensionManagementUtility::addModule()`` with registering a routePath option in the fifth parameter to
+use the proper PSR-7 compatible way of registering and calling modules.
+Make sure to use UriBuilder and ``BackendUtility::getModuleUrl()`` to link to these modules instead of
+hard-linking to the script names.