[!!!][TASK] Drop include_once array functionality for modules 29/34829/4
authorWouter Wolters <typo3@wouterwolters.nl>
Sun, 30 Nov 2014 19:52:21 +0000 (20:52 +0100)
committerHelmut Hummel <helmut.hummel@typo3.org>
Thu, 1 Jan 2015 21:02:35 +0000 (22:02 +0100)
The include_once array inside module functions is obsolete
and removed. The autoloader should be used instead.

Resolves: #63464
Releases: master
Change-Id: I5027d42537124bde170ad55f7bb49850c03f1606
Reviewed-on: http://review.typo3.org/34829
Reviewed-by: Benjamin Mack <benni@typo3.org>
Tested-by: Benjamin Mack <benni@typo3.org>
Reviewed-by: Helmut Hummel <helmut.hummel@typo3.org>
Tested-by: Helmut Hummel <helmut.hummel@typo3.org>
17 files changed:
typo3/sysext/backend/Classes/Controller/ContentElement/NewContentElementController.php
typo3/sysext/backend/Classes/Controller/PageLayoutController.php
typo3/sysext/backend/Classes/Controller/SimpleDataHandlerController.php
typo3/sysext/backend/Classes/Module/AbstractFunctionModule.php
typo3/sysext/backend/Classes/Module/BaseScriptClass.php
typo3/sysext/backend/Classes/View/ThumbnailView.php
typo3/sysext/cms/layout/db_layout.php
typo3/sysext/cms/layout/db_new_content_el.php
typo3/sysext/compatibility6/Classes/Controller/WebFunctionWizardsBaseController.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-63464-IncludeOnceArraysRemoved.rst [new file with mode: 0644]
typo3/sysext/func/mod1/index.php
typo3/sysext/info/mod1/index.php
typo3/sysext/lowlevel/Classes/View/ConfigurationView.php
typo3/sysext/recycler/mod1/index.php
typo3/sysext/scheduler/mod1/index.php
typo3/sysext/taskcenter/task/index.php
typo3/sysext/tstemplate/ts/index.php

