[!!!][TASK] Remove stdWrap option TCAselectItem 99/54799/10
authorGeorg Ringer <georg.ringer@gmail.com>
Mon, 27 Nov 2017 18:58:37 +0000 (19:58 +0100)
committerBenni Mack <benni@typo3.org>
Fri, 8 Dec 2017 07:36:20 +0000 (08:36 +0100)
The option `TCAselectItem` is rarely used and also does not cover all
possibilities of the core like manipulating entries with TSconfig and the
mentioned support of database relations.

Resolves: #83122
Releases: master
Change-Id: Ic5ca02d72627a87dc1827bfb4f3c414bc810eef8
Reviewed-on: https://review.typo3.org/54799
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Daniel Gorges <daniel.gorges@b13.de>
Tested-by: Daniel Gorges <daniel.gorges@b13.de>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
typo3/sysext/core/Documentation/Changelog/master/Breaking-83122-RemovedStdWrapOptionTCAselectItem.rst [new file with mode: 0644]
typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
typo3/sysext/frontend/Tests/Unit/ContentObject/ContentObjectRendererTest.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/t3editor/Resources/Private/tsref.xml

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-83122-RemovedStdWrapOptionTCAselectItem.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-83122-RemovedStdWrapOptionTCAselectItem.rst
new file mode 100644 (file)
index 0000000..25afc8a
--- /dev/null
@@ -0,0 +1,38 @@
+.. include:: ../../Includes.txt
+
+=======================================================
+Breaking: #83122 - Removed stdWrap option TCAselectItem
+=======================================================
+
+See :issue:`83122`
+
+Description
+===========
+
+The option `TCAselectItem` is rarely used and also does not cover all possibilities of the core like manipulating
+entries with TSconfig and the mentioned support of database relations.
+
+
+Impact
+======
+
+The stdWrap option :ts:`TCAselectItem` will not work anymore.
+
+Calling :php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::stdWrap_TCAselectItem` and
+:php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::TCAlookup` will trigger an error.
+
+
+Affected Installations
+======================
+
+Any instance using the stdWrap option :ts:`TCAselectItem` or calls to
+:php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::stdWrap_TCAselectItem` and
+:php:`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::TCAlookup`.
+
+
+Migration
+=========
+
+Use a custom userFunc to rebuild the functionality.
+
+.. index:: Frontend, TypoScript, PartiallyScanned
index 628b085..754b0ac 100644 (file)
@@ -206,7 +206,6 @@ class ContentObjectRenderer
         'wrapAlign' => 'align',
         'wrapAlign.' => 'array',
         'typolink.' => 'array',
-        'TCAselectItem.' => 'array',
         'wrap' => 'wrap',
         'wrap.' => 'array',
         'noTrimWrap' => 'wrap',
@@ -2607,22 +2606,6 @@ class ContentObjectRenderer
     }
 
     /**
-     * TCAselectItem
-     * Returns a list of options available for a given field in the DB which has to be of the type select
-     *
-     * @param string $content Input value undergoing processing in this function.
-     * @param array $conf stdWrap properties for TCAselectItem.
-     * @return string The processed input value
-     */
-    public function stdWrap_TCAselectItem($content = '', $conf = [])
-    {
-        if (is_array($conf['TCAselectItem.'])) {
-            $content = $this->TCAlookup($content, $conf['TCAselectItem.']);
-        }
-        return $content;
-    }
-
-    /**
      * wrap
      * This is the "mother" of all wraps
      * Third of a set of different wraps which will be applied in a certain order before or after other functions that modify the content
@@ -5098,40 +5081,6 @@ class ContentObjectRenderer
         return $key;
     }
 
-    /**
-     * Looks up the incoming value in the defined TCA configuration
-     * Works only with TCA-type 'select' and options defined in 'items'
-     *
-     * @param mixed $inputValue Comma-separated list of values to look up
-     * @param array $conf TS-configuration array, see TSref for details
-     * @return string String of translated values, separated by $delimiter. If no matches were found, the input value is simply returned.
-     * @todo It would be nice it this function basically looked up any type of value, db-relations etc.
-     */
-    public function TCAlookup($inputValue, $conf)
-    {
-        $table = $conf['table'];
-        $field = $conf['field'];
-        $delimiter = $conf['delimiter'] ? $conf['delimiter'] : ' ,';
-        if (is_array($GLOBALS['TCA'][$table]) && is_array($GLOBALS['TCA'][$table]['columns'][$field]) && is_array($GLOBALS['TCA'][$table]['columns'][$field]['config']['items'])) {
-            $tsfe = $this->getTypoScriptFrontendController();
-            $values = GeneralUtility::trimExplode(',', $inputValue);
-            $output = [];
-            foreach ($values as $value) {
-                // Traverse the items-array...
-                foreach ($GLOBALS['TCA'][$table]['columns'][$field]['config']['items'] as $item) {
-                    // ... and return the first found label where the value was equal to $key
-                    if ((string)$item[1] === trim($value)) {
-                        $output[] = $tsfe->sL($item[0]);
-                    }
-                }
-            }
-            $returnValue = implode($delimiter, $output);
-        } else {
-            $returnValue = $inputValue;
-        }
-        return $returnValue;
-    }
-
     /***********************************************
      *
      * Link functions (typolink)
@@ -6423,8 +6372,8 @@ class ContentObjectRenderer
         foreach ($properties as $property) {
             $conf[$property] = trim(
                 isset($conf[$property . '.'])
-                ? $this->stdWrap($conf[$property], $conf[$property . '.'])
-                : $conf[$property]
+                    ? $this->stdWrap($conf[$property], $conf[$property . '.'])
+                    : $conf[$property]
             );
             if ($conf[$property] === '') {
                 unset($conf[$property]);
index 64e5fbc..d3c15a5 100644 (file)
@@ -3486,7 +3486,7 @@ class ContentObjectRendererTest extends \TYPO3\TestingFramework\Core\Unit\UnitTe
             }
         }
         $this->assertSame(1, $notCallable);
-        $this->assertSame(86, $callable);
+        $this->assertSame(85, $callable);
     }
 
     /**
@@ -3533,7 +3533,7 @@ class ContentObjectRendererTest extends \TYPO3\TestingFramework\Core\Unit\UnitTe
             }
         }
         $this->assertSame($expectExceptions, $exceptions);
-        $this->assertSame(86, $count);
+        $this->assertSame(85, $count);
     }
 
     /***************************************************************************
@@ -3680,74 +3680,6 @@ class ContentObjectRendererTest extends \TYPO3\TestingFramework\Core\Unit\UnitTe
     }
 
     /**
-     * Data provider ofr stdWrap_TCAselectItem.
-     *
-     * @return array [$expect, $content, $conf, $times, $will]
-     */
-    public function stdWrap_TCAselectItemDataProvider()
-    {
-        $content = $this->getUniqueId('content');
-        $array = [$this->getUniqueId('TCAselectItem.')];
-        $will = $this->getUniqueId('will');
-        return [
-            'empty conf' => [
-                $content, $content, [], 0, $will
-            ],
-            'no array' => [
-                $content, $content, ['TCAselectItem.' => true], 0, $will
-            ],
-            'empty array' => [
-                $will, $content, ['TCAselectItem.' => []], 1, $will
-            ],
-            'array' => [
-                $will, $content, ['TCAselectItem.' => $array], 1, $will
-            ]
-        ];
-    }
-
-    /**
-     * Check that stdWrap_TCAselectItem works properly.
-     *
-     * Show:
-     *
-     * - Checks if $conf['TCAselectItem'] is an array.
-     * - If NO:
-     *   - Returns $content as is.
-     * - If YES:
-     *   - Delegates to method TCAlookup.
-     *   - Parameter 1 is $content.
-     *   - Parameter 2 is $conf['TCAselectItem.'].
-     *   - Returns the return value.
-     *
-     *  @test
-     *  @dataProvider stdWrap_TCAselectItemDataProvider
-     *  @param mixed $expect The expected output.
-     *  @param mixed $content The the given input.
-     *  @param mixed $conf The the given configuration.
-     *  @param int $times Times TCAlookup is called.
-     *  @param string $will Return value of TCAlookup.
-     */
-    public function stdWrap_TCAselectItem(
-        $expect,
-        $content,
-        $conf,
-        $times,
-        $will
-    ) {
-        $subject = $this->getMockBuilder(ContentObjectRenderer::class)
-            ->setMethods(['TCAlookup'])->getMock();
-        $subject
-            ->expects($this->exactly($times))
-            ->method('TCAlookup')
-            ->with($content, $conf['TCAselectItem.'])
-            ->willReturn($will);
-        $this->assertSame(
-            $expect,
-            $subject->stdWrap_TCAselectItem($content, $conf)
-        );
-    }
-
-    /**
      * @return array
      */
     public function stdWrap_addPageCacheTagsAddsPageTagsDataProvider()
index 2a13520..d18ce5c 100644 (file)
@@ -1287,7 +1287,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-81217-TSFE-relatedLanguageMethods.rst',
-        ]
+        ],
     ],
     'TYPO3\CMS\Core\Page\PageRenderer->addMetaTag' => [
         'numberOfMandatoryArguments' => 1,
@@ -1507,4 +1507,18 @@ return [
             'Breaking-81460-DeprecateGetByTagOnCacheFrontends.rst',
         ],
     ],
+    'TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->stdWrap_TCAselectItem' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Breaking-83122-RemovedStdWrapOptionTCAselectItem.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->TCAlookup' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Breaking-83122-RemovedStdWrapOptionTCAselectItem.rst',
+        ],
+    ],
 ];
index ada2594..f2ccb93 100644 (file)
@@ -6204,17 +6204,6 @@ Value must be set and properties are those of ->HTMLparser.
                        <default><![CDATA[
 ]]></default>
                </property>
-               <property name="TCAselectItem" type="array">
-                       <description><![CDATA[Resolves a comma separated list of values into the TCA item representation.
-
-.table (string): The Table to look up
-.field (string): The field to resolve
-.delimiter (string): Delimiter for concatenating multiple elements.
-
-Notice: Currently this works only with TCA fields of type "select" which are not database relations.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
                <property name="addParams" type="addParams">
                        <description><![CDATA[Lets you add tag-parameters to the content if the content is a tag!]]></description>
                        <default><![CDATA[