[TASK] Cleanup TCA select field configuration 54/43354/12
authorAlexander Stehlik <alexander.stehlik@gmail.com>
Tue, 15 Sep 2015 16:16:19 +0000 (18:16 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Mon, 5 Oct 2015 15:03:33 +0000 (17:03 +0200)
TCA select fields now require a "renderType" setting. Using select
without renderType and the "renderMode" setting is deprecated.

A TCA migration takes care of filling the renderType with the
correct values for existing configurations.

Resolves: #69822
Releases: master
Change-Id: I0d9537a031aad3d2c44849f7f50715cbcc6ee595
Reviewed-on: http://review.typo3.org/43354
Reviewed-by: Frank Nägler <frank.naegler@typo3.org>
Tested-by: Frank Nägler <frank.naegler@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
37 files changed:
typo3/sysext/backend/Classes/Form/NodeFactory.php
typo3/sysext/backend/Tests/Unit/Form/NodeFactoryTest.php
typo3/sysext/compatibility6/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/core/Classes/Category/CategoryRegistry.php
typo3/sysext/core/Classes/Migrations/TcaMigration.php
typo3/sysext/core/Configuration/TCA/be_groups.php
typo3/sysext/core/Configuration/TCA/be_users.php
typo3/sysext/core/Configuration/TCA/pages.php
typo3/sysext/core/Configuration/TCA/sys_category.php
typo3/sysext/core/Configuration/TCA/sys_collection.php
typo3/sysext/core/Configuration/TCA/sys_file.php
typo3/sysext/core/Configuration/TCA/sys_file_collection.php
typo3/sysext/core/Configuration/TCA/sys_file_metadata.php
typo3/sysext/core/Configuration/TCA/sys_file_reference.php
typo3/sysext/core/Configuration/TCA/sys_file_storage.php
typo3/sysext/core/Configuration/TCA/sys_filemounts.php
typo3/sysext/core/Configuration/TCA/sys_language.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-69822-DeprecateSelectFieldTca.rst [new file with mode: 0644]
typo3/sysext/core/Tests/Unit/Migrations/TcaMigrationTest.php
typo3/sysext/css_styled_content/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/extbase/Configuration/TCA/Overrides/fe_groups.php
typo3/sysext/extbase/Configuration/TCA/Overrides/fe_users.php
typo3/sysext/filemetadata/Configuration/TCA/Overrides/sys_file_metadata.php
typo3/sysext/fluid_styled_content/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/frontend/Configuration/TCA/fe_groups.php
typo3/sysext/frontend/Configuration/TCA/fe_users.php
typo3/sysext/frontend/Configuration/TCA/pages_language_overlay.php
typo3/sysext/frontend/Configuration/TCA/sys_domain.php
typo3/sysext/frontend/Configuration/TCA/sys_template.php
typo3/sysext/frontend/Configuration/TCA/tt_content.php
typo3/sysext/indexed_search/Configuration/TCA/index_config.php
typo3/sysext/rtehtmlarea/Configuration/TCA/tx_rtehtmlarea_acronym.php
typo3/sysext/rtehtmlarea/ext_tables.php
typo3/sysext/sys_action/Configuration/TCA/sys_action.php
typo3/sysext/sys_note/Configuration/TCA/sys_note.php
typo3/sysext/workspaces/Configuration/TCA/sys_workspace.php
typo3/sysext/workspaces/Configuration/TCA/sys_workspace_stage.php

index 663bb83..07a1ffb 100644 (file)
@@ -96,23 +96,6 @@ class NodeFactory {
                }
                $type = $data['renderType'];
 
-               if ($type === 'select') {
-                       $config = $data['parameterArray']['fieldConf']['config'];
-                       $maxItems = (int)$config['maxitems'];
-                       if (isset($config['renderMode']) && $config['renderMode'] === 'tree') {
-                               $type = 'selectTree';
-                       } elseif ($maxItems <= 1) {
-                               $type = 'selectSingle';
-                       } elseif (isset($config['renderMode']) && $config['renderMode'] === 'singlebox') {
-                               $type = 'selectSingleBox';
-                       } elseif (isset($config['renderMode']) && $config['renderMode'] === 'checkbox') {
-                               $type = 'selectCheckBox';
-                       } else {
-                               // @todo: This "catch all" else should be removed to allow registration of own renderTypes for type=select
-                               $type = 'selectMultipleSideBySide';
-                       }
-               }
-
                $className = isset($this->nodeTypes[$type]) ? $this->nodeTypes[$type] : $this->nodeTypes['unknown'];
 
                if (!empty($this->nodeResolver[$type])) {
index 6902dba..0b06c01 100644 (file)
@@ -279,14 +279,8 @@ class NodeFactoryTest extends UnitTestCase {
         */
        public function createReturnsInstanceOfSelectTreeElementIfNeeded() {
                $data = array(
-                       'renderType' => 'select',
-                       'parameterArray' => array(
-                               'fieldConf' => array(
-                                       'config' => array(
-                                               'renderMode' => 'tree',
-                                       ),
-                               ),
-                       ),
+                       'type' => 'select',
+                       'renderType' => 'selectTree',
                );
                $subject = new NodeFactory();
                $this->assertInstanceOf(Element\SelectTreeElement::class, $subject->create($data));
@@ -297,48 +291,11 @@ class NodeFactoryTest extends UnitTestCase {
         */
        public function createReturnsInstanceOfSelectSingleElementIfNeeded() {
                $data = array(
-                       'renderType' => 'select',
-                       'parameterArray' => array(
-                               'fieldConf' => array(
-                                       'config' => array(
-                                               'maxitems' => 1,
-                                       ),
-                               ),
-                       ),
-               );
-               $subject = new NodeFactory();
-               $this->assertInstanceOf(Element\SelectSingleElement::class, $subject->create($data));
-       }
-
-       /**
-        * @test
-        */
-       public function createReturnsInstanceOfSelectSingleElementIfSelectboxIsConfiguredButMaxitemsIsOne() {
-               $data = array(
-                       'renderType' => 'select',
-                       'parameterArray' => array(
-                               'fieldConf' => array(
-                                       'config' => array(
-                                               'renderMode' => 'singlebox',
-                                               'maxitems' => 1,
-                                       ),
-                               ),
-                       ),
-               );
-               $subject = new NodeFactory();
-               $this->assertInstanceOf(Element\SelectSingleElement::class, $subject->create($data));
-       }
-
-       /**
-        * @test
-        */
-       public function createReturnsInstanceOfSelectSingleElementIfCheckboxIsConfiguredButMaxitemsIsOne() {
-               $data = array(
-                       'renderType' => 'select',
+                       'type' => 'select',
+                       'renderType' => 'selectSingle',
                        'parameterArray' => array(
                                'fieldConf' => array(
                                        'config' => array(
-                                               'renderMode' => 'checkbox',
                                                'maxitems' => 1,
                                        ),
                                ),
@@ -351,62 +308,6 @@ class NodeFactoryTest extends UnitTestCase {
        /**
         * @test
         */
-       public function createReturnsInstanceOfSelectSingleBoxElementIfNeeded() {
-               $data = array(
-                       'renderType' => 'select',
-                       'parameterArray' => array(
-                               'fieldConf' => array(
-                                       'config' => array(
-                                               'renderMode' => 'singlebox',
-                                               'maxitems' => 2,
-                                       ),
-                               ),
-                       ),
-               );
-               $subject = new NodeFactory();
-               $this->assertInstanceOf(Element\SelectSingleBoxElement::class, $subject->create($data));
-       }
-
-       /**
-        * @test
-        */
-       public function createReturnsInstanceOfSelectCheckBoxElementIfNeeded() {
-               $data = array(
-                       'renderType' => 'select',
-                       'parameterArray' => array(
-                               'fieldConf' => array(
-                                       'config' => array(
-                                               'renderMode' => 'checkbox',
-                                               'maxitems' => 2,
-                                       ),
-                               ),
-                       ),
-               );
-               $subject = new NodeFactory();
-               $this->assertInstanceOf(Element\SelectCheckBoxElement::class, $subject->create($data));
-       }
-
-       /**
-        * @test
-        */
-       public function createReturnsInstanceOfSelectMultipleSideBySideElementIfNeeded() {
-               $data = array(
-                       'renderType' => 'select',
-                       'parameterArray' => array(
-                               'fieldConf' => array(
-                                       'config' => array(
-                                               'maxitems' => 2,
-                                       ),
-                               ),
-                       ),
-               );
-               $subject = new NodeFactory();
-               $this->assertInstanceOf(Element\SelectMultipleSideBySideElement::class, $subject->create($data));
-       }
-
-       /**
-        * @test
-        */
        public function createInstantiatesNewRegisteredElement() {
                $data = array('renderType' => 'foo');
                $GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'] = array(
index bbc8022..328c617 100644 (file)
@@ -26,6 +26,7 @@ $extraContentColumns = array(
                'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagecaption_position',
                'config' => array(
                        'type' => 'select',
+                       'renderType' => 'selectSingle',
                        'items' => array(
                                array(
                                        'LLL:EXT:lang/locallang_general.xlf:LGL.default_value',
@@ -76,6 +77,7 @@ $extraContentColumns = array(
                'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_frames',
                'config' => array(
                        'type' => 'select',
+                       'renderType' => 'selectSingle',
                        'items' => array(
                                array(
                                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_frames.I.0',
index c4bd4a0..dcec11d 100644 (file)
@@ -386,6 +386,7 @@ class CategoryRegistry implements SingletonInterface {
                // Forges a new field, default name is "categories"
                $fieldConfiguration = array(
                        'type' => 'select',
+                       'renderType' => 'selectTree',
                        'foreign_table' => 'sys_category',
                        'foreign_table_where' => ' AND sys_category.sys_language_uid IN (-1, 0) ORDER BY sys_category.sorting ASC',
                        'MM' => 'sys_category_record_mm',
@@ -397,7 +398,6 @@ class CategoryRegistry implements SingletonInterface {
                        'size' => 10,
                        'autoSizeMax' => 50,
                        'maxitems' => 9999,
-                       'renderMode' => 'tree',
                        'treeConfig' => array(
                                'parentField' => 'parent',
                                'appearance' => array(
index dc26224..36cfc89 100644 (file)
@@ -48,6 +48,7 @@ class TcaMigration {
                $tca = $this->migrateExtAndSysextPathToEXTPath($tca);
                $tca = $this->migrateIconsInOptionTags($tca);
                $tca = $this->migrateIconfileRelativePathOrFilenameOnlyToExtReference($tca);
+               $tca = $this->migrateSelectFieldRenderType($tca);
                // @todo: if showitem/defaultExtras wizards[xy] is migrated to columnsOverrides here, enableByTypeConfig could be dropped
                return $tca;
        }
@@ -495,4 +496,64 @@ class TcaMigration {
                return $tca;
        }
 
+       /**
+        * Migrate "type=select" with "renderMode=[tree|singlebox|checkbox]" to "renderType=[selectTree|selectSingleBox|selectCheckBox]".
+        * This migration also take care of "maxitems" settings and set "renderType=[selectSingle|selectMultipleSideBySide]" if no other
+        * renderType is already set.
+        *
+        * @param array $tca
+        * @return array
+        */
+       public function migrateSelectFieldRenderType(array $tca) {
+               $newTca = $tca;
+
+               foreach ($newTca as $table => &$tableDefinition) {
+
+                       if (empty($tableDefinition['columns'])) {
+                               continue;
+                       }
+
+                       foreach ($tableDefinition['columns'] as $columnName => &$columnDefinition) {
+                               // Only handle select fields.
+                               if (empty($columnDefinition['config']['type']) || $columnDefinition['config']['type'] !== 'select') {
+                                       continue;
+                               }
+                               // Do not handle field where the render type is set.
+                               if (!empty($columnDefinition['config']['renderType'])) {
+                                       continue;
+                               }
+
+                               $tableColumnInfo = 'table "' . $table . '" and column "' . $columnName . '"';
+                               $this->messages[] = 'Using select fields without the "renderType" setting is deprecated in ' . $tableColumnInfo;
+
+                               $columnConfig = &$columnDefinition['config'];
+                               if (!empty($columnConfig['renderMode'])) {
+                                       $this->messages[] = 'The "renderMode" setting for select fields is deprecated. Please use "renderType" instead in ' . $tableColumnInfo;
+                                       switch ($columnConfig['renderMode']) {
+                                               case 'tree':
+                                                       $columnConfig['renderType'] = 'selectTree';
+                                                       break;
+                                               case 'singlebox':
+                                                       $columnConfig['renderType'] = 'selectSingleBox';
+                                                       break;
+                                               case 'checkbox':
+                                                       $columnConfig['renderType'] = 'selectCheckBox';
+                                                       break;
+                                               default:
+                                                       $this->messages[] = 'The render mode ' . $columnConfig['renderMode'] . ' is invalid for the select field in ' . $tableColumnInfo;
+                                       }
+                                       continue;
+                               }
+
+                               $maxItems = !empty($columnConfig['maxitems']) ? (int)$columnConfig['maxitems'] : 1;
+                               if ($maxItems <= 1) {
+                                       $columnConfig['renderType'] = 'selectSingle';
+                               } else {
+                                       $columnConfig['renderType'] = 'selectMultipleSideBySide';
+                               }
+                       }
+               }
+
+               return $newTca;
+       }
 }
index c4b3ccd..ca63a8e 100644 (file)
@@ -56,6 +56,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:file_mountpoints',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'foreign_table' => 'sys_filemounts',
                                'foreign_table_where' => ' AND sys_filemounts.pid=0 ORDER BY sys_filemounts.title',
                                'size' => '3',
@@ -105,6 +106,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_groups.fileoper_perms',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'items' => array(
                                        array('LLL:EXT:lang/locallang_tca.xlf:be_groups.file_permissions.folder', '--div--', 'apps-filetree-folder-default'),
                                        array('LLL:EXT:lang/locallang_tca.xlf:be_groups.file_permissions.folder_read', 'readFolder', 'apps-filetree-folder-default'),
@@ -126,7 +128,6 @@ return array(
                                        array('LLL:EXT:lang/locallang_tca.xlf:be_groups.fileoper_perms_unzip', 'unzipFile', 'mimetypes-other-other'),
                                        array('LLL:EXT:lang/locallang_tca.xlf:be_groups.file_permissions.files_delete', 'deleteFile', 'mimetypes-other-other')
                                ),
-                               'renderMode' => 'checkbox',
                                'size' => 17,
                                'maxitems' => 17,
                                'default' => 'readFolder,writeFolder,addFolder,renameFolder,moveFolder,deleteFolder,readFile,writeFile,addFile,renameFile,replaceFile,moveFile,files_copy,deleteFile'
@@ -146,71 +147,71 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_groups.pagetypes_select',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'pagetypes',
                                'size' => '5',
                                'autoSizeMax' => 50,
                                'maxitems' => 20,
-                               'renderMode' => 'checkbox',
                        )
                ),
                'tables_modify' => array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_groups.tables_modify',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'tables',
                                'size' => '5',
                                'autoSizeMax' => 50,
                                'maxitems' => 100,
-                               'renderMode' => 'checkbox',
                        )
                ),
                'tables_select' => array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_groups.tables_select',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'tables',
                                'size' => '5',
                                'autoSizeMax' => 50,
                                'maxitems' => 100,
-                               'renderMode' => 'checkbox',
                        )
                ),
                'non_exclude_fields' => array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_groups.non_exclude_fields',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'exclude',
                                'size' => '25',
                                'maxitems' => 1000,
                                'autoSizeMax' => 50,
-                               'renderMode' => 'checkbox'
                        )
                ),
                'explicit_allowdeny' => array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_groups.explicit_allowdeny',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'explicitValues',
                                'maxitems' => 1000,
-                               'renderMode' => 'checkbox'
                        )
                ),
                'allowed_languages' => array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:allowed_languages',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'languages',
                                'maxitems' => 1000,
-                               'renderMode' => 'checkbox'
                        )
                ),
                'custom_options' => array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_groups.custom_options',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'custom',
                                'maxitems' => 1000,
-                               'renderMode' => 'checkbox'
                        )
                ),
                'hidden' => array(
@@ -234,11 +235,11 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:userMods',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'modListGroup',
                                'size' => '5',
                                'autoSizeMax' => 50,
                                'maxitems' => 100,
-                               'renderMode' => 'checkbox',
                        )
                ),
                'description' => array(
@@ -271,6 +272,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_groups.subgroup',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'foreign_table' => 'be_groups',
                                'foreign_table_where' => 'AND NOT(be_groups.uid = ###THIS_UID###) AND be_groups.hidden=0 ORDER BY be_groups.title',
                                'size' => '5',
@@ -282,9 +284,9 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:category_perms',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectTree',
                                'foreign_table' => 'sys_category',
                                'foreign_table_where' => ' AND (sys_category.sys_language_uid = 0 OR sys_category.l10n_parent = 0) ORDER BY sys_category.sorting',
-                               'renderMode' => 'tree',
                                'treeConfig' => array(
                                        'parentField' => 'parent',
                                        'appearance' => array(
index 45665e5..0882578 100644 (file)
@@ -62,6 +62,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_users.usergroup',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'foreign_table' => 'be_groups',
                                'foreign_table_where' => 'ORDER BY be_groups.title',
                                'size' => '5',
@@ -146,6 +147,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_users.options_file_mounts',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'foreign_table' => 'sys_filemounts',
                                'foreign_table_where' => ' AND sys_filemounts.pid=0 ORDER BY sys_filemounts.title',
                                'size' => '3',
@@ -244,6 +246,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_groups.fileoper_perms',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'items' => array(
                                        array('LLL:EXT:lang/locallang_tca.xlf:be_groups.file_permissions.folder', '--div--', 'apps-filetree-folder-default'),
                                        array('LLL:EXT:lang/locallang_tca.xlf:be_groups.file_permissions.folder_read', 'readFolder', 'apps-filetree-folder-default'),
@@ -265,7 +268,6 @@ return array(
                                        array('LLL:EXT:lang/locallang_tca.xlf:be_groups.fileoper_perms_unzip', 'unzipFile', 'mimetypes-other-other'),
                                        array('LLL:EXT:lang/locallang_tca.xlf:be_groups.file_permissions.files_delete', 'deleteFile', 'mimetypes-other-other')
                                ),
-                               'renderMode' => 'checkbox',
                                'size' => 17,
                                'maxitems' => 17,
                                'default' => 'readFolder,writeFolder,addFolder,renameFolder,moveFolder,deleteFolder,readFile,writeFile,addFile,renameFile,replaceFile,moveFile,files_copy,deleteFile'
@@ -306,6 +308,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:be_users.lang',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('English', '')
                                )
@@ -315,20 +318,20 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:userMods',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'modListUser',
                                'size' => '5',
                                'autoSizeMax' => 50,
                                'maxitems' => '100',
-                               'renderMode' => 'checkbox',
                        )
                ),
                'allowed_languages' => array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:allowed_languages',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'special' => 'languages',
                                'maxitems' => '1000',
-                               'renderMode' => 'checkbox'
                        )
                ),
                'TSconfig' => array(
@@ -360,9 +363,9 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:category_perms',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectTree',
                                'foreign_table' => 'sys_category',
                                'foreign_table_where' => ' AND (sys_category.sys_language_uid = 0 OR sys_category.l10n_parent = 0) ORDER BY sys_category.sorting',
-                               'renderMode' => 'tree',
                                'treeConfig' => array(
                                        'parentField' => 'parent',
                                        'appearance' => array(
index 107f654..0e3a123 100644 (file)
@@ -69,6 +69,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.doktype.div.page',
@@ -221,6 +222,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.layout',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:lang/locallang_general.xlf:LGL.default_value',
@@ -247,6 +249,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.url_scheme',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:lang/locallang_general.xlf:LGL.default_value',
@@ -269,6 +272,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.fe_group',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'size' => 7,
                                'maxitems' => 20,
                                'items' => array(
@@ -370,6 +374,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:lang/locallang_core.xlf:labels.automatic',
@@ -421,6 +426,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.cache_timeout',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:lang/locallang_general.xlf:LGL.default_value',
@@ -530,6 +536,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.shortcut_mode',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.shortcut_mode.I.0',
@@ -710,6 +717,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.module',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                '',
@@ -731,6 +739,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.fe_login_mode',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.fe_login_mode.enable',
@@ -773,6 +782,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.backend_layout_formlabel',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', ''),
                                        array('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.backend_layout.none', -1)
@@ -788,6 +798,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.backend_layout_next_level_formlabel',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', ''),
                                        array('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.backend_layout.none', -1)
@@ -802,6 +813,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tsconfig_includes',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'size' => 10,
                                'maxitems' => 100,
                                'items' => array(),
index e6ad5da..2647644 100644 (file)
@@ -56,6 +56,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => array(
@@ -71,6 +72,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0)
                                ),
@@ -143,7 +145,7 @@ return array(
                                'minitems' => 0,
                                'maxitems' => 1,
                                'type' => 'select',
-                               'renderMode' => 'tree',
+                               'renderType' => 'selectTree',
                                'foreign_table' => 'sys_category',
                                'foreign_table_where' => ' AND sys_category.sys_language_uid IN (-1,0) ORDER BY sys_category.sorting ASC',
                                'treeConfig' => array(
index efaa53a..3e13ddb 100644 (file)
@@ -46,6 +46,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => array(
@@ -61,6 +62,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0)
                                ),
@@ -114,6 +116,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.fe_group',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0),
                                        array('LLL:EXT:lang/locallang_general.xlf:LGL.hide_at_login', -1),
@@ -128,6 +131,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_collection.table_name',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'special' => 'tables'
                        )
                ),
@@ -168,6 +172,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_collection.type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:lang/locallang_tca.xlf:sys_collection.type.static', 'static')
                                ),
index cdc673a..fb4e715 100644 (file)
@@ -39,6 +39,7 @@ return array(
                        'config' => array(
                                'readOnly' => 1,
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0)
                                ),
@@ -74,6 +75,7 @@ return array(
                        'config' => array(
                                'readOnly' => 1,
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'size' => '1',
                                'items' => array(
                                        array('LLL:EXT:lang/locallang_tca.xlf:sys_file.type.unknown', 0),
index 993b8b9..e0d5b59 100644 (file)
@@ -45,6 +45,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => array(
@@ -60,6 +61,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0)
                                ),
@@ -113,6 +115,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_file_collection.type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:lang/locallang_tca.xlf:sys_file_collection.type.0', 'static'),
                                        array('LLL:EXT:lang/locallang_tca.xlf:sys_file_collection.type.1', 'folder'),
@@ -139,6 +142,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_file_collection.storage',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0)
                                ),
@@ -154,6 +158,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_file_collection.folder',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(),
                                'itemsProcFunc' => 'typo3/sysext/core/Classes/Resource/Service/UserFileMountService.php:TYPO3\CMS\Core\Resource\Service\UserFileMountService->renderTceformsSelectDropdown',
                        )
@@ -173,7 +178,7 @@ return array(
                                'minitems' => 0,
                                'maxitems' => 1,
                                'type' => 'select',
-                               'renderMode' => 'tree',
+                               'renderType' => 'selectTree',
                                'foreign_table' => 'sys_category',
                                'foreign_table_where' => ' AND sys_category.sys_language_uid IN (-1,0) ORDER BY sys_category.sorting ASC',
                                'treeConfig' => array(
index 39497af..c1d7af6 100644 (file)
@@ -33,6 +33,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => array(
@@ -48,6 +49,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0)
                                ),
@@ -84,6 +86,7 @@ return array(
                        'config' => array(
                                'readOnly' => 1,
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_file',
                                'minitems' => 1,
                                'maxitems' => 1,
index 2481c77..484953d 100644 (file)
@@ -54,6 +54,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => array(
@@ -69,6 +70,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0)
                                ),
index f7ee73c..01bad9d 100644 (file)
@@ -106,6 +106,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_file_storage.driver',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(),
                                'default' => 'Local',
                                'onChange' => 'reload'
index 741ecfb..2d2f50c 100644 (file)
@@ -52,6 +52,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.baseStorage',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_file_storage',
                                'size' => 1,
                                'maxitems' => 1
@@ -61,6 +62,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.folder',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(),
                                'itemsProcFunc' => 'typo3/sysext/core/Classes/Resource/Service/UserFileMountService.php:TYPO3\CMS\Core\Resource\Service\UserFileMountService->renderTceformsSelectDropdown',
                        )
index 75ac095..4ede746 100644 (file)
@@ -43,6 +43,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_language.language_isocode',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'size' => 1,
                                'minitems' => 0,
                                'maxitems' => 1,
@@ -56,6 +57,7 @@ return array(
                        'displayCond' => 'EXT:static_info_tables:LOADED:true',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0)
                                ),
@@ -70,6 +72,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_language.flag',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0, ''),
                                        array('multiple', 'multiple', 'flags-multiple'),
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-69822-DeprecateSelectFieldTca.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-69822-DeprecateSelectFieldTca.rst
new file mode 100644 (file)
index 0000000..b744c24
--- /dev/null
@@ -0,0 +1,66 @@
+=============================================================
+Deprecation: #69822 - Deprecate TCA settings of select fields
+=============================================================
+
+Description
+===========
+
+Using the TCA field type ``select`` without specifying a valid ``renderType`` is deprecated.
+
+Additionally the usage of ``renderMode`` for select fields is deprecated.
+
+These ``renderType`` settings are available:
+
+
+.. container:: table-row
+
+   Key
+         renderType
+
+   Datatype
+         string
+
+   Description
+        This setting specifies how the select field should be displayed. Available options are:
+
+        - ``selectSingle`` - Normal select field for selecting a single value.
+        - ``selectSingleBox`` - Normal select field for selecting multiple values.
+        - ``selectCheckBox`` - List of checkboxes for selecting muliple values.
+        - ``selectMultipleSideBySide`` - Two select fields, items can be selected from the right
+          field, selected items are displayed in the left select.
+        - ``selectTree`` - A tree for selecting hierarchical data.
+
+   Scope
+         Display
+
+
+'renderType' => 'selectMultipleSideBySide',
+'renderType' => 'selectCheckBox',
+'renderType' => 'selectSingle',
+'renderType' => 'selectSingleBox',
+'renderType' => 'selectTree',
+
+.. note::
+
+            If a field has no ``renderType`` set but ``maxitems`` is set, the migration will set
+            ``renderType`` to ``selectSingle`` in case of ``maxitems`` is <= 1 otherwise ``renderType``
+            is set to ``selectMultipleSideBySide``
+
+
+Impact
+======
+
+The old TCA settings can still be used. A migration handles the update of the settings.
+
+
+Affected Installations
+======================
+
+All installations with extensions that configure TCA select fields in the old format.
+
+
+Migration
+=========
+
+Extension authors need to add the correct ``renderType`` setting to their select
+field definitions.
index 19d3d86..c2f373c 100644 (file)
@@ -474,6 +474,7 @@ class TcaMigrationTest extends UnitTestCase {
                                        'foo' => array(
                                                'config' => array(
                                                        'type' => 'select',
+                                                       'renderType' => 'selectSingle',
                                                        'items' => array(
                                                                array('foo', 0, 'EXT:myext/foo/bar.gif'),
                                                                array('bar', 1, 'EXT:myext/foo/bar.gif'),
@@ -513,6 +514,7 @@ class TcaMigrationTest extends UnitTestCase {
                                        'foo' => array(
                                                'config' => array(
                                                        'type' => 'select',
+                                                       'renderType' => 'selectSingle',
                                                        'items' => array(
                                                                array('foo', 0, 'EXT:t3skin/icons/gfx/i/tt_content.gif'),
                                                        ),
@@ -548,6 +550,7 @@ class TcaMigrationTest extends UnitTestCase {
                                        'foo' => array(
                                                'config' => array(
                                                        'type' => 'select',
+                                                       'renderType' => 'selectSingle',
                                                ),
                                        ),
                                ),
@@ -623,4 +626,190 @@ class TcaMigrationTest extends UnitTestCase {
                $subject = new TcaMigration();
                $this->assertEquals($expected, $subject->migrate($input));
        }
-}
\ No newline at end of file
+
+       /**
+        * @test
+        */
+       public function migrateSelectFieldRenderType() {
+               $input = [
+                       'aTable-do-not-migrate-because-renderType-is-set' => [
+                               'columns' => [
+                                       'a-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderType' => 'fooBar'
+                                               ]
+                                       ]
+                               ],
+                       ],
+                       'aTable-do-migrate-because-renderType-is-not-set' => [
+                               'columns' => [
+                                       'a-tree-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'tree'
+                                               ]
+                                       ],
+                                       'a-singlebox-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'singlebox'
+                                               ]
+                                       ],
+                                       'a-checkbox-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'checkbox'
+                                               ]
+                                       ],
+                                       'an-unknown-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'unknown'
+                                               ]
+                                       ],
+                                       'a-maxitems-column-not-set' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                               ]
+                                       ],
+                                       'a-maxitems-column-0' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'maxitems' => '0'
+                                               ]
+                                       ],
+                                       'a-maxitems-column-1' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'maxitems' => '1'
+                                               ]
+                                       ],
+                                       'a-maxitems-column-2' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'maxitems' => '2'
+                                               ]
+                                       ],
+                                       'a-tree-column-with-maxitems' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'tree',
+                                                       'maxitems' => '1'
+                                               ]
+                                       ],
+                                       'a-singlebox-column-with-maxitems' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'singlebox',
+                                                       'maxitems' => '1'
+                                               ]
+                                       ],
+                                       'a-checkbox-column-with-maxitems' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'checkbox',
+                                                       'maxitems' => '1'
+                                               ]
+                                       ],
+                               ],
+                       ],
+               ];
+               $expected = [
+                       'aTable-do-not-migrate-because-renderType-is-set' => [
+                               'columns' => [
+                                       'a-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderType' => 'fooBar'
+                                               ]
+                                       ]
+                               ],
+                       ],
+                       'aTable-do-migrate-because-renderType-is-not-set' => [
+                               'columns' => [
+                                       'a-tree-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'tree',
+                                                       'renderType' => 'selectTree'
+                                               ]
+                                       ],
+                                       'a-singlebox-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'singlebox',
+                                                       'renderType' => 'selectSingleBox'
+                                               ]
+                                       ],
+                                       'a-checkbox-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'checkbox',
+                                                       'renderType' => 'selectCheckBox'
+                                               ]
+                                       ],
+                                       'an-unknown-column' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'unknown'
+                                               ]
+                                       ],
+                                       'a-maxitems-column-not-set' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderType' => 'selectSingle'
+                                               ]
+                                       ],
+                                       'a-maxitems-column-0' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'maxitems' => '0',
+                                                       'renderType' => 'selectSingle'
+                                               ]
+                                       ],
+                                       'a-maxitems-column-1' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'maxitems' => '1',
+                                                       'renderType' => 'selectSingle'
+                                               ]
+                                       ],
+                                       'a-maxitems-column-2' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'maxitems' => '2',
+                                                       'renderType' => 'selectMultipleSideBySide'
+                                               ]
+                                       ],
+                                       'a-tree-column-with-maxitems' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'tree',
+                                                       'renderType' => 'selectTree',
+                                                       'maxitems' => '1'
+                                               ]
+                                       ],
+                                       'a-singlebox-column-with-maxitems' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'singlebox',
+                                                       'renderType' => 'selectSingleBox',
+                                                       'maxitems' => '1'
+                                               ]
+                                       ],
+                                       'a-checkbox-column-with-maxitems' => [
+                                               'config' => [
+                                                       'type' => 'select',
+                                                       'renderMode' => 'checkbox',
+                                                       'renderType' => 'selectCheckBox',
+                                                       'maxitems' => '1'
+                                               ]
+                                       ],
+                               ],
+                       ],
+               ];
+               $subject = new TcaMigration();
+               $this->assertEquals($expected, $subject->migrate($input));
+       }
+}
index f19aba1..66f4a2f 100644 (file)
@@ -8,6 +8,7 @@ $extraContentColumns = array(
                'exclude' => TRUE,
                'config' => array(
                        'type' => 'select',
+                       'renderType' => 'selectSingle',
                        'items' => array(
                                array(
                                        'LLL:EXT:lang/locallang_general.xlf:LGL.default_value',
@@ -34,6 +35,7 @@ $extraContentColumns = array(
                'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression',
                'config' => array(
                        'type' => 'select',
+                       'renderType' => 'selectSingle',
                        'items' => array(
                                array(
                                        'LLL:EXT:lang/locallang_general.xlf:LGL.default_value',
@@ -123,6 +125,7 @@ $extraContentColumns = array(
                'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects',
                'config' => array(
                        'type' => 'select',
+                       'renderType' => 'selectSingle',
                        'items' => array(
                                array(
                                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.0',
@@ -184,6 +187,7 @@ $extraContentColumns = array(
                'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame',
                'config' => array(
                        'type' => 'select',
+                       'renderType' => 'selectSingle',
                        'items' => array(
                                array(
                                        '',
@@ -258,6 +262,7 @@ $extraContentColumns = array(
                'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor',
                'config' => array(
                        'type' => 'select',
+                       'renderType' => 'selectSingle',
                        'items' => array(
                                array(
                                        'LLL:EXT:lang/locallang_general.xlf:LGL.default_value',
index ee4fcb7..35da05a 100644 (file)
@@ -12,6 +12,7 @@ if (!isset($GLOBALS['TCA']['fe_groups']['ctrl']['type'])) {
                                'label' => 'LLL:EXT:extbase/Resources/Private/Language/locallang_db.xlf:fe_groups.tx_extbase_type',
                                'config' => array(
                                        'type' => 'select',
+                                       'renderType' => 'selectSingle',
                                        'items' => array(
                                                array('LLL:EXT:extbase/Resources/Private/Language/locallang_db.xlf:fe_groups.tx_extbase_type.0', '0'),
                                                array('LLL:EXT:extbase/Resources/Private/Language/locallang_db.xlf:fe_groups.tx_extbase_type.Tx_Extbase_Domain_Model_FrontendUserGroup', 'Tx_Extbase_Domain_Model_FrontendUserGroup')
index 66477c1..b22c9c3 100644 (file)
@@ -12,6 +12,7 @@ if (!isset($GLOBALS['TCA']['fe_users']['ctrl']['type'])) {
                                'label' => 'LLL:EXT:extbase/Resources/Private/Language/locallang_db.xlf:fe_users.tx_extbase_type',
                                'config' => array(
                                        'type' => 'select',
+                                       'renderType' => 'selectSingle',
                                        'items' => array(
                                                array('LLL:EXT:extbase/Resources/Private/Language/locallang_db.xlf:fe_users.tx_extbase_type.0', '0'),
                                                array('LLL:EXT:extbase/Resources/Private/Language/locallang_db.xlf:fe_users.tx_extbase_type.Tx_Extbase_Domain_Model_FrontendUser', 'Tx_Extbase_Domain_Model_FrontendUser')
index 8b2be94..98fdeb6 100644 (file)
@@ -111,6 +111,7 @@ $tca = array(
                        'label' => 'LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:sys_file_metadata.status',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:sys_file_metadata.status.1',
@@ -277,6 +278,7 @@ $tca = array(
                        'label' => 'LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:sys_file_metadata.ranking',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'minitems' => 1,
                                'maxitems' => 1,
                                'items' => array(
@@ -336,6 +338,7 @@ $tca = array(
                        'label' => 'LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:sys_file_metadata.unit',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', ''),
                                        array('px', 'px'),
@@ -368,6 +371,7 @@ $tca = array(
                        'label' => 'LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:sys_file_metadata.color_space',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', ''),
                                        array('RGB', 'RGB'),
@@ -437,6 +441,7 @@ $tca = array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.fe_group',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'size' => 5,
                                'maxitems' => 20,
                                'items' => array(
index 444961b..acb9548 100644 (file)
@@ -84,6 +84,7 @@ call_user_func(function() {
                        'label' => $languageFilePrefix . 'tt_content.bullets_type',
                        'config' => [
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => [
                                        [$languageFilePrefix . 'tt_content.bullets_type.0', 0],
                                        [$languageFilePrefix . 'tt_content.bullets_type.1', 1],
@@ -108,6 +109,7 @@ call_user_func(function() {
                        'label' => $languageFilePrefix . 'tt_content.uploads_type',
                        'config' => [
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => [
                                        [$languageFilePrefix . 'tt_content.uploads_type.0', 0],
                                        [$languageFilePrefix . 'tt_content.uploads_type.1', 1],
index 7ca95f9..4649669 100644 (file)
@@ -44,6 +44,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_groups.subgroup',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'foreign_table' => 'fe_groups',
                                'foreign_table_where' => 'AND NOT(fe_groups.uid = ###THIS_UID###) AND fe_groups.hidden=0 ORDER BY fe_groups.title',
                                'enableMultiSelectFilterTextfield' => TRUE,
index 82a7f9b..682152e 100644 (file)
@@ -46,6 +46,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_users.usergroup',
                        'config' => array(
                                'type' => 'select',
+                               'renterType' => 'selectMultipleSideBySide',
                                'foreign_table' => 'fe_groups',
                                'foreign_table_where' => 'ORDER BY fe_groups.title',
                                'enableMultiSelectFilterTextfield' => TRUE,
index 202f67a..ba27bda 100644 (file)
@@ -169,6 +169,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => $GLOBALS['TCA']['pages']['columns']['urltype']['config']['items'],
                                'default' => '1'
                        )
@@ -195,6 +196,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.shortcut_mode',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => $GLOBALS['TCA']['pages']['columns']['shortcut_mode']['config']['items'],
                                'default' => '0'
                        )
@@ -203,6 +205,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => array(), // no default language here, as the pages table is always the default language
index d8ab862..b808283 100644 (file)
@@ -46,6 +46,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_domain.redirectHttpStatusCode',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_domain.redirectHttpStatusCode.301', '301'),
                                        array('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_domain.redirectHttpStatusCode.302', '302'),
index 9c547c6..dc41c82 100644 (file)
@@ -129,6 +129,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_template.include_static_file',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'size' => 10,
                                'maxitems' => 100,
                                'items' => array(),
@@ -210,6 +211,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_template.static_file_mode',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_template.static_file_mode.0', '0'),
                                        array('LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_template.static_file_mode.1', '1'),
index 0970492..ac31a5e 100644 (file)
@@ -57,6 +57,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType.div.standard',
@@ -178,6 +179,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.fe_group',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'size' => 5,
                                'maxitems' => 20,
                                'items' => array(
@@ -204,6 +206,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => array(
@@ -225,6 +228,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                '',
@@ -241,6 +245,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.layout',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:lang/locallang_general.xlf:LGL.default_value',
@@ -267,6 +272,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:colPos',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'itemsProcFunc' => \TYPO3\CMS\Backend\View\BackendLayoutView::class . '->colPosListItemProcFunc',
                                'items' => array(
                                        array(
@@ -349,6 +355,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:lang/locallang_general.xlf:LGL.default_value',
@@ -508,6 +515,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageorient',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageorient.I.0',
@@ -597,6 +605,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagecols',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                '1',
@@ -638,6 +647,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:cols',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:cols.I.0',
@@ -705,6 +715,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.recursive',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:recursive.I.0',
@@ -738,6 +749,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.0',
@@ -791,6 +803,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:list_type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array(
                                                '',
@@ -850,6 +863,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:filelink_sorting',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:filelink_sorting.none', ''),
                                        array('LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:filelink_sorting.extension', 'extension'),
@@ -868,6 +882,7 @@ return array(
                                'wizards' => array(
                                        'target_picker' => array(
                                                'type' => 'select',
+                                               'renderType' => 'selectSingle',
                                                'mode' => '',
                                                'items' => array(
                                                        array('LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:target.I.1', '_blank')
@@ -1003,12 +1018,12 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:selected_categories',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectTree',
                                'foreign_table' => 'sys_category',
                                'foreign_table_where' => 'AND sys_category.sys_language_uid IN (0,-1) ORDER BY sys_category.title ASC',
                                'size' => 10,
                                'autoSizeMax' => 50,
                                'maxitems' => 9999,
-                               'renderMode' => 'tree',
                                'treeConfig' => array(
                                        'parentField' => 'parent',
                                        'appearance' => array(
@@ -1022,6 +1037,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:category_field',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'size' => 1,
                                'minitems' => 0,
                                'maxitems' => 1,
@@ -1041,6 +1057,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/Database.xlf:tt_content.table_delimiter',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:frontend/Resources/Private/Language/Database.xlf:tt_content.table_delimiter.124', 124),
                                        array('LLL:EXT:frontend/Resources/Private/Language/Database.xlf:tt_content.table_delimiter.59', 59),
@@ -1056,6 +1073,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/Database.xlf:tt_content.table_enclosure',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:frontend/Resources/Private/Language/Database.xlf:tt_content.table_enclosure.0', 0),
                                        array('LLL:EXT:frontend/Resources/Private/Language/Database.xlf:tt_content.table_enclosure.39', 39),
@@ -1069,6 +1087,7 @@ return array(
                        'label' => 'LLL:EXT:frontend/Resources/Private/Language/Database.xlf:tt_content.table_header_position',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:frontend/Resources/Private/Language/Database.xlf:tt_content.table_header_position.0', 0),
                                        array('LLL:EXT:frontend/Resources/Private/Language/Database.xlf:tt_content.table_header_position.1', 1),
index 2f95f4e..7fd0861 100644 (file)
@@ -59,6 +59,7 @@ return array(
                        'label' => 'LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.type.I.0', '0'),
                                        array('LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.type.I.1', '1'),
@@ -75,6 +76,7 @@ return array(
                        'label' => 'LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.depth',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:lang/locallang_core.xlf:labels.depth_0', '0'),
                                        array('LLL:EXT:lang/locallang_core.xlf:labels.depth_1', '1'),
@@ -90,6 +92,7 @@ return array(
                        'label' => 'LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.table2index',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.table2index.I.0', '0')
                                ),
@@ -210,6 +213,7 @@ return array(
                        'label' => 'LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.timer_frequency',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.timer_frequency.I.0', '3600'),
                                        array('LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.timer_frequency.I.1', '86400'),
index 776b112..5918d72 100644 (file)
@@ -60,6 +60,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'foreign_table' => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => array(
@@ -105,6 +106,7 @@ return array(
                        'displayCond' => 'EXT:static_info_tables:LOADED:true',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0),
                                ),
index d4c3f9a..0497b0b 100644 (file)
@@ -49,6 +49,7 @@ if (TYPO3_MODE === 'BE' && \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::i
                ),
                'rteCleanPasteBehaviour' => array(
                        'type' => 'select',
+                       'renderType' => 'selectSingle',
                        'label' => 'LLL:EXT:rtehtmlarea/Resources/Private/Language/Plugins/PlainText/locallang_js.xlf:rteCleanPasteBehaviour',
                        'items' => array(
                                'plainText' => 'LLL:EXT:rtehtmlarea/Resources/Private/Language/Plugins/PlainText/locallang_js.xlf:plainText',
index 3eec17d..5e51c0f 100644 (file)
@@ -52,6 +52,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.type',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', '0'),
                                        array('LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.type.1', '1'),
@@ -66,6 +67,7 @@ return array(
                        'label' => 'LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.assign_to_groups',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'foreign_table' => 'be_groups',
                                'foreign_table_where' => 'ORDER BY be_groups.title',
                                'MM' => 'sys_action_asgr_mm',
@@ -88,6 +90,7 @@ return array(
                        'label' => 'LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.t1_allowed_groups',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'foreign_table' => 'be_groups',
                                'foreign_table_where' => 'ORDER BY be_groups.title',
                                'size' => '10',
@@ -139,6 +142,7 @@ return array(
                        'label' => 'LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.t3_tables',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectMultipleSideBySide',
                                'special' => 'tables',
                                'items' => array(
                                        array('', '')
index 1d7d6b9..fb4e0fe 100644 (file)
@@ -22,6 +22,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.category',
                        'config' => array(
                                'type' => 'select',
+                                       'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', '0', 'sysnote-type-0'),
                                        array('LLL:EXT:sys_note/Resources/Private/Language/locallang_tca.xlf:sys_note.category.I.1', '1', 'sysnote-type-1'),
index 70ff4e4..b11e6eb 100644 (file)
@@ -88,12 +88,12 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:file_mountpoints',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectCheckBox',
                                'foreign_table' => 'sys_filemounts',
                                'foreign_table_where' => ' AND sys_filemounts.pid=0 ORDER BY sys_filemounts.title',
                                'size' => '3',
                                'maxitems' => 25,
                                'autoSizeMax' => 10,
-                               'renderMode' => 'checkbox',
                        )
                ),
                'publish_time' => array(
@@ -138,6 +138,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_workspace.swap_modes',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0),
                                        array('Swap-Into-Workspace on Auto-publish', 1),
@@ -159,6 +160,7 @@ return array(
                        'label' => 'LLL:EXT:lang/locallang_tca.xlf:sys_workspace.stagechg_notification',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('', 0),
                                        array('Notify users on next stage only', 1),
@@ -184,6 +186,7 @@ return array(
                        'label' => 'LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_workspace.edit_notification_mode',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_workspace.notification_mode.0', 0),
                                        array('LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_workspace.notification_mode.1', 1),
@@ -240,6 +243,7 @@ return array(
                        'label' => 'LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_workspace.publish_notification_mode',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_workspace.notification_mode.0', 0),
                                        array('LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_workspace.notification_mode.1', 1),
index ebc9c76..ecfa79a 100644 (file)
@@ -69,6 +69,7 @@ return array(
                        'label' => 'LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_workspace_stage.notification_mode',
                        'config' => array(
                                'type' => 'select',
+                               'renderType' => 'selectSingle',
                                'items' => array(
                                        array('LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_workspace.notification_mode.0', 0),
                                        array('LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_workspace.notification_mode.1', 1),