[TASK] Deprecate BE/FE delete clause methods 69/54769/5
authorBenni Mack <benni@typo3.org>
Mon, 27 Nov 2017 07:20:34 +0000 (08:20 +0100)
committerSusanne Moog <susanne.moog@typo3.org>
Mon, 27 Nov 2017 21:16:28 +0000 (22:16 +0100)
Prior to Doctrine DBAL, all queries used the deleteClause for BE/FE
in various places, but this is gone, and this functionality is now handled
via TYPO3's Restrictions functionality within the new database API.

The left-over methods are deprecated and will be removed in TYPO3 v10.

Resolves: #83118
Releases: master
Change-Id: Iae35782b95ccd0ce180908f91de8c7430e4b83ae
Reviewed-on: https://review.typo3.org/54769
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Susanne Moog <susanne.moog@typo3.org>
Tested-by: Susanne Moog <susanne.moog@typo3.org>
typo3/sysext/backend/Classes/Utility/BackendUtility.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-83118-DeleteClauseMethods.rst [new file with mode: 0644]
typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbQueryParser.php
typo3/sysext/extbase/Tests/Unit/Persistence/Generic/Storage/Typo3DbQueryParserTest.php
typo3/sysext/frontend/Classes/Page/PageRepository.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php

index 7e41715..428fd78 100644 (file)
@@ -83,9 +83,11 @@ class BackendUtility
      * @param string $table Table name present in $GLOBALS['TCA']
      * @param string $tableAlias Table alias if any
      * @return string WHERE clause for filtering out deleted records, eg " AND tablename.deleted=0
