[TASK] Bootstrap: Load TCA configuration on every request 53/52753/3
authorBenni Mack <benni@typo3.org>
Thu, 11 May 2017 06:18:22 +0000 (08:18 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Thu, 18 May 2017 10:58:23 +0000 (12:58 +0200)
By moving Bootstrap::loadBaseTca() to the configure() call of the
TYPO3 Bootstrap, the global TCA variable is now populated very early
and it is obvious that this logic is then part of the actual system setup,
and does not need to be handled by any RequestHandler anymore.

Considering TCA is necessary for a TYPO3 environment to run,
this change might be very helpful.

Please note that the Install Tool application does not call
configure(), so this is not affected.

This also removes some issues related to Extbase
Command controllers in CLI handling.

Side effects:
- eID requests now have full TCA loaded as well at any time
- TCA is now loaded BEFORE entering any request handler check
- TCA is now loaded before e.g. BackendRouting initialization, and other Backend security checks

Easy to test the current behaviour:
- Clear all caches via install tool
- Call CLI command extbase:help which will result in a Warning / Exception

Resolves: #72222
Resolves: #81201
Releases: master
Change-Id: I31a0de0d0b039eb6180123678c61d3f26435dd63
Reviewed-on: https://review.typo3.org/52753
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Jan Helke <typo3@helke.de>
Tested-by: Jan Helke <typo3@helke.de>
Reviewed-by: Philipp Gampe <philipp.gampe@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/backend/Classes/Http/AjaxRequestHandler.php
typo3/sysext/backend/Classes/Http/BackendModuleRequestHandler.php
typo3/sysext/backend/Classes/Http/RequestHandler.php
typo3/sysext/core/Classes/Console/CommandRequestHandler.php
typo3/sysext/core/Classes/Core/Bootstrap.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-81201-EidUtilityloadTCA.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Important-81201-TCAPopulatedAvailableAtAnyRequest.rst [new file with mode: 0644]
typo3/sysext/frontend/Classes/Http/RequestHandler.php
typo3/sysext/frontend/Classes/Utility/EidUtility.php

index a07f2dd..cedc02b 100644 (file)
@@ -126,7 +126,6 @@ class AjaxRequestHandler implements RequestHandlerInterface
             ->checkBackendIpOrDie()
             ->checkSslBackendAndRedirectIfNeeded()
             ->initializeBackendRouter()
-            ->loadBaseTca()
             ->loadExtTables()
             ->initializeBackendUser()
             ->initializeBackendAuthentication($proceedIfNoUserIsLoggedIn)
index 5ee8c2c..43a733d 100644 (file)
@@ -98,7 +98,6 @@ class BackendModuleRequestHandler implements RequestHandlerInterface
             ->checkBackendIpOrDie()
             ->checkSslBackendAndRedirectIfNeeded()
             ->initializeBackendRouter()
-            ->loadBaseTca()
             ->loadExtTables()
             ->initializeBackendUser()
             ->initializeBackendAuthentication()
index d485a40..18fcbdc 100644 (file)
@@ -90,7 +90,6 @@ class RequestHandler implements RequestHandlerInterface
             ->checkBackendIpOrDie()
             ->checkSslBackendAndRedirectIfNeeded()
             ->initializeBackendRouter()
-            ->loadBaseTca()
             ->loadExtTables()
             ->initializeBackendUser()
             ->initializeBackendAuthentication($proceedIfNoUserIsLoggedIn)
index 86bd569..e217e3c 100644 (file)
@@ -61,7 +61,6 @@ class CommandRequestHandler implements RequestHandlerInterface
         $output = new ConsoleOutput();
 
         $this->bootstrap
-            ->loadBaseTca()
             ->loadExtTables()
             // create the BE_USER object (not logged in yet)
             ->initializeBackendUser(CommandLineUserAuthentication::class)
index 9158a02..177c7bf 100644 (file)
@@ -172,7 +172,8 @@ class Bootstrap
             ->loadTypo3LoadedExtAndExtLocalconf(true)
             ->setFinalCachingFrameworkCacheConfiguration()
             ->defineLoggingAndExceptionConstants()
-            ->unsetReservedGlobalVariables();
+            ->unsetReservedGlobalVariables()
+            ->loadBaseTca();
 
         return $this;
     }
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-81201-EidUtilityloadTCA.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-81201-EidUtilityloadTCA.rst
new file mode 100644 (file)
index 0000000..e9502ee
--- /dev/null
@@ -0,0 +1,33 @@
+.. include:: ../../Includes.txt
+
+=========================================
+Deprecation: #81201 - EidUtility::loadTCA
+=========================================
+
+See :issue:`81201`
+
+Description
+===========
+
+The static PHP method php:`EidUtility::loadTCA()` has been marked as deprecated, because the full
+global TCA array is available at any eID request already.
+
+
+Impact
+======
+
+Calling this method triggers a deprecation log entry.
+
+
+Affected Installations
+======================
+
+Any TYPO3 installation with an extension having a custom eID script registered that uses this method.
+
+
+Migration
+=========
+
+The method call is superfluous and can be removed from the caller script.
+
+.. index:: Frontend, PHP-API, TCA
\ No newline at end of file
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Important-81201-TCAPopulatedAvailableAtAnyRequest.rst b/typo3/sysext/core/Documentation/Changelog/master/Important-81201-TCAPopulatedAvailableAtAnyRequest.rst
new file mode 100644 (file)
index 0000000..06ccf12
--- /dev/null
@@ -0,0 +1,28 @@
+.. include:: ../../Includes.txt
+
+==========================================================
+Important: #81201 - TCA populated available at any request
+==========================================================
+
+See :issue:`81201`
+
+Description
+===========
+
+Evaluating the global `$TCA` array, necessary to do access checks, or database queries, is
+now done within the TYPO3 Bootstrap instead of any request handler.
+
+This is possible since TYPO3 v8, because TCA compiling is now completely separated from loading
+`ext_tables.php` of an extension, and is also available before instantiating a controller (typically
+`TypoScriptFrontendController`) in the frontend.
+
+This leads to the following changes in behaviour:
+- TCA compilation is done earlier in the request process. It is handled after `ext_localconf.php` is
+evaluated, but before any further hooks are executed.
+- The full TCA is available even when evaluating any RequestHandler.
+- The global variable $TCA is now available at the very beginning of an eID request, it is not
+necessary to load TCA via `EidUtility::loadTCA()` anymore.
+
+Side Note: This does not affect the install tool as it does a custom set-up of the TYPO3 Bootstrap.
+
+.. index:: PHP-API, TCA
\ No newline at end of file
index 62a9f98..823ba6c 100644 (file)
@@ -111,8 +111,6 @@ class RequestHandler implements RequestHandlerInterface
         $this->bootstrap->endOutputBufferingAndCleanPreviousOutput();
         $this->initializeOutputCompression();
 
-        $this->bootstrap->loadBaseTca();
-
         // Initializing the Frontend User
         $this->timeTracker->push('Front End user initialized', '');
         $this->controller->initFEuser();
index 89a32b0..a93f0dd 100644 (file)
@@ -39,9 +39,7 @@ class EidUtility
      */
     public static function initFeUser()
     {
-        // Get TSFE instance. It knows how to initialize the user. We also
-        // need TCA because services may need extra tables!
-        self::initTCA();
+        // Get TSFE instance. It knows how to initialize the user.
         /** @var $tsfe \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController */
         $tsfe = self::getTSFE();
         $tsfe->initFEuser();
@@ -64,9 +62,11 @@ class EidUtility
 
     /**
      * Makes TCA available inside eID
+     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10 - this is not needed anymore as TCA is now always available
      */
     public static function initTCA()
     {
+        GeneralUtility::logDeprecatedFunction();
         // Some badly made extensions attempt to manipulate TCA in a wrong way
         // (inside ext_localconf.php). Therefore $GLOBALS['TCA'] may become an array
         // but in fact it is not loaded. The check below ensure that