From cc1909af750df48bf40cf81f14731bcbee1bdcb6 Mon Sep 17 00:00:00 2001
From: Henrik Elsner <helsner@dfau.de>
Date: Tue, 31 May 2022 20:56:28 +0200
Subject: [PATCH] [BUGFIX] Provide languageField in case it's missing

Resolves: #97710
Resolves: #97639
Releases: main, 12.4, 11.5
Change-Id: I5ff95d2d8c4d31105a95da3a18467adb0f7d3852
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/79778
Tested-by: core-ci <typo3@b13.com>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Benni Mack <benni@typo3.org>
---
 .../Classes/ContentObject/ContentObjectRenderer.php        | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php b/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
index df5a0ceebd90..7ecee4a1d3e6 100644
--- a/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
+++ b/typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
@@ -5568,6 +5568,7 @@ class ContentObjectRenderer implements LoggerAwareInterface
         $matchEnd = '(\\s*,|\\s*$)/';
         $necessaryFields = ['uid', 'pid'];
         $wsFields = ['t3ver_state'];
+        $languageField = $GLOBALS['TCA'][$table]['ctrl']['languageField'] ?? false;
         if (isset($GLOBALS['TCA'][$table]) && !preg_match($matchStart . '\\*' . $matchEnd, $selectPart) && !preg_match('/(count|max|min|avg|sum)\\([^\\)]+\\)|distinct/i', $selectPart)) {
             foreach ($necessaryFields as $field) {
                 $match = $matchStart . $field . $matchEnd;
@@ -5575,6 +5576,12 @@ class ContentObjectRenderer implements LoggerAwareInterface
                     $selectPart .= ', ' . $connection->quoteIdentifier($table . '.' . $field) . ' AS ' . $connection->quoteIdentifier($field);
                 }
             }
+            if (is_string($languageField)) {
+                $match = $matchStart . $languageField . $matchEnd;
+                if (!preg_match($match, $selectPart)) {
+                    $selectPart .= ', ' . $connection->quoteIdentifier($table . '.' . $languageField) . ' AS ' . $connection->quoteIdentifier($languageField);
+                }
+            }
             if ($GLOBALS['TCA'][$table]['ctrl']['versioningWS'] ?? false) {
                 foreach ($wsFields as $field) {
                     $match = $matchStart . $field . $matchEnd;
-- 
GitLab