+     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10, the DeletedRestriction functionality should be used instead.
      */
     public static function deleteClause($table, $tableAlias = '')
     {
+        trigger_error('This method will be removed in TYPO3 v10. Add the delete statement directly in your SQL statement via the DeletedRestriction', E_USER_DEPRECATED);
         if (empty($GLOBALS['TCA'][$table]['ctrl']['delete'])) {
             return '';
         }
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-83118-DeleteClauseMethods.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-83118-DeleteClauseMethods.rst
new file mode 100644 (file)
index 0000000..729c402
--- /dev/null
@@ -0,0 +1,34 @@
+.. include:: ../../Includes.txt
+
+=====================================================
+Deprecation: #83118 - DeleteClause methods deprecated
+=====================================================
+
+See :issue:`83118`
+
+Description
+===========
+
+The PHP methods :php:`PageRepository::deleteClause()` and :php:`BackendUtility::deleteClause()` have been
+marked as deprecated, as all database queries are now put through Doctrine DBAL's restriction functionality.
+
+
+Impact
+======
+
+Calling one of the two methods above will trigger a deprecation log entry.
+
+
+Affected Installations
+======================
+
+Any TYPO3 extension using any of the two methods above.
+
+
+Migration
+=========
+
+Migrate to Doctrine DBAL and use the new Database API (ConnectionPool, QueryBuilder) to access the database
+with the :php:`DeletedRestriction` class.
+
+.. index:: PHP-API, FullyScanned
\ No newline at end of file
index db00a25..6a101c6 100644 (file)
@@ -703,8 +703,8 @@ class Typo3DbQueryParser
             if (!empty($enableFieldsToBeIgnored)) {
                 // array_combine() is necessary because of the way \TYPO3\CMS\Frontend\Page\PageRepository::enableFields() is implemented
                 $statement .= $this->getPageRepository()->enableFields($tableName, -1, array_combine($enableFieldsToBeIgnored, $enableFieldsToBeIgnored));
-            } else {
-                $statement .= $this->getPageRepository()->deleteClause($tableName);
+            } elseif (!empty($GLOBALS['TCA'][$tableName]['ctrl']['delete'])) {
+                $statement .= ' AND ' . $tableName . '.' . $GLOBALS['TCA'][$tableName]['ctrl']['delete'] . '=0';
             }
         } elseif (!$ignoreEnableFields && !$includeDeleted) {
             $statement .= $this->getPageRepository()->enableFields($tableName);
@@ -728,8 +728,8 @@ class Typo3DbQueryParser
         if (!$ignoreEnableFields) {
             $statement .= BackendUtility::BEenableFields($tableName);
         }
-        if (!$includeDeleted) {
-            $statement .= BackendUtility::deleteClause($tableName);
+        if (!$includeDeleted && !empty($GLOBALS['TCA'][$tableName]['ctrl']['delete'])) {
+            $statement .= ' AND ' . $tableName . '.' . $GLOBALS['TCA'][$tableName]['ctrl']['delete'] . '=0';
         }
         return $statement;
     }
index 430e60e..2b8ab87 100644 (file)
@@ -617,9 +617,9 @@ class Typo3DbQueryParserTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestC
     {
         return [
             'in be: include all' => ['BE', true, [], true, ''],
-            'in be: ignore enable fields but do not include deleted' => ['BE', true, [], false, 'tx_foo_table.deleted_column = 0'],
+            'in be: ignore enable fields but do not include deleted' => ['BE', true, [], false, 'tx_foo_table.deleted_column=0'],
             'in be: respect enable fields but include deleted' => ['BE', false, [], true, '(tx_foo_table.disabled_column = 0) AND (tx_foo_table.starttime_column <= 123456789)'],
-            'in be: respect enable fields and do not include deleted' => ['BE', false, [], false, '(tx_foo_table.disabled_column = 0) AND (tx_foo_table.starttime_column <= 123456789) AND tx_foo_table.deleted_column = 0'],
+            'in be: respect enable fields and do not include deleted' => ['BE', false, [], false, '(tx_foo_table.disabled_column = 0) AND (tx_foo_table.starttime_column <= 123456789) AND tx_foo_table.deleted_column=0'],
             'in fe: include all' => ['FE', true, [], true, ''],
             'in fe: ignore enable fields but do not include deleted' => ['FE', true, [], false, 'tx_foo_table.deleted_column=0'],
             'in fe: ignore only starttime and do not include deleted' => ['FE', true, ['starttime'], false, '(tx_foo_table.deleted_column = 0) AND (tx_foo_table.disabled_column = 0)'],
@@ -688,7 +688,7 @@ class Typo3DbQueryParserTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestC
     {
         return [
             'in be: respectEnableFields=false' => ['BE', false, ''],
-            'in be: respectEnableFields=true' => ['BE', true, '(tx_foo_table.disabled_column = 0) AND (tx_foo_table.starttime_column <= 123456789) AND tx_foo_table.deleted_column = 0'],
+            'in be: respectEnableFields=true' => ['BE', true, '(tx_foo_table.disabled_column = 0) AND (tx_foo_table.starttime_column <= 123456789) AND tx_foo_table.deleted_column=0'],
             'in FE: respectEnableFields=false' => ['FE', false, ''],
             'in FE: respectEnableFields=true' => ['FE', true, '(tx_foo_table.deleted_column = 0) AND (tx_foo_table.disabled_column = 0) AND (tx_foo_table.starttime_column <= 123456789)']
         ];
index abaa432..0d2a44d 100644 (file)
@@ -1277,9 +1277,11 @@ class PageRepository implements LoggerAwareInterface
      * @param string $table Tablename
      * @return string
      * @see enableFields()
+     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10, use QueryBuilders' Restrictions directly instead.
      */
     public function deleteClause($table)
     {
+        trigger_error('The delete clause can be applied via the DeletedRestrictions via QueryBuilder, this method will be removed in TYPO3 v10.0', E_USER_DEPRECATED);
         return $GLOBALS['TCA'][$table]['ctrl']['delete'] ? ' AND ' . $table . '.' . $GLOBALS['TCA'][$table]['ctrl']['delete'] . '=0' : '';
     }
 
@@ -1298,7 +1300,7 @@ class PageRepository implements LoggerAwareInterface
      * @param bool $noVersionPreview If set, enableFields will be applied regardless of any versioning preview settings which might otherwise disable enableFields
      * @throws \InvalidArgumentException
      * @return string The clause starting like " AND ...=... AND ...=...
-     * @see \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::enableFields(), deleteClause()
+     * @see \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::enableFields()
      */
     public function enableFields($table, $show_hidden = -1, $ignore_array = [], $noVersionPreview = false)
     {
index 99ed4e2..cb94db7 100644 (file)
@@ -1409,4 +1409,11 @@ return [
             'Deprecation-83121-LoggingMethodDataHandler-newlog2.rst',
         ],
     ],
+    'TYPO3\CMS\Frontend\Page\PageRepository->deleteClause' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-83118-DeleteClauseMethods.rst',
+        ],
+    ],
 ];
index f6e95eb..49b793b 100644 (file)
@@ -526,4 +526,11 @@ return [
             'Deprecation-83116-CachingFrameworkWrapperMethodsInBackendUtility.rst',
         ],
     ],
+    'TYPO3\CMS\Backend\Utility\BackendUtility::deleteClause' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-83118-DeleteClauseMethods.rst',
+        ],
+    ],
 ];