index 991c2f2..eedb2c5 100644 (file)
@@ -73,13 +73,6 @@ class NewContentElementController {
        public $doc;
 
        /**
-        * Includes a list of files to include between init() and main() - see init()
-        *
-        * @var array
-        */
-       public $include_once = array();
-
-       /**
         * Used to accumulate the content of the module.
         *
         * @var string
@@ -106,10 +99,6 @@ class NewContentElementController {
         * @return void
         */
        public function init() {
-               // Setting class files to include:
-               if (is_array($GLOBALS['TBE_MODULES_EXT']['xMOD_db_new_content_el']['addElClasses'])) {
-                       $this->include_once = array_merge($this->include_once, $GLOBALS['TBE_MODULES_EXT']['xMOD_db_new_content_el']['addElClasses']);
-               }
                // Setting internal vars:
                $this->id = (int)GeneralUtility::_GP('id');
                $this->sys_language = (int)GeneralUtility::_GP('sys_language_uid');
index 1ba40b2..6bde965 100644 (file)
@@ -206,13 +206,6 @@ class PageLayoutController {
        public $MOD_SETTINGS = array();
 
        /**
-        * Array, where files to include is accumulated in the init() function
-        *
-        * @var array
-        */
-       public $include_once = array();
-
-       /**
         * Array of tables to be listed by the Web > Page module in addition to the default tables
         *
         * @var array
index e8f9c1c..087de77 100644 (file)
@@ -107,13 +107,6 @@ class SimpleDataHandlerController {
        public $generalComment;
 
        /**
-        * Files to include after init() function is called:
-        *
-        * @var array
-        */
-       public $include_once = array();
-
-       /**
         * TYPO3 Core Engine
         *
         * @var \TYPO3\CMS\Core\DataHandling\DataHandler
index f5b10b0..5686382 100644 (file)
@@ -76,27 +76,6 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  * $SOBE = GeneralUtility::makeInstance(\TYPO3\CMS\Func\Controller\PageFunctionsController::class);
  * $SOBE->init();
  *
- * Include files?
- * Note: This "include_once" is deprecated since TYPO3 6.2: use auto-loading instead!
- * foreach($SOBE->include_once as $INC_FILE)   include_once($INC_FILE);
- * $SOBE->checkExtObj();       // Checking for first level external objects
- *
- * Repeat Include files! - if any files has been added by second-level extensions
- * foreach($SOBE->include_once as $INC_FILE)   include_once($INC_FILE);
- * $SOBE->checkSubExtObj(); // Checking second level external objects
- *
- * $SOBE->main();
- * $SOBE->printContent();
- *
- * Notice that the first part is as usual: Include classes and call
- * $SOBE->checkExtObj() to initialize any level-1 sub-modules.
- * But then again ->include_once is traversed IF the initialization of
- * the level-1 modules might have added more files!!
- * And after that $SOBE->checkSubExtObj() is called to initialize the second level.
- *
- * In this way even a third level could be supported - but most likely that is
- * a too layered model to be practical.
- *
  * Anyways, the final interesting thing is to see what the framework
  * "func_wizard" actually does:
  *
@@ -107,9 +86,6 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  * OK, handles ordinary init. This includes setting up the
  * menu array with ->modMenu
  * parent::init($pObj,$conf);
- * Making sure that any further external classes are added to the
- * include_once array. Notice that inclusion happens twice
- * in the main script because of this!!!
  * $this->handleExternalFunctionValue();
  * }
  * }
@@ -199,16 +175,12 @@ abstract class AbstractFunctionModule {
         *
         * @return void
         * @see $function_key, \TYPO3\CMS\FuncWizards\Controller\WebFunctionWizardsBaseController::init()
-        * @deprecated since 6.2. Instead of this include_once array, extensions should use auto-loading
         */
        public function handleExternalFunctionValue() {
                // Must clean first to make sure the correct key is set...
                $this->pObj->MOD_SETTINGS = BackendUtility::getModuleData($this->pObj->MOD_MENU, GeneralUtility::_GP('SET'), $this->pObj->MCONF['name']);
                if ($this->function_key) {
                        $this->extClassConf = $this->pObj->getExternalItemConfig($this->pObj->MCONF['name'], $this->function_key, $this->pObj->MOD_SETTINGS[$this->function_key]);
-                       if (is_array($this->extClassConf) && $this->extClassConf['path']) {
-                               $this->pObj->include_once[] = $this->extClassConf['path'];
-                       }
                }
        }
 
index 11f2868..b9f1e63 100644 (file)
@@ -59,11 +59,6 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  * $SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\Vendor\Prototype\Controller\PrototypeController::class);
  * $SOBE->init();
  *
- * AFTER INIT THE INTERNAL ARRAY ->include_once MAY HOLD FILENAMES TO INCLUDE
- * foreach($SOBE->include_once as $INC_FILE) {
- *     include_once($INC_FILE);
- * }
- * Note: This "include_once" is deprecated since TYPO3 6.2: use auto-loading instead!
  *
  * THEN WE WILL CHECK IF THERE IS A 'SUBMODULE' REGISTERED TO BE INITIALIZED AS WELL:
  * $SOBE->checkExtObj();
@@ -171,14 +166,6 @@ class BaseScriptClass {
        public $extClassConf;
 
        /**
-        * Contains absolute paths to class files to include from the global scope. This is done in the module index.php files after calling the init() function
-        *
-        * @see handleExternalFunctionValue()
-        * @deprecated since 6.2. Instead of this include_once array, extensions should use auto-loading
-        */
-       public $include_once = array();
-
-       /**
         * Generally used for accumulating the output content of backend modules
         *
         * @var string
@@ -256,22 +243,17 @@ class BaseScriptClass {
 
        /**
         * Loads $this->extClassConf with the configuration for the CURRENT function of the menu.
-        * If for this array the key 'path' is set then that is expected to be an absolute path to a file which should be included - so it is set in the internal array $this->include_once
         *
         * @param string $MM_key The key to MOD_MENU for which to fetch configuration. 'function' is default since it is first and foremost used to get information per "extension object" (I think that is what its called)
         * @param string $MS_value The value-key to fetch from the config array. If NULL (default) MOD_SETTINGS[$MM_key] will be used. This is useful if you want to force another function than the one defined in MOD_SETTINGS[function]. Call this in init() function of your Script Class: handleExternalFunctionValue('function', $forcedSubModKey)
         * @return void
-        * @see getExternalItemConfig(), $include_once, init()
-        * @deprecated since 6.2. Instead of this include_once array, extensions should use auto-loading
+        * @see getExternalItemConfig(), init()
         */
        public function handleExternalFunctionValue($MM_key = 'function', $MS_value = NULL) {
                if ($MS_value === NULL) {
                        $MS_value = $this->MOD_SETTINGS[$MM_key];
                }
                $this->extClassConf = $this->getExternalItemConfig($this->MCONF['name'], $MM_key, $MS_value);
-               if (is_array($this->extClassConf) && $this->extClassConf['path']) {
-                       $this->include_once[] = $this->extClassConf['path'];
-               }
        }
 
        /**
@@ -292,7 +274,6 @@ class BaseScriptClass {
         * Creates an instance of the class found in $this->extClassConf['name'] in $this->extObj if any (this should hold three keys, "name", "path" and "title" if a "Function menu module" tries to connect...)
         * This value in extClassConf might be set by an extension (in a ext_tables/ext_localconf file) which thus "connects" to a module.
         * The array $this->extClassConf is set in handleExternalFunctionValue() based on the value of MOD_SETTINGS[function]
-        * (Should be) called from global scope right after inclusion of files from the ->include_once array.
         * If an instance is created it is initiated with $this passed as value and $this->extClassConf as second argument. Further the $this->MOD_SETTING is cleaned up again after calling the init function.
         *
         * @return void
index 514904d..a3419a2 100644 (file)
@@ -32,11 +32,6 @@ use TYPO3\CMS\Core\Utility\MathUtility;
 class ThumbnailView {
 
        /**
-        * @var array
-        */
-       public $include_once = array();
-
-       /**
         * The output directory of temporary files in PATH_site
         *
         * @var string
index 8015532..14aa20b 100644 (file)
@@ -109,10 +109,6 @@ require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('backen
 // Make instance:
 $SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Controller\PageLayoutController::class);
 $SOBE->init();
-// Include files?
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
 $SOBE->clearCache();
 $SOBE->main();
 $SOBE->printContent();
index ea908d5..b703f69 100644 (file)
@@ -75,9 +75,5 @@ require_once \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('backen
 // Make instance:
 $SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Controller\ContentElement\NewContentElementController::class);
 $SOBE->init();
-// Include files?
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
 $SOBE->main();
 $SOBE->printContent();
index 5dd7a1e..47050f0 100644 (file)
@@ -38,8 +38,6 @@ class WebFunctionWizardsBaseController extends \TYPO3\CMS\Backend\Module\Abstrac
        public function init(&$pObj, $conf) {
                // OK, handles ordinary init. This includes setting up the menu array with ->modMenu
                parent::init($pObj, $conf);
-               // Making sure that any further external classes are added to the include_once array.
-               // Notice that inclusion happens twice in the main script because of this!!!
                $this->handleExternalFunctionValue();
        }
 
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-63464-IncludeOnceArraysRemoved.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-63464-IncludeOnceArraysRemoved.rst
new file mode 100644 (file)
index 0000000..5a13adf
--- /dev/null
@@ -0,0 +1,39 @@
+========================================================================
+Breaking: #63464 - Remove include_once inclusions inside ModuleFunctions
+========================================================================
+
+Description
+===========
+
+The functionality to include PHP files within module functions (e.g. info module) via an include_once array
+has been removed. The API did not use the include_once array anymore, and certain places were marked as deprecated
+since TYPO3 CMS 6.2. All module functions are using the common autoloading functionality via namespaced classes.
+
+The following include_once arrays within the following modules are removed:
+  * Web => Page
+  * Web => Page - New Content Element Wizard
+  * Web => Functions
+  * Web => Info
+  * Web => Template
+  * Web => Recycler
+  * User => Task Center
+  * System => Scheduler
+
+Impact
+======
+
+Any non-API usage of the include_once array in any custom module function will fail.
+
+
+Affected installations
+======================
+
+Any installation with an extension using the property $include_once to load additional files via direct access instead
+of using the API via ``ExtensionManagementUtility::insertModuleFunction()``.
+
+
+Migration
+=========
+
+Use the autoloader to load any custom classes inside your code, or any hooks if available in the custom module functions
+to include any file.
index c2a20a4..fc55f3f 100644 (file)
 /** @var $SOBE \TYPO3\CMS\Func\Controller\PageFunctionsController */
 $SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Func\Controller\PageFunctionsController::class);
 $SOBE->init();
-// Include files?
-// @deprecated since 6.2 (see ExtensionManagementUtility::insertModuleFunction)
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
+
 // Checking for first level external objects
 $SOBE->checkExtObj();
-// Repeat Include files! - if any files has been added by second-level extensions
-// @deprecated since 6.2 (see ExtensionManagementUtility::insertModuleFunction)
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
+
 // Checking second level external objects
 $SOBE->checkSubExtObj();
 $SOBE->main();
index 9a66418..e89f32c 100644 (file)
  */
 $SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Info\Controller\InfoModuleController::class);
 $SOBE->init();
-// Include files?
-// @deprecated since 6.2 (see ExtensionManagementUtility::insertModuleFunction)
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
+
 // Checking for first level external objects
 $SOBE->checkExtObj();
-// Repeat Include files! - if any files has been added by second-level extensions
-// @deprecated since 6.2 (see ExtensionManagementUtility::insertModuleFunction)
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
+
 // Checking second level external objects
 $SOBE->checkSubExtObj();
 $SOBE->main();
index 7d92bc6..3c7873a 100644 (file)
@@ -60,11 +60,6 @@ class ConfigurationView {
        public $doc;
 
        /**
-        * @var array
-        */
-       public $include_once = array();
-
-       /**
         * @var string
         */
        public $content;
index 9054cd7..e21d0d2 100644 (file)
 
 $SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Recycler\Controller\RecyclerModuleController::class);
 $SOBE->initialize();
-// Include files?
-// @deprecated since 6.2 (see ExtensionManagementUtility::insertModuleFunction)
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
 $SOBE->render();
 $SOBE->flush();
index 7fe2172..c96e21f 100644 (file)
 
 $SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Scheduler\Controller\SchedulerModuleController::class);
 $SOBE->init();
-// Include files?
-// @deprecated since 6.2 (see ExtensionManagementUtility::insertModuleFunction)
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
 $SOBE->main();
 $SOBE->render();
index 84bb73c..8263c74 100644 (file)
@@ -13,9 +13,5 @@
  */
 
 $SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Taskcenter\Controller\TaskModuleController::class);
-// Include files?
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
 $SOBE->main();
 $SOBE->printContent();
index 6536f70..7c7e177 100644 (file)
  */
 
 $SOBE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController::class);
-/* @var $SOBE \TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController */
 $SOBE->init();
-// Include files?
-foreach ($SOBE->include_once as $INC_FILE) {
-       include_once $INC_FILE;
-}
+
 // Checking for first level external objects
 $SOBE->checkExtObj();
 $SOBE->clearCache();