[FOLLOWUP][BUGFIX] Add query restrictions for all tables in query 12/51912/4
authorTymoteusz Motylewski <t.motylewski@gmail.com>
Wed, 1 Mar 2017 14:17:03 +0000 (15:17 +0100)
committerGeorg Ringer <georg.ringer@gmail.com>
Fri, 3 Mar 2017 19:05:14 +0000 (20:05 +0100)
This patch ensures a correct table name is used within the restrictions
to be able to find TCA information.

Resolves: #79615
Releases: master
Change-Id: I1e96531602bfb5debeb0a1202ed91eb90cc31032
Reviewed-on: https://review.typo3.org/51912
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Nicole Cordes <typo3@cordes.co>
Tested-by: Nicole Cordes <typo3@cordes.co>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Thomas Hohn <thomas@hohn.dk>
Reviewed-by: Jigal van Hemert <jigal.van.hemert@typo3.org>
Tested-by: Jigal van Hemert <jigal.van.hemert@typo3.org>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
typo3/sysext/core/Classes/Authentication/AbstractUserAuthentication.php
typo3/sysext/core/Classes/Database/Query/Restriction/QueryRestrictionInterface.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-79615-QueryBuilderGetQueriedTablesResultFormatChange.rst [new file with mode: 0644]

index 878337d..d5a3464 100644 (file)
@@ -1437,7 +1437,7 @@ abstract class AbstractUserAuthentication
         $authInfo['db_user']['userident_column'] = $this->userident_column;
         $authInfo['db_user']['usergroup_column'] = $this->usergroup_column;
         $authInfo['db_user']['enable_clause'] = $this->userConstraints()->buildExpression(
-            [$this->user_table => ''],
+            [$this->user_table => $this->user_table],
             $expressionBuilder
         );
         if ($this->checkPid && $this->checkPid_value !== null) {
index ee99420..bb0b1d7 100644 (file)
@@ -26,7 +26,7 @@ interface QueryRestrictionInterface
     /**
      * Main method to build expressions for given tables
      *
-     * @param array $queriedTables Array of tables, where array key is table name and value potentially an alias
+     * @param array $queriedTables Array of tables, where array key is table alias and value is a table name
      * @param ExpressionBuilder $expressionBuilder Expression builder instance to add restrictions with
      * @return CompositeExpression The result of query builder expression(s)
      */
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79615-QueryBuilderGetQueriedTablesResultFormatChange.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79615-QueryBuilderGetQueriedTablesResultFormatChange.rst
new file mode 100644 (file)
index 0000000..701bdf6
--- /dev/null
@@ -0,0 +1,56 @@
+.. include:: ../../Includes.txt
+
+=====================================================================
+Breaking: #79615 - QueryBuilder getQueriedTables result format change
+=====================================================================
+
+See :issue:`79615`
+
+Description
+===========
+
+:php:`QueryBuilder::getQueriedTables` return value has been changed from array with key being table name and value being table alias (or null) to array with a key being table alias and value being table name. Both key and the value should be filled.
+This allows to return multiple entries for the same table (in case inner join is made).
+
+Example for the `tt_content` table inner joined with self and joined with `sys_language`:
+
+.. code-block:: php
+
+    [
+      'tt_content_alias' => 'tt_content',
+      'tt_content' => 'tt_content',
+      'sys_language' => 'sys_language'
+    ]
+
+Previously the array (for the same case) looked like:
+
+.. code-block:: php
+
+    [
+      'tt_content' => 'tt_content_alias',
+      'sys_language' => null
+    ]
+
+
+Impact
+======
+
+All code which rely on the result format of the `getQueriedTables` method needs to be adapted.
+The first parameter of the :php:`QueryRestrictionInterface::buildExpression` (:php:`$queriedTables`) expects a new array structure.
+
+
+Affected Installations
+======================
+
+All installations with custom implementation of Query Restriction (classes implementing :php:`QueryRestrictionInterface`).
+All installations where table array passed to `buildExpression` method is created manually (without using :php:`QueryBuilder::getQueriedTables`).
+
+
+Migration
+=========
+
+The code of the `buildExpression` method in custom :php:`QueryRestrictionInterface`
+implementations needs to adapted to be able to handle the new incoming array structure.
+Format of the first parameter passed to `buildExpression` needs to be adapted in case a query restriction is used directly (without using :php:`QueryBuilder::getQueriedTables`).
+
+.. index:: PHP-API
\ No newline at end of file