[BUGFIX] Show correct label for IRRE records 74/44974/2
authorMarkus Klein <markus.klein@typo3.org>
Fri, 27 Nov 2015 09:46:34 +0000 (10:46 +0100)
committerFrank Nägler <frank.naegler@typo3.org>
Fri, 27 Nov 2015 11:20:29 +0000 (12:20 +0100)
If IRRE records are shown with a foreign_label definition,
this must be used even if the child table has a label_userfunc.

Resolves: #71883
Releases: master
Change-Id: Ia9ee314b82d7b4de73fea1a53713371791b1efbc
Reviewed-on: https://review.typo3.org/44974
Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Reviewed-by: Frank Nägler <frank.naegler@typo3.org>
Tested-by: Frank Nägler <frank.naegler@typo3.org>
typo3/sysext/backend/Classes/Form/FormDataProvider/TcaRecordTitle.php
typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaRecordTitleTest.php

index 33ffd78..5496196 100644 (file)
@@ -43,7 +43,18 @@ class TcaRecordTitle implements FormDataProviderInterface
             );
         }
 
-        if ($result['isInlineChild'] && isset($result['processedTca']['ctrl']['formattedLabel_userFunc'])) {
+        if ($result['isInlineChild'] && (isset($result['inlineParentConfig']['foreign_label'])
+                                         || isset($result['inlineParentConfig']['symmetric_label']))
+        ) {
+            // inline child with foreign label or symmetric inline child with symmetric_label
+            $fieldName = $result['isOnSymmetricSide']
+                ? $result['inlineParentConfig']['symmetric_label']
+                : $result['inlineParentConfig']['foreign_label'];
+            // @todo: this is a mixup here. problem is the prep method cuts the string, but also hsc's the thing.
+            // @todo: this is uncool for the userfuncs, so it is applied only here. however, the OuterWrapContainer
+            // @todo: also prep()'s the title created by the else patch below ... find a better separation and clean this up!
+            $result['recordTitle'] = BackendUtility::getRecordTitlePrep($this->getRecordTitleForField($fieldName, $result));
+        } elseif ($result['isInlineChild'] && isset($result['processedTca']['ctrl']['formattedLabel_userFunc'])) {
             // inline child with formatted user func is first
             $parameters = [
                 'table' => $result['tableName'],
@@ -75,17 +86,6 @@ class TcaRecordTitle implements FormDataProviderInterface
             $null = null;
             GeneralUtility::callUserFunction($result['processedTca']['ctrl']['label_userFunc'], $parameters, $null);
             $result['recordTitle'] = $parameters['title'];
-        } elseif ($result['isInlineChild'] && isset($result['inlineParentConfig']['foreign_label'])
-            || $result['isInlineChild'] && isset($result['inlineParentConfig']['symmetric_label'])
-        ) {
-            // inline child with foreign label or symmetric inline child with symmetric_label
-            $fieldName = $result['isOnSymmetricSide']
-                ? $result['inlineParentConfig']['symmetric_label']
-                : $result['inlineParentConfig']['foreign_label'];
-            // @todo: this is a mixup here. problem is the prep method cuts the string, but also hsc's the thing.
-            // @todo: this is uncool for the userfuncs, so it is applied only here. however, the OuterWrapContainer
-            // @todo: also prep()'s the title created by the else patch below ... find a better separation and clean this up!
-            $result['recordTitle'] = BackendUtility::getRecordTitlePrep($this->getRecordTitleForField($fieldName, $result));
         } else {
             // standard record
             $result = $this->getRecordTitleByLabelProperties($result);
index 804fd6e..4f1c002 100644 (file)
@@ -127,6 +127,9 @@ class TcaRecordTitleTest extends UnitTestCase
             'processedTca' => [
                 'ctrl' => [
                     'label' => 'foo',
+                    'label_userFunc' => function (&$parameters) {
+                        $parameters['title'] = 'Value that MUST NOT be used, otherwise the code is broken.';
+                    }
                 ],
                 'columns' => [
                     'aField' => [