[BUGFIX] TCA:Suggest wizard doesn't work for select with maxitems=1 70/4270/13
authorStanislas Rolland <typo3@sjbr.ca>
Mon, 25 Feb 2013 07:39:07 +0000 (02:39 -0500)
committerStefan Neufeind <typo3.neufeind@speedpartner.de>
Sun, 5 May 2013 12:08:17 +0000 (14:08 +0200)
For select fields with maxitems = 1, the suggest wizard does
display, but you cannot select an item and transfer it to the
selected list. Once you change it to maxitems > 1 everything
works as expected.

Solution: Avoid maxitems = 1 (unique) select fields being rendered as
multiple selector boxes and add JS that is required whenever a suggest
wizard is rendered.

Fixes: #23789
Releases: 4.5, 4.7, 6.0, 6.1, 6.2
Change-Id: I1847c9dbf2fe3b4072743857bb84b8e6b112598b
Reviewed-on: https://review.typo3.org/4270
Reviewed-by: Stefan Neufeind
Tested-by: Stefan Neufeind
typo3/sysext/backend/Classes/Form/FormEngine.php

index f4d4d39..212a4ce 100644 (file)
@@ -3680,7 +3680,7 @@ function ' . $evalData . '(value) {
                // Create selector box of the options
                $sSize = $params['autoSizeMax'] ? MathUtility::forceIntegerInRange($itemArrayC + 1, MathUtility::forceIntegerInRange($params['size'], 1), $params['autoSizeMax']) : $params['size'];
                if (!$selector) {
-                       $isMultiple = $params['size'] != 1;
+                       $isMultiple = $params['maxitems'] != 1 && $params['size'] != 1;
                        $selector = '<select id="' . uniqid('tceforms-multiselect-') . '" ' . ($params['noList'] ? 'style="display: none"' : 'size="' . $sSize . '"' . $this->insertDefStyle('group', 'tceforms-multiselect')) . ($isMultiple ? ' multiple="multiple"' : '') . ' name="' . $fName . '_list" ' . $onFocus . $params['style'] . $disabled . '>' . implode('', $opt) . '</select>';
                }
                $icons = array(
@@ -5777,8 +5777,8 @@ function ' . $evalData . '(value) {
        public function printNeededJSFunctions() {
                // JS evaluation:
                $out = $this->JSbottom($this->formName);
-               // Integrate JS functions for the element browser if such fields or IRRE fields were processed:
-               if ($this->printNeededJS['dbFileIcons'] || $this->inline->inlineCount) {
+               // Integrate JS functions for the element browser if such fields or IRRE fields or suggest wizard were processed:
+               if ($this->printNeededJS['dbFileIcons'] > 0 || $this->inline->inlineCount > 0 || $this->suggest->suggestCount > 0) {
                        $out .= '
 
 
@@ -5789,7 +5789,7 @@ function ' . $evalData . '(value) {
 
                        <script type="text/javascript">
                                /*<![CDATA[*/
-                       ' . $this->dbFileCon(('document.' . $this->formName)) . '
+                       ' . $this->dbFileCon('document.' . $this->formName) . '
                                /*]]>*/
                        </script>';
                }