[TASK] Mark several methods within TemplateService as internal 56/58456/8
authorBenni Mack <benni@typo3.org>
Sat, 29 Sep 2018 14:06:31 +0000 (16:06 +0200)
committerBenni Mack <benni@typo3.org>
Sat, 29 Sep 2018 20:02:22 +0000 (22:02 +0200)
The following methods will trigger a deprecation warning if
they are called from the outside:

- TemplateService->prependStaticExtra()
- TemplateService->versionOL()
- TemplateService->processIncludes()
- TemplateService->mergeConstantsFromPageTSconfig()
- TemplateService->flattenSetup()
- TemplateService->substituteConstants()

Several other methods have been marked as internal.

Resolves: #86439
Releases: master
Change-Id: Ifabbda8048449e6919d054da4111f01065a5eeab
Reviewed-on: https://review.typo3.org/58456
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
typo3/sysext/core/Classes/TypoScript/Parser/TypoScriptParser.php
typo3/sysext/core/Classes/TypoScript/TemplateService.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-86439-MarkSeveralMethodsWithinTemplateServiceAsInternal.rst [new file with mode: 0644]
typo3/sysext/core/Tests/Unit/TypoScript/TemplateServiceTest.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php

index 6424257..ebc710c 100644 (file)
@@ -797,7 +797,7 @@ class TypoScriptParser
      * @param int $cycle_counter Counter for detecting endless loops
      * @param bool $returnFiles When set an array containing the resulting typoscript and all included files will get returned
      * @param string $parentFilenameOrPath The parent file (with absolute path) or path for relative includes
      * @param int $cycle_counter Counter for detecting endless loops
      * @param bool $returnFiles When set an array containing the resulting typoscript and all included files will get returned
      * @param string $parentFilenameOrPath The parent file (with absolute path) or path for relative includes
-     * @return string Complete TypoScript with includes added.
+     * @return string|array Complete TypoScript with includes added.
      * @static
      */
     public static function checkIncludeLines($string, $cycle_counter = 1, $returnFiles = false, $parentFilenameOrPath = '')
      * @static
      */
     public static function checkIncludeLines($string, $cycle_counter = 1, $returnFiles = false, $parentFilenameOrPath = '')
index ce47ca7..3e9853a 100644 (file)
@@ -16,9 +16,9 @@ namespace TYPO3\CMS\Core\TypoScript;
 
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Cache\CacheManager;
 
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Core\Cache\CacheManager;
+use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
 use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Context\Context;
-use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Database\Connection;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\Restriction\AbstractRestrictionContainer;
 use TYPO3\CMS\Core\Database\Connection;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\Restriction\AbstractRestrictionContainer;
