[TASK] Deprecate BaseScriptClass and AbstractFunctionModule 49/58249/3
authorChristian Kuhn <lolli@schwarzbu.ch>
Mon, 10 Sep 2018 21:48:19 +0000 (23:48 +0200)
committerGeorg Ringer <georg.ringer@gmail.com>
Wed, 12 Sep 2018 18:12:29 +0000 (20:12 +0200)
With latest refactorings, the good old backend module classes
BaseScriptClass (t3lib_SCbase) and AbstractFunctionModule
(t3lib_extobjbase) are finally unused.
These spaghetti classes have been a hindrance to refactor
modules that used them for a long time already due to their
hard to follow code flow, bad method namings, global variable
usages and having everything declared public.
It's time to get rid of them to unlock refactoring of controllers
and allow dropping of various global variables in v10.

Resolves: #86225
Releases: master
Change-Id: I3b5bb35b693c7991052f4e0855c2aae4e39f02a1
Reviewed-on: https://review.typo3.org/58249
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
typo3/sysext/backend/Classes/Module/AbstractFunctionModule.php
typo3/sysext/backend/Classes/Module/BaseScriptClass.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-86225-ClassesBaseScriptClassAndAbstractFunctionModule.rst [new file with mode: 0644]
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php

index 3f32ef8..5d7248d 100644 (file)
@@ -60,6 +60,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  * times inclusion sections in their index.php scripts.
  *
  * @see \TYPO3\CMS\Backend\Module\BaseScriptClass
+ * @deprecated since v9, will be removed in v10
  */
 abstract class AbstractFunctionModule
 {
@@ -110,6 +111,17 @@ abstract class AbstractFunctionModule
     protected $pageRenderer;
 
     /**
+     * Constructor deprecates the class
+     */
+    public function __construct()
+    {
+        trigger_error(
+            'Class AbstractFunctionModule is deprecated and will be removed in TYPO3 v10',
+            E_USER_DEPRECATED
+        );
+    }
+
+    /**
      * Initialize the object
      *
      * @param \object $pObj A reference to the parent (calling) object
index 0fdaaa5..0f33942 100644 (file)
@@ -65,6 +65,8 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  *
  * THEN WE CALL THE main() METHOD AND THIS SHOULD SPARK THE CREATION OF THE MODULE OUTPUT.
  * $GLOBALS['SOBE']->main();
+ *
+ * @deprecated since v9, will be removed in v10
  */
 class BaseScriptClass
 {
@@ -187,6 +189,17 @@ class BaseScriptClass
     protected $pageRenderer;
 
     /**
+     * Constructor deprecates the class
+     */
+    public function __construct()
+    {
+        trigger_error(
+            'Class BaseScriptClass is deprecated and will be removed in TYPO3 v10',
+            E_USER_DEPRECATED
+        );
+    }
+
+    /**
      * Initializes the backend module by setting internal variables, initializing the menu.
      *
      * @see menuConfig()
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86225-ClassesBaseScriptClassAndAbstractFunctionModule.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86225-ClassesBaseScriptClassAndAbstractFunctionModule.rst
new file mode 100644 (file)
index 0000000..064c24a
--- /dev/null
@@ -0,0 +1,51 @@
+.. include:: ../../Includes.txt
+
+========================================================================
+Deprecation: #86225 - Classes BaseScriptClass and AbstractFunctionModule
+========================================================================
+
+See :issue:`86225`
+
+Description
+===========
+
+The two classes :php:`TYPO3\CMS\Backend\Module\BaseScriptClass`, also known as
+:php:`t3lib_SCbase` and :php:`TYPO3\CMS\Backend\Module\AbstractFunctionModule`,
+also known as :php:`t3lib_extobjbase` have been deprecated and will be removed
+in TYPO3 v10.
+
+
+Impact
+======
+
+Using one of the classes will trigger a :php:`E_USER_DEPRECATED` error.
+
+
+Affected Installations
+======================
+
+The :php:`BaseScriptClass` has been commonly extended by extensions that add own
+backend modules and did not rely on extbase for that. There is nothing wrong
+with not using extbase, but most of the methods from :php:`BaseScriptClass`
+were unused by own extensions and hard to understand, too.
+
+Class :php:`AbstractFunctionModule` has been extended by some extensions that
+add own sub modules to the Page -> Info or the Page -> Template view.
+
+The extension scanner will find possible usages.
+
+Migration
+=========
+
+A migration is often relatively simple: Extensions that extend :php:`BaseScriptClass`
+should verify which methods and properties are actually used from the parent class. The
+most simple solution is to just copy those over to the own class and remove the
+inheritance. It is good practice to at least change their visibility from to :php:`public`
+to :php:`protected` at the same time if possible.
+
+Extensions that extend :php:`AbstractFunctionModule` should do the same. The main `info`
+and `tstemplate` controllers typically only call the methods :php:`init()` and :php:`main()`
+of those classes as entry points, those need to be kept public.
+
+
+.. index:: Backend, PHP-API, FullyScanned
\ No newline at end of file
index afc4eac..e9cb64d 100644 (file)
@@ -934,4 +934,14 @@ return [
             'Deprecation-86109-ClassUserStorageCapabilityService.rst',
         ],
     ],
+    'TYPO3\CMS\Backend\Module\BaseScriptClass' => [
+        'restFiles' => [
+            'Deprecation-86225-ClassesBaseScriptClassAndAbstractFunctionModule.rst',
+        ],
+    ],
+    'TYPO3\CMS\Backend\Module\AbstractFunctionModule' => [
+        'restFiles' => [
+            'Deprecation-86225-ClassesBaseScriptClassAndAbstractFunctionModule.rst',
+        ],
+    ],
 ];