@@ -48,6 +48,7 @@ use TYPO3\CMS\Frontend\Resource\FilePathSanitizer;
 class TemplateService
 {
     use PublicPropertyDeprecationTrait;
 class TemplateService
 {
     use PublicPropertyDeprecationTrait;
+    use PublicMethodDeprecationTrait;
 
     /**
      * Properties which have been moved to protected status from public
 
     /**
      * Properties which have been moved to protected status from public
@@ -55,7 +56,7 @@ class TemplateService
      */
     protected $deprecatedPublicProperties = [
         'matchAll' => 'Using $matchAll of class TemplateService from the outside is discouraged, as this variable is only used for internal storage.',
      */
     protected $deprecatedPublicProperties = [
         'matchAll' => 'Using $matchAll of class TemplateService from the outside is discouraged, as this variable is only used for internal storage.',
-        'whereClause' => 'Using $whereClause of class TemplateService is discouraged, as this has been superseeded by Doctrine DBAL API.',
+        'whereClause' => 'Using $whereClause of class TemplateService is discouraged, as this has been superseded by Doctrine DBAL API.',
         'debug' => 'Using $debug of class TemplateService is discouraged, as this option has no effect anymore.',
         'allowedPaths' => 'Using $allowedPaths of class TemplateService from the outside is discouraged, as this variable is only used for internal storage.',
         'simulationHiddenOrTime' => 'Using $simulationHiddenOrTime of class TemplateService is discouraged, as this has been superseeded by Doctrine DBAL API.',
         'debug' => 'Using $debug of class TemplateService is discouraged, as this option has no effect anymore.',
         'allowedPaths' => 'Using $allowedPaths of class TemplateService from the outside is discouraged, as this variable is only used for internal storage.',
         'simulationHiddenOrTime' => 'Using $simulationHiddenOrTime of class TemplateService is discouraged, as this has been superseeded by Doctrine DBAL API.',
@@ -72,6 +73,19 @@ class TemplateService
     ];
 
     /**
     ];
 
     /**
+     * Methods which have been moved to protected status from public
+     * @var array
+     */
+    protected $deprecatedPublicMethods = [
+        'prependStaticExtra' => 'Using prependStaticExtra() of class TemplateService from the outside is discouraged, as this method is only meant to be used internally.',
+        'versionOL' => 'Using versionOL() of class TemplateService from the outside is discouraged, as this method is only meant to be used internally.',
+        'processIncludes' => 'Using processIncludes() of class TemplateService from the outside is discouraged, as this method is only meant to be used internally.',
+        'mergeConstantsFromPageTSconfig' => 'Using mergeConstantsFromPageTSconfig() of class TemplateService from the outside is discouraged, as this method is only meant to be used internally.',
+        'flattenSetup' => 'Using flattenSetup() of class TemplateService from the outside is discouraged, as this method is only meant to be used internally.',
+        'substituteConstants' => 'Using substituteConstants() of class TemplateService from the outside is discouraged, as this method is only meant to be used internally.',
+    ];
+
+    /**
      * option to enable logging, time-tracking (FE-only)
      * usually, this is only done when
      *  - in FE a BE_USER is logged-in
      * option to enable logging, time-tracking (FE-only)
      * usually, this is only done when
      *  - in FE a BE_USER is logged-in
@@ -100,6 +114,7 @@ class TemplateService
      * Used for backend modules only. Never frontend!
      *
      * @var array
      * Used for backend modules only. Never frontend!
      *
      * @var array
+     * @internal
      */
     public $matchAlternative = [];
 
      */
     public $matchAlternative = [];
 
@@ -504,6 +519,7 @@ class TemplateService
      * because this will make a new portion of data in currentPageData string.
      *
      * @return array Returns the unmatched array $currentPageData if found cached in "cache_pagesection". Otherwise FALSE is returned which means that the array must be generated and stored in the cache
      * because this will make a new portion of data in currentPageData string.
      *
      * @return array Returns the unmatched array $currentPageData if found cached in "cache_pagesection". Otherwise FALSE is returned which means that the array must be generated and stored in the cache
+     * @internal
      */
     public function getCurrentPageData()
     {
      */
     public function getCurrentPageData()
     {
@@ -922,6 +938,7 @@ class TemplateService
      * @param int $pid The PID of the input template record
      * @param array $row A full TypoScript template record
      * @see processTemplate()
      * @param int $pid The PID of the input template record
      * @param array $row A full TypoScript template record
      * @see processTemplate()
+     * @internal
      */
     public function includeStaticTypoScriptSources($idList, $templateID, $pid, $row)
     {
      */
     public function includeStaticTypoScriptSources($idList, $templateID, $pid, $row)
     {
@@ -1078,10 +1095,9 @@ class TemplateService
      *
      * @param array $subrow Static template record/file
      * @return array Returns the input array where the values for keys "config" and "constants" may have been modified with prepended code.
      *
      * @param array $subrow Static template record/file
      * @return array Returns the input array where the values for keys "config" and "constants" may have been modified with prepended code.
-     * @internal
      * @see addExtensionStatics(), includeStaticTypoScriptSources()
      */
      * @see addExtensionStatics(), includeStaticTypoScriptSources()
      */
-    public function prependStaticExtra($subrow)
+    protected function prependStaticExtra($subrow)
     {
         // the identifier can be "43" if coming from "static template" extension or a path like "cssstyledcontent/static/"
         $identifier = $subrow['uid'];
     {
         // the identifier can be "43" if coming from "static template" extension or a path like "cssstyledcontent/static/"
         $identifier = $subrow['uid'];
@@ -1101,7 +1117,7 @@ class TemplateService
      *
      * @param array $row Row to overlay (passed by reference)
      */
      *
      * @param array $row Row to overlay (passed by reference)
      */
-    public function versionOL(&$row)
+    protected function versionOL(&$row)
     {
         // Distinguish frontend and backend call:
         // To do the fronted call a full frontend is required, just checking for
     {
         // Distinguish frontend and backend call:
         // To do the fronted call a full frontend is required, just checking for
@@ -1245,7 +1261,7 @@ class TemplateService
      *
      * @see \TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser, generateConfig()
      */
      *
      * @see \TYPO3\CMS\Core\TypoScript\Parser\TypoScriptParser, generateConfig()
      */
-    public function processIncludes()
+    protected function processIncludes()
     {
         if ($this->processIncludesHasBeenRun) {
             return;
     {
         if ($this->processIncludesHasBeenRun) {
             return;
@@ -1284,7 +1300,7 @@ class TemplateService
      * @return array Constants array, modified
      * @todo Apply caching to the parsed Page TSconfig. This is done in the other similar functions for both frontend and backend. However, since this functions works for BOTH frontend and backend we will have to either write our own local caching function or (more likely) detect if we are in FE or BE and use caching functions accordingly. Not having caching affects mostly the backend modules inside the "Template" module since the overhead in the frontend is only seen when TypoScript templates are parsed anyways (after which point they are cached anyways...)
      */
      * @return array Constants array, modified
      * @todo Apply caching to the parsed Page TSconfig. This is done in the other similar functions for both frontend and backend. However, since this functions works for BOTH frontend and backend we will have to either write our own local caching function or (more likely) detect if we are in FE or BE and use caching functions accordingly. Not having caching affects mostly the backend modules inside the "Template" module since the overhead in the frontend is only seen when TypoScript templates are parsed anyways (after which point they are cached anyways...)
      */
-    public function mergeConstantsFromPageTSconfig($constArray)
+    protected function mergeConstantsFromPageTSconfig($constArray)
     {
         $TSdataArray = [];
         // Setting default configuration:
     {
         $TSdataArray = [];
         // Setting default configuration:
@@ -1353,7 +1369,7 @@ class TemplateService
      * @param string $prefix Prefix to the object path. Used for recursive calls to this function.
      * @see generateConfig()
      */
      * @param string $prefix Prefix to the object path. Used for recursive calls to this function.
      * @see generateConfig()
      */
-    public function flattenSetup($setupArray, $prefix)
+    protected function flattenSetup($setupArray, $prefix)
     {
         if (is_array($setupArray)) {
             foreach ($setupArray as $key => $val) {
     {
         if (is_array($setupArray)) {
             foreach ($setupArray as $key => $val) {
@@ -1373,7 +1389,7 @@ class TemplateService
      * @return string The processed string with all constants found in $this->flatSetup as key/value pairs substituted.
      * @see generateConfig(), flattenSetup()
      */
      * @return string The processed string with all constants found in $this->flatSetup as key/value pairs substituted.
      * @see generateConfig(), flattenSetup()
      */
-    public function substituteConstants($all)
+    protected function substituteConstants($all)
     {
         if ($this->tt_track) {
             $this->getTimeTracker()->setTSlogMessage('Constants to substitute: ' . count($this->flatSetup));
     {
         if ($this->tt_track) {
             $this->getTimeTracker()->setTSlogMessage('Constants to substitute: ' . count($this->flatSetup));
@@ -1396,6 +1412,7 @@ class TemplateService
      * @param array $matches Regular expression matches
      * @return string Replacement
      * @see substituteConstants()
      * @param array $matches Regular expression matches
      * @return string Replacement
      * @see substituteConstants()
+     * @internal
      */
     public function substituteConstantsCallBack($matches)
     {
      */
     public function substituteConstantsCallBack($matches)
     {
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86439-MarkSeveralMethodsWithinTemplateServiceAsInternal.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86439-MarkSeveralMethodsWithinTemplateServiceAsInternal.rst
new file mode 100644 (file)
index 0000000..9c17a64
--- /dev/null
@@ -0,0 +1,41 @@
+.. include:: ../../Includes.txt
+
+=============================================================================
+Deprecation: #86439 - Mark several methods within TemplateService as internal
+=============================================================================
+
+See :issue:`86439`
+
+Description
+===========
+
+Some minor changes have been made with :php:`\TYPO3\CMS\Core\TypoScript\TemplateService` in order
+to continue cleaning up the code.
+
+The following methods have been marked as protected:
+
+- :php:`prependStaticExtra()`
+- :php:`versionOL()`
+- :php:`processIncludes()`
+- :php:`mergeConstantsFromPageTSconfig()`
+- :php:`flattenSetup()`
+- :php:`substituteConstants()`
+
+
+Impact
+======
+
+Calling the methods in a public context will now trigger a PHP deprecation message.
+
+
+Affected Installations
+======================
+
+TYPO3 installations with custom extensions working with the :php:`TemplateService` class.
+
+Migration
+=========
+
+Avoid using the methods, and re-implement the functionality on your own, if necessary.
+
+.. index:: Backend, NotScanned, ext:core
index 6af6725..1c2a8fc 100644 (file)
@@ -27,7 +27,6 @@ use TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtili
 use TYPO3\CMS\Core\TypoScript\TemplateService;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Core\TypoScript\TemplateService;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Frontend\Page\PageRepository;
 use TYPO3\TestingFramework\Core\AccessibleObjectInterface;
 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
 use TYPO3\TestingFramework\Core\AccessibleObjectInterface;
 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
@@ -85,19 +84,6 @@ class TemplateServiceTest extends UnitTestCase
     /**
      * @test
      */
     /**
      * @test
      */
-    public function versionOlCallsVersionOlOfPageSelectClassWithGivenRow(): void
-    {
-        $row = ['foo'];
-        $GLOBALS['TSFE'] = new \stdClass();
-        $sysPageMock = $this->createMock(PageRepository::class);
-        $sysPageMock->expects($this->once())->method('versionOL')->with('sys_template', $row);
-        $GLOBALS['TSFE']->sys_page = $sysPageMock;
-        $this->templateService->versionOL($row);
-    }
-
-    /**
-     * @test
-     */
     public function extensionStaticFilesAreNotProcessedIfNotExplicitlyRequested(): void
     {
         $queryBuilderProphet = $this->prophesize(QueryBuilder::class);
     public function extensionStaticFilesAreNotProcessedIfNotExplicitlyRequested(): void
     {
         $queryBuilderProphet = $this->prophesize(QueryBuilder::class);
@@ -105,7 +91,6 @@ class TemplateServiceTest extends UnitTestCase
         $connectionPoolProphet->getQueryBuilderForTable(Argument::cetera())->willReturn($queryBuilderProphet->reveal());
         GeneralUtility::addInstance(ConnectionPool::class, $connectionPoolProphet->reveal());
 
         $connectionPoolProphet->getQueryBuilderForTable(Argument::cetera())->willReturn($queryBuilderProphet->reveal());
         GeneralUtility::addInstance(ConnectionPool::class, $connectionPoolProphet->reveal());
 
-        $identifier = $this->getUniqueId('test');
         $this->packageManagerProphecy->getActivePackages()->shouldNotBeCalled();
 
         $this->templateService->runThroughTemplates([], 0);
         $this->packageManagerProphecy->getActivePackages()->shouldNotBeCalled();
 
         $this->templateService->runThroughTemplates([], 0);
@@ -124,8 +109,6 @@ class TemplateServiceTest extends UnitTestCase
         $connectionPoolProphet->getQueryBuilderForTable(Argument::cetera())->willReturn($queryBuilderProphet->reveal());
         GeneralUtility::addInstance(ConnectionPool::class, $connectionPoolProphet->reveal());
 
         $connectionPoolProphet->getQueryBuilderForTable(Argument::cetera())->willReturn($queryBuilderProphet->reveal());
         GeneralUtility::addInstance(ConnectionPool::class, $connectionPoolProphet->reveal());
 
-        $identifier = $this->getUniqueId('test');
-
         $mockPackage = $this->getMockBuilder(Package::class)
             ->setMethods(['getPackagePath', 'getPackageKey'])
             ->disableOriginalConstructor()
         $mockPackage = $this->getMockBuilder(Package::class)
             ->setMethods(['getPackagePath', 'getPackageKey'])
             ->disableOriginalConstructor()
index 8b32b6d..04dd6c9 100644 (file)
@@ -3635,6 +3635,48 @@ return [
             'Deprecation-86433-VariousStdWrapFunctionsAndContentObjectRenderer-relatedMethods.rst'
         ],
     ],
             'Deprecation-86433-VariousStdWrapFunctionsAndContentObjectRenderer-relatedMethods.rst'
         ],
     ],
+    'TYPO3\CMS\Core\TypoScript\TemplateService->prependStaticExtra' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-86439-MarkSeveralMethodsWithinTemplateServiceAsInternal.rst'
+        ],
+    ],
+    'TYPO3\CMS\Core\TypoScript\TemplateService->versionOL' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-86439-MarkSeveralMethodsWithinTemplateServiceAsInternal.rst'
+        ],
+    ],
+    'TYPO3\CMS\Core\TypoScript\TemplateService->processIncludes' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Deprecation-86439-MarkSeveralMethodsWithinTemplateServiceAsInternal.rst'
+        ],
+    ],
+    'TYPO3\CMS\Core\TypoScript\TemplateService->mergeConstantsFromPageTSconfig' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-86439-MarkSeveralMethodsWithinTemplateServiceAsInternal.rst'
+        ],
+    ],
+    'TYPO3\CMS\Core\TypoScript\TemplateService->flattenSetup' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-86439-MarkSeveralMethodsWithinTemplateServiceAsInternal.rst'
+        ],
+    ],
+    'TYPO3\CMS\Core\TypoScript\TemplateService->substituteConstants' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-86439-MarkSeveralMethodsWithinTemplateServiceAsInternal.rst'
+        ],
+    ],
     'TYPO3\CMS\Core\Authentication\BackendUserAuthentication->isPSet' => [
         'numberOfMandatoryArguments' => 2,
         'maximumNumberOfArguments' => 3,
     'TYPO3\CMS\Core\Authentication\BackendUserAuthentication->isPSet' => [
         'numberOfMandatoryArguments' => 2,
         'maximumNumberOfArguments' => 3,