[!!!][TASK] TCA: Streamline field position in tabs 64/50364/23
authorDaniel Windloff <daniel.jc.windloff@googlemail.com>
Sat, 3 Dec 2016 14:23:05 +0000 (15:23 +0100)
committerJan Helke <typo3@helke.de>
Sat, 3 Dec 2016 15:53:37 +0000 (16:53 +0100)
In TYPO3 there are some recurring field definitions shared
by a lot of records. These fields are mostly defined in
the control section of TCA.

These fields are used as well by the core as by records
introduced by third party extensions.

In order to get a consistent behaviour
(from editor's perspective)
these fields should have a generic position in tabs.

Resolves: #78383
Releases: master
Change-Id: I365538b8e6013e3911710b113bec7d41314809b2
Reviewed-on: https://review.typo3.org/50364
Reviewed-by: Alexander Stehlik <alexander.stehlik@gmail.com>
Tested-by: Alexander Stehlik <alexander.stehlik@gmail.com>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Jan Helke <typo3@helke.de>
Tested-by: Jan Helke <typo3@helke.de>
70 files changed:
composer.json
typo3/sysext/backend/Tests/Functional/Form/FormTestService.php [new file with mode: 0644]
typo3/sysext/core/Configuration/DefaultConfiguration.php
typo3/sysext/core/Configuration/TCA/Overrides/pages.php [new file with mode: 0644]
typo3/sysext/core/Configuration/TCA/Overrides/sys_file_metadata.php [new file with mode: 0644]
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_collection.php
typo3/sysext/core/Configuration/TCA/sys_file_metadata.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/Configuration/TCA/sys_news.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-78383-RemoveDefaultCategorizedTables.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Important-78383-TCAStreamlineFieldPositionsInTabsForRecurringFields.rst [new file with mode: 0644]
typo3/sysext/core/Resources/Private/Language/Form/locallang_tabs.xlf [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/BackendGroupsVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/BackendUsersVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/CategoryVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/CollectionVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/FileCollectionVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/FileMetadataVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/FileStorageVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/FilemountsVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/LanguageVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/NewsVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Functional/Tca/PagesVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/css_styled_content/Tests/Functional/Tca/ContentVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/felogin/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/felogin/Tests/Functional/Tca/ContentVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/filemetadata/Configuration/TCA/Overrides/sys_file_metadata.php
typo3/sysext/filemetadata/Tests/Functional/Tca/FileMetadataVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/fluid_styled_content/Documentation/AddingYourOwnContentElements/Index.rst
typo3/sysext/fluid_styled_content/Tests/Functional/Tca/ContentVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/form/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/frontend/Configuration/TCA/Overrides/tt_content.php [new file with mode: 0644]
typo3/sysext/frontend/Configuration/TCA/backend_layout.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/frontend/Tests/Functional/Tca/BackendLayoutVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/frontend/Tests/Functional/Tca/ContentVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/frontend/Tests/Functional/Tca/DomainVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/frontend/Tests/Functional/Tca/FrontendGroupsVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/frontend/Tests/Functional/Tca/FrontendUsersVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/frontend/Tests/Functional/Tca/PagesLanguageOverlayVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/frontend/Tests/Functional/Tca/TemplateVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/indexed_search/Configuration/TCA/index_config.php
typo3/sysext/indexed_search/Tests/Functional/Tca/IndexConfigVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/rtehtmlarea/Configuration/TCA/tx_rtehtmlarea_acronym.php
typo3/sysext/rtehtmlarea/Tests/Functional/Tca/AcronymVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/scheduler/Configuration/TCA/tx_scheduler_task_group.php
typo3/sysext/scheduler/Tests/Functional/Tca/TaskGroupVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/sys_action/Configuration/TCA/sys_action.php
typo3/sysext/sys_action/Tests/Functional/Tca/ActionVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/sys_note/Configuration/TCA/sys_note.php
typo3/sysext/sys_note/Tests/Functional/Tca/NoteVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/workspaces/Configuration/TCA/sys_workspace.php
typo3/sysext/workspaces/Configuration/TCA/sys_workspace_stage.php
typo3/sysext/workspaces/Tests/Functional/Fixtures/sys_filemounts.xml [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/Tca/WorkspaceStageVisibleFieldsTest.php [new file with mode: 0644]
typo3/sysext/workspaces/Tests/Functional/Tca/WorkspaceVisibleFieldsTest.php [new file with mode: 0644]

index 7c587ac..f777b2d 100644 (file)
                        "TYPO3\\CMS\\Belog\\Tests\\": "typo3/sysext/belog/Tests/",
                        "TYPO3\\CMS\\Beuser\\Tests\\": "typo3/sysext/beuser/Tests/",
                        "TYPO3\\CMS\\Core\\Tests\\": "typo3/sysext/core/Tests/",
+                       "TYPO3\\CMS\\CssStyledContent\\Tests\\": "typo3/sysext/css_styled_content/Tests/",
                        "TYPO3\\CMS\\Documentation\\Tests\\": "typo3/sysext/documentation/Tests/",
                        "TYPO3\\CMS\\Extbase\\Tests\\": "typo3/sysext/extbase/Tests/",
                        "TYPO3\\CMS\\Extensionmanager\\Tests\\": "typo3/sysext/extensionmanager/Tests/",
                        "TYPO3\\CMS\\Felogin\\Tests\\": "typo3/sysext/felogin/Tests/",
+                       "TYPO3\\CMS\\Filemetadata\\Tests\\": "typo3/sysext/filemetadata/Tests/",
                        "TYPO3\\CMS\\Fluid\\Tests\\": "typo3/sysext/fluid/Tests/",
+                       "TYPO3\\CMS\\FluidStyledContent\\Tests\\": "typo3/sysext/fluid_styled_content/Tests/",
                        "TYPO3\\CMS\\Form\\Tests\\": "typo3/sysext/form/Tests/",
                        "TYPO3\\CMS\\Frontend\\Tests\\": "typo3/sysext/frontend/Tests/",
                        "TYPO3\\CMS\\Impexp\\Tests\\": "typo3/sysext/impexp/Tests/",
                        "TYPO3\\CMS\\Recordlist\\Tests\\": "typo3/sysext/recordlist/Tests/",
                        "TYPO3\\CMS\\Reports\\Tests\\": "typo3/sysext/reports/Tests/",
                        "TYPO3\\CMS\\Rsaauth\\Tests\\": "typo3/sysext/rsaauth/Tests/",
+                       "TYPO3\\CMS\\Rtehtmlarea\\Tests\\": "typo3/sysext/rtehtmlarea/Tests/",
                        "TYPO3\\CMS\\Saltedpasswords\\Tests\\": "typo3/sysext/saltedpasswords/Tests/",
                        "TYPO3\\CMS\\Scheduler\\Tests\\": "typo3/sysext/scheduler/Tests/",
                        "TYPO3\\CMS\\Sv\\Tests\\": "typo3/sysext/sv/Tests/",
+                       "TYPO3\\CMS\\SysAction\\Tests\\": "typo3/sysext/sys_action/Tests/",
+                       "TYPO3\\CMS\\SysNote\\Tests\\": "typo3/sysext/sys_note/Tests/",
                        "TYPO3\\CMS\\Workspaces\\Tests\\": "typo3/sysext/workspaces/Tests/",
                        "TYPO3\\CMS\\Recycler\\Tests\\": "typo3/sysext/recycler/Tests/"
                },
diff --git a/typo3/sysext/backend/Tests/Functional/Form/FormTestService.php b/typo3/sysext/backend/Tests/Functional/Form/FormTestService.php
new file mode 100644 (file)
index 0000000..1cf755e
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+namespace TYPO3\CMS\Backend\Tests\Functional\Form;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Form\FormDataCompiler;
+use TYPO3\CMS\Backend\Form\FormDataGroup\TcaDatabaseRecord;
+use TYPO3\CMS\Backend\Form\NodeFactory;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Service class for handling recurring tasks in tests.
+ */
+class FormTestService
+{
+    /**
+     * Creates an outerWrapContainer node for a new record of the given table.
+     *
+     * @param string $table
+     * @param array $defaults
+     * @return array
+     */
+    public function createNewRecordForm(string $table, array $defaults = [])
+    {
+        $formDataGroup = GeneralUtility::makeInstance(TcaDatabaseRecord::class);
+        $formDataCompiler = GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
+        $nodeFactory = GeneralUtility::makeInstance(NodeFactory::class);
+
+        $formDataCompilerInput = [
+            'tableName' => $table,
+            'vanillaUid' => 0,
+            'command' => 'new',
+            'databaseRow' => $defaults
+        ];
+        $formData = $formDataCompiler->compile($formDataCompilerInput);
+
+        $formData['renderType'] = 'outerWrapContainer';
+        return $nodeFactory->create($formData)->render();
+    }
+
+    /**
+     * Checks if the form field with the given name exists in the given form HTML.
+     *
+     * @param string $fieldName
+     * @param string $formHtml
+     * @return bool
+     */
+    public function formHtmlContainsField(string $fieldName, string $formHtml): bool
+    {
+        return strpos($formHtml, '[' . $fieldName . ']');
+    }
+}
index b501c4a..ef6c310 100644 (file)
@@ -197,7 +197,7 @@ return [
                 ],
             ],
         ],
-        'defaultCategorizedTables' => 'pages,tt_content,sys_file_metadata', // List of comma separated tables that are categorizable by default.
+        'defaultCategorizedTables' => '', // List of comma separated tables that are categorizable by default.
         'displayErrors' => -1,        // <p>Integer (-1, 0, 1). Configures whether PHP errors or Exceptions should be displayed.</p><dl><dt>0</dt><dd>Do not display any PHP error message. Sets PHP "display_errors" setting to 0. Overrides the value of [SYS][exceptionalErrors] and sets it to 0 (= no errors are turned into exceptions). The configured [SYS][productionExceptionHandler] is used as exception handler.</dd><dt>1</dt><dd>Display error messages with the registered [SYS][errorHandler]. Sets PHP "display_errors" setting to 1. The configured [SYS][debugExceptionHandler] is used as exception handler.</dd><dt>-1</dt><dd>TYPO3 CMS does not touch the PHP "display_errors" setting. If [SYS][devIPmask] matches the user's IP address, the configured [SYS][debugExceptionHandler] is used instead of the [SYS][productionExceptionHandler] to handle exceptions.</dd></dl>
         'productionExceptionHandler' => \TYPO3\CMS\Core\Error\ProductionExceptionHandler::class,        // String: Classname to handle exceptions that might happen in the TYPO3-code. Leave empty to disable exception handling. Default: "TYPO3\\CMS\\Core\\Error\\ProductionExceptionHandler". This exception handler displays a nice error message when something went wrong. The error message is logged to the configured logs. Note: The configured "productionExceptionHandler" is used if [SYS][displayErrors] is set to "0" or is set to "-1" and [SYS][devIPmask] doesn't match the user's IP.
         'debugExceptionHandler' => \TYPO3\CMS\Core\Error\DebugExceptionHandler::class,        // String: Classname to handle exceptions that might happen in the TYPO3-code. Leave empty to disable exception handling. Default: "TYPO3\\CMS\\Core\\Error\\DebugExceptionHandler". This exception handler displays the complete stack trace of any encountered exception. The error message and the stack trace is logged to the configured logs. Note: The configured "debugExceptionHandler" is used if [SYS][displayErrors] is set to "1" or is set to "-1" or "2" and the [SYS][devIPmask] matches the user's IP.
diff --git a/typo3/sysext/core/Configuration/TCA/Overrides/pages.php b/typo3/sysext/core/Configuration/TCA/Overrides/pages.php
new file mode 100644 (file)
index 0000000..9d8923e
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable(
+    'core',
+    'pages',
+    'categories',
+    [
+        'position' => 'replace:categories'
+    ]
+);
diff --git a/typo3/sysext/core/Configuration/TCA/Overrides/sys_file_metadata.php b/typo3/sysext/core/Configuration/TCA/Overrides/sys_file_metadata.php
new file mode 100644 (file)
index 0000000..0cfb2de
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable(
+    'core',
+    'sys_file_metadata',
+    'categories',
+    [
+        'position' => 'replace:categories'
+    ]
+);
index e89c020..8aacf98 100644 (file)
@@ -300,10 +300,20 @@ return [
         ]
     ],
     'types' => [
-        '0' => ['showitem' => 'hidden, title, description, subgroup,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_groups.tabs.base_rights, groupMods, tables_select, tables_modify, pagetypes_select, non_exclude_fields, explicit_allowdeny, allowed_languages, custom_options,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_groups.tabs.mounts_and_workspaces, workspace_perms, db_mountpoints, file_mountpoints, file_permissions, category_perms,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_groups.tabs.options, lockToDomain, hide_in_lists, TSconfig,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_groups.tabs.extended'],
+        '0' => ['showitem' => '
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                title,subgroup,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_groups.tabs.base_rights,
+                groupMods, tables_select, tables_modify, pagetypes_select, non_exclude_fields, explicit_allowdeny, allowed_languages, custom_options,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_groups.tabs.mounts_and_workspaces,
+                workspace_perms, db_mountpoints, file_mountpoints, file_permissions, category_perms,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_groups.tabs.options,
+                lockToDomain, TSconfig,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,hide_in_lists,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        '],
     ]
 ];
index 8ed85b6..3542b1b 100644 (file)
@@ -381,15 +381,34 @@ return [
         ],
     ],
     'types' => [
-        '0' => ['showitem' => 'disable, username, password, description, avatar, usergroup, admin, realName, email, lang, lastlogin,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.rights, userMods, allowed_languages,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.mounts_and_workspaces, workspace_perms, db_mountpoints, options, file_mountpoints, file_permissions, category_perms,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.options, lockToDomain, disableIPlock, TSconfig,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.access, starttime,endtime,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.extended'],
-        '1' => ['showitem' => 'disable, username, password, avatar,description, usergroup, admin, realName, email, lang, lastlogin,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.options, disableIPlock, TSconfig, db_mountpoints, options, file_mountpoints,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.access, starttime,endtime,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.extended']
-    ]
+        '0' => ['showitem' => '
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                admin, username, password, avatar, usergroup, realName, email, lang, lastlogin,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.rights,
+                userMods, allowed_languages,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.mounts_and_workspaces,
+                workspace_perms, db_mountpoints, options, file_mountpoints, file_permissions, category_perms,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.options,
+                lockToDomain, disableIPlock, TSconfig,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                disable,--palette--;;timeRestriction,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        '],
+        '1' => ['showitem' => '
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                admin, username, password, avatar, usergroup, realName, email, lang, lastlogin,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:be_users.tabs.options,
+                disableIPlock, TSconfig, db_mountpoints, options, file_mountpoints,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                disable,--palette--;;timeRestriction,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
+    ],
+    'palettes' => [
+        'timeRestriction' => ['showitem' => 'starttime, endtime']
+    ],
 ];
index 0f2e057..c24803b 100644 (file)
@@ -825,137 +825,169 @@ return [
     'types' => [
         // normal
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_DEFAULT => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.metatags;metatags,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.replace;replace,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.links;links,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.caching;caching,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.language;language,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;miscellaneous,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.module;module,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.metatags;metatags,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.replace;replace,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.links;links,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.caching;caching,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;miscellaneous,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.module;module,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.language;language,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // external URL
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_LINK => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.external;external,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.links;links,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.language;language,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;miscellaneous,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    doktype,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.external;external,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.links;links,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;miscellaneous,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.language;language,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // shortcut
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_SHORTCUT => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.shortcut;shortcut,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.shortcutpage;shortcutpage,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.links;links,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.language;language,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;miscellaneous,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-                               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    doktype,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.shortcut;shortcut,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.shortcutpage;shortcutpage,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.links;links,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;miscellaneous,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.language;language,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,                
+            '
         ],
         // mount page
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_MOUNTPOINT => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.mountpoint;mountpoint,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.mountpage;mountpage,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.links;links,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.language;language,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;miscellaneous,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    doktype,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.mountpoint;mountpoint,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.mountpage;mountpage,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;layout,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.links;links,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;miscellaneous,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.language;language,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // spacer
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_SPACER => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;adminsonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-                       '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;visibility,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // Folder
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_SYSFOLDER => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;backend_layout,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;adminsonly,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.module;module,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.appearance,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.layout;backend_layout,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.module;module,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.config;config,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;adminsonly,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // Trash
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_RECYCLER => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.behaviour,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;adminsonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.miscellaneous;adminsonly,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ]
     ],
     'palettes' => [
@@ -984,19 +1016,19 @@ return [
             'showitem' => 'doktype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.doktype_formlabel',
         ],
         'shortcut' => [
-            'showitem' => 'doktype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.doktype_formlabel, shortcut_mode;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.shortcut_mode_formlabel',
+            'showitem' => 'shortcut_mode;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.shortcut_mode_formlabel',
         ],
         'shortcutpage' => [
             'showitem' => 'shortcut;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.shortcut_formlabel',
         ],
         'mountpoint' => [
-            'showitem' => 'doktype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.doktype_formlabel, mount_pid_ol;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.mount_pid_ol_formlabel',
+            'showitem' => 'mount_pid_ol;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.mount_pid_ol_formlabel',
         ],
         'mountpage' => [
             'showitem' => 'mount_pid;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.mount_pid_formlabel',
         ],
         'external' => [
-            'showitem' => 'doktype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.doktype_formlabel, urltype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.urltype_formlabel, url;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.url_formlabel',
+            'showitem' => 'urltype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.urltype_formlabel, url;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.url_formlabel',
         ],
         'title' => [
             'showitem' => 'title;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.title_formlabel, --linebreak--, nav_title;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.nav_title_formlabel, --linebreak--, subtitle;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.subtitle_formlabel',
@@ -1011,7 +1043,7 @@ return [
             'showitem' => 'hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.hidden_formlabel',
         ],
         'access' => [
-            'showitem' => 'starttime;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.starttime_formlabel, endtime;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.endtime_formlabel, extendToSubpages;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.extendToSubpages_formlabel, --linebreak--, fe_group;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.fe_group_formlabel, --linebreak--, fe_login_mode;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.fe_login_mode_formlabel',
+            'showitem' => 'starttime;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.starttime_formlabel, endtime;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.endtime_formlabel, extendToSubpages;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.extendToSubpages_formlabel, --linebreak--, fe_group;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.fe_group_formlabel, --linebreak--, fe_login_mode;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.fe_login_mode_formlabel, --linebreak--,editlock',
         ],
         'abstract' => [
             'showitem' => 'abstract;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.abstract_formlabel',
@@ -1044,7 +1076,7 @@ return [
             'showitem' => 'l18n_cfg;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.l18n_cfg_formlabel',
         ],
         'miscellaneous' => [
-            'showitem' => 'is_siteroot;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.is_siteroot_formlabel, no_search;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.no_search_formlabel, editlock;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.editlock_formlabel, php_tree_stop;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.php_tree_stop_formlabel',
+            'showitem' => 'is_siteroot;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.is_siteroot_formlabel, no_search;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.no_search_formlabel,LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.editlock_formlabel, php_tree_stop;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.php_tree_stop_formlabel',
         ],
         'adminsonly' => [
             'showitem' => 'editlock;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.editlock_formlabel',
index a757d7e..f741b96 100644 (file)
@@ -33,13 +33,24 @@ return [
     ],
     'types' => [
         '1' => [
-            'showitem' => 'title, --palette--;;1, parent, description,
-                               --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_category.tabs.items, items,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    title, parent,
+                --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_category.tabs.items,
+                    items,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,--palette--;;timeRestriction,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
     'palettes' => [
-        '1' => ['showitem' => 'sys_language_uid, l10n_parent, hidden']
+        'timeRestriction' => ['showitem' => 'starttime, endtime'],
+        'language' => ['showitem' => 'sys_language_uid, l10n_parent'],
     ],
     'columns' => [
         't3ver_label' => [
index 8b769e5..2728282 100644 (file)
@@ -6,6 +6,7 @@ return [
         'tstamp' => 'tstamp',
         'crdate' => 'crdate',
         'cruser_id' => 'cruser_id',
+        'descriptionColumn' => 'description',
         'versioningWS' => true,
         'origUid' => 't3_origuid',
         'languageField' => 'sys_language_uid',
@@ -176,11 +177,21 @@ return [
     ],
     'types' => [
         'static' => [
-            'showitem' => 'title, --palette--;;1, type, description,table_name, items,
-            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime,fe_group',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,table_name,items,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,--palette--;;timeRestriction,fe_group,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
     'palettes' => [
-        '1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden'],
+        'timeRestriction' => ['showitem' => 'starttime, endtime'],
+        'language' => ['showitem' => 'sys_language_uid, l10n_parent'],
     ]
 ];
index e6f8001..0e1eacc 100644 (file)
@@ -186,20 +186,52 @@ return [
     ],
     'types' => [
         '0' => [
-            'showitem' => 'title, sys_language_uid, l10n_parent, l10n_diffsource, type, files,
-                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,files,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;timeRestriction,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         'static' => [
-            'showitem' => 'title, sys_language_uid, l10n_parent, l10n_diffsource, type, files,
-                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,files,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;timeRestriction,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         'folder' => [
-            'showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, title, type, storage, folder, recursive,
-                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,storage, folder, recursive,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;timeRestriction,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         'category' => [
-            'showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, title, type, category,
-                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,category,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;timeRestriction,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
+    'palettes' => [
+        'timeRestriction' => ['showitem' => 'starttime, endtime'],
+        'language' => ['showitem' => 'sys_language_uid, l10n_parent'],
+    ],
 ];
index bdcad37..76e0229 100644 (file)
@@ -125,7 +125,17 @@ return [
         ]
     ],
     'types' => [
-        '1' => ['showitem' => 'fileinfo, title, description, alternative']
+        '1' => ['showitem' => '
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                fileinfo, title, description, alternative,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                --palette--;;language,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                categories,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
     ],
-    'palettes' => []
+    'palettes' => [
+        'language' => ['showitem' => 'sys_language_uid, l10n_parent'],
+    ]
 ];
index a96cc66..07eb750 100644 (file)
@@ -8,6 +8,7 @@ return [
         'cruser_id' => 'cruser_id',
         'default_sortby' => 'ORDER BY name',
         'delete' => 'deleted',
+        'descriptionColumn' => 'description',
         'rootLevel' => true,
         'versioningWS_alwaysAllowLiveEdit' => true, // Only have LIVE records of file storages
         'enablecolumns' => [],
@@ -112,7 +113,17 @@ return [
         ]
     ],
     'types' => [
-        '0' => ['showitem' => 'name, description, --div--;Configuration, driver, configuration, is_default, auto_extract_metadata, processingfolder, --div--;Access, --palette--;Capabilities;capabilities, is_online']
+        '0' => ['showitem' => '
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    name, driver, configuration, is_default, auto_extract_metadata, processingfolder, 
+            --div--;Access capabilities,
+                    --palette--;Capabilities;capabilities,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    is_online,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
     ],
     'palettes' => [
         'capabilities' => [
index 3ac41e7..4911f5d 100644 (file)
@@ -85,11 +85,14 @@ return [
         ],
     ],
     'types' => [
-        '0' => ['showitem' => '--palette--;;mount, description, base, path, read_only']
-    ],
-    'palettes' => [
-        'mount' => [
-            'showitem' => 'title,hidden',
-        ],
+        '0' => ['showitem' => '
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                title,base, path,read_only,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
     ],
 ];
index 2da43b1..1587acd 100644 (file)
@@ -319,9 +319,12 @@ return [
         ]
     ],
     'types' => [
-        '1' => ['showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                                                               title,language_isocode,flag,
-                                                                       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                                                               hidden']
+        '1' => ['showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    title,language_isocode,flag,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
     ]
 ];
index b799cc9..4eab1e7 100644 (file)
@@ -84,7 +84,16 @@ return [
     ],
     'types' => [
         '1' => [
-            'showitem' => 'hidden, title, content, --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_news.tabs.access, starttime, endtime',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    title,content,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden, --palette--;;timeRestriction,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
+    'palettes' => [
+        'timeRestriction' => ['showitem' => 'starttime, endtime']
+    ],
 ];
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-78383-RemoveDefaultCategorizedTables.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-78383-RemoveDefaultCategorizedTables.rst
new file mode 100644 (file)
index 0000000..f86b8d1
--- /dev/null
@@ -0,0 +1,42 @@
+.. include:: ../../Includes.txt
+
+=======================================================================================================
+Breaking: #78383 - pages, tt_content, sys_file_metadata have been removed from defaultCategorizedTables
+=======================================================================================================
+
+See :issue:`78383`
+
+Description
+===========
+
+The tables `pages`, `tt_content` and `sys_file_metadata` have been removed from `defaultCategorizedTables`. 
+For these tables the core API `\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable` would be
+executed to define a common position of the categories field.
+
+
+Impact
+======
+
+It is no longer possible to remove the category field for these tables by reset the configuration.
+
+
+Affected Installations
+======================
+
+Any TYPO3 instance that reset the configuration value.
+
+
+Migration
+=========
+
+None.
+
+Use PageTSConfig  to disable the field:
+
+.. code-block:: typoscript
+
+    TCEFORM.pages.categories.disabled = 1
+    TCEFORM.tt_content.categories.disabled = 1
+    TCEFORM.sys_file_metadata.categories.disabled = 1
+
+.. index:: LocalConfiguration
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Important-78383-TCAStreamlineFieldPositionsInTabsForRecurringFields.rst b/typo3/sysext/core/Documentation/Changelog/master/Important-78383-TCAStreamlineFieldPositionsInTabsForRecurringFields.rst
new file mode 100644 (file)
index 0000000..03d02ad
--- /dev/null
@@ -0,0 +1,121 @@
+.. include:: ../../Includes.txt
+
+================================================================================
+Important: #78383 - TCA: Streamline field positions in tabs for recurring fields
+================================================================================
+
+See :issue:`78383`
+
+Description
+===========
+
+In TYPO3 there are some recurring field definitions shared by a lot of records.
+These fields are mostly defined in :php:`$GLOBALS['TCA']['<mytable>']['crtl']`.
+Furthermore the generic categories are taken into account.
+
+These fields are used by core records and third party extensions.
+
+These fields should have a generic position in the edit form (`EditDocumentController` / `FormEngine`) to allow the
+editor or integrator to have a valid guess where to look for a common option. Furthermore the fields should be placed
+in the given order in the certain tab.
+
+There should be no records not using tabs to group fields.
+
+See the documentation for the definition of the recurring fields:
+
+    * crtl_
+    * categories_
+
+.. _crtl: https://docs.typo3.org/typo3cms/TCAReference/Reference/Ctrl/Index.html
+.. _categories: https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Categories/Index.html
+
+
+**Legend**
+
+For the fields name in "Generic fields" the actual value of
+:php:`$GLOBALS['TCA']['<mytable>']['crtl']['<generic field>']` should be set in
+:php:`$GLOBALS['TCA']['<mytable>']['types'][<mytype>]['showitem']`.
+
+
+General (first tab)
+-------------------
+
+Label:
+    `LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general`
+Generic fields:
+    * `type` (if theres is a field that is not set as type in crtl, but have a similar meaning, set it to the first
+      position)
+    * `label`
+    * `label_alt` (if the fields are directly related to the label; especially if `label_alt_force` is set `true`)
+Additional fields:
+    Fields that reflect the main focus of an editor or integrator working with the record.
+
+Following tabs
+--------------
+
+The following tabs should be defined by the specific record. They should have speaking names. Avoid unspecific
+labelling (for example options, settings, extended, miscellaneous) as those labels do not guide the editor.
+
+Language
+--------
+
+Label:
+    `LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language`
+Generic fields:
+    * `languageField`
+    * `transOrigPointerField`
+Additional fields:
+    Other fields that affects the language or translation handling.
+
+Access
+------
+Label:
+    `LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access`
+Generic fields:
+    * `enablecolumns`
+    * `disabled`
+    * `starttime` (Use a palette for starttime and endtime)
+    * `endtime`
+    * `fe_group`
+    * `fe_admin_lock`
+    * `editlock`
+Additional fields:
+    Other fields that affects the access handling in FE or BE.
+
+Categories
+----------
+
+Label:
+    `LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories`
+Generic fields:
+    Field that is defined by :php:`\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable`
+    It is not recommended to use the configuration option `defaultCategorizedTables` to make a table categorizable as
+    the tab position might not be consistent.
+Additional fields:
+    Other fields that are category related (e.g. select main category)
+
+Notes
+-----
+
+Label:
+    `LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes`
+Generic fields:
+    `descriptionColumn`
+Additional fields:
+    Other fields for internal remarks of editors or integrators.
+    These fields should not affect the website frontend.
+
+Extended
+--------
+
+Label:
+    `LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended`
+Generic fields:
+    No.
+Additional fields:
+    No.
+    There should be no additional field in this tab as the labelling is too generic to provide a good ux.
+    It should be only added to prevent that accidentally added fields from third party extensions are placed in last
+    tab.
+
+.. index:: TCA, Backend, LocalConfiguration
diff --git a/typo3/sysext/core/Resources/Private/Language/Form/locallang_tabs.xlf b/typo3/sysext/core/Resources/Private/Language/Form/locallang_tabs.xlf
new file mode 100644 (file)
index 0000000..9045475
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
+       <file t3:id="1477231202" source-language="en" datatype="plaintext" original="messages" date="2016-10-23T20:22:33Z" product-name="tabs">
+               <header/>
+               <body>
+                       <trans-unit id="general">
+                               <source>General</source>
+                       </trans-unit>
+                       <trans-unit id="access">
+                               <source>Access</source>
+                       </trans-unit>
+                       <trans-unit id="categories">
+                               <source>Categories</source>
+                       </trans-unit>
+                       <trans-unit id="notes">
+                               <source>Notes</source>
+                       </trans-unit>
+                       <trans-unit id="language">
+                               <source>Language</source>
+                       </trans-unit>
+                       <trans-unit id="extended">
+                               <source>Extended</source>
+                       </trans-unit>
+               </body>
+       </file>
+</xliff>
diff --git a/typo3/sysext/core/Tests/Functional/Tca/BackendGroupsVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/BackendGroupsVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..0a4ae32
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class BackendGroupsVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $backendGroupsFields = [
+        'hidden',
+        'title',
+        'description',
+        'subgroup',
+        'groupMods',
+        'tables_select',
+        'tables_modify',
+        'pagetypes_select',
+        'non_exclude_fields',
+        'explicit_allowdeny',
+        'allowed_languages',
+        'workspace_perms',
+        'db_mountpoints',
+        'file_mountpoints',
+        'file_permissions',
+        'category_perms',
+        'lockToDomain',
+        'hide_in_lists',
+        'TSconfig',
+    ];
+
+    /**
+     * @test
+     */
+    public function backendGroupsFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('be_groups');
+
+        foreach (static::$backendGroupsFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/BackendUsersVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/BackendUsersVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..6baa2d9
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class BackendUsersVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $backendUserFields = [
+        'disable',
+        'username',
+        'password',
+        'description',
+        'avatar',
+        'usergroup',
+        'admin',
+        'realName',
+        'email',
+        'lang',
+        'userMods',
+        'allowed_languages',
+        'workspace_perms',
+        'db_mountpoints',
+        'options',
+        'file_mountpoints',
+        'file_permissions',
+        'category_perms',
+        'lockToDomain',
+        'disableIPlock',
+        'TSconfig',
+        'starttime',
+        'endtime',
+    ];
+
+    protected static $adminHiddenFields = [
+        'userMods',
+        'allowed_languages',
+        'workspace_perms',
+        'file_permissions',
+        'category_perms',
+        'lockToDomain',
+    ];
+
+    /**
+     * @test
+     */
+    public function backendUsersFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('be_users');
+
+        foreach (static::$backendUserFields as $expectedField) {
+            $this->assertNotFalse(
+                strpos($formResult['html'], '[' . $expectedField . ']'),
+                'The field ' . $expectedField . ' is not in the HTML'
+            );
+        }
+
+        $this->assertNotFalse(
+            strpos($formResult['html'], 'Last login'),
+            'The field lastlogin is not in the HTML'
+        );
+    }
+
+    /**
+     * @test
+     */
+    public function backendUsersFormContainsExpectedFieldsForAdmins()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('be_users', ['admin' => true]);
+
+        $expectedFields = array_diff(static::$backendUserFields, static::$adminHiddenFields);
+
+        foreach ($expectedFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the HTML'
+            );
+        }
+
+        foreach (static::$adminHiddenFields as $hiddenField) {
+            $this->assertFalse(
+                $formEngineTestService->formHtmlContainsField($hiddenField, $formResult['html']),
+                'The field ' . $hiddenField . ' is in the HTML'
+            );
+        }
+
+        $this->assertNotFalse(
+            strpos($formResult['html'], 'Last login'),
+            'The field lastlogin is not in the HTML'
+        );
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/CategoryVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/CategoryVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..983781c
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class CategoryVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $categoryFields = [
+        'title',
+        'sys_language_uid',
+        'hidden',
+        'parent',
+        'description',
+        'items',
+        'starttime',
+        'endtime',
+    ];
+
+    /**
+     * @test
+     */
+    public function categoryFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_category');
+
+        foreach (static::$categoryFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/CollectionVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/CollectionVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..c3a67b8
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class CollectionVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $collectionFields = [
+        'title',
+        'sys_language_uid',
+        'hidden',
+        'type',
+        'description',
+        'table_name',
+        'items',
+        'starttime',
+        'endtime',
+    ];
+
+    /**
+     * @test
+     */
+    public function collectionFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_collection');
+
+        foreach (static::$collectionFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/FileCollectionVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/FileCollectionVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..f51f735
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class FileCollectionVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $fileCollectionFields = [
+        'title',
+        'sys_language_uid',
+        'type',
+        'starttime',
+        'endtime',
+    ];
+
+    protected static $fileCollectionTypeFields = [
+        '0' => ['files'],
+        'category' => ['category'],
+        'folder' => [
+            'storage',
+            'folder',
+            'recursive',
+        ],
+        'static' => ['files'],
+    ];
+
+    /**
+     * @test
+     */
+    public function fileCollectionFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+
+        foreach (static::$fileCollectionTypeFields as $type => $additionalFields) {
+            $formResult = $formEngineTestService->createNewRecordForm('sys_file_collection', ['type' => $type]);
+            $expectedFields = array_merge(static::$fileCollectionFields, $additionalFields);
+            foreach ($expectedFields as $expectedField) {
+                $this->assertNotFalse(
+                    $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                    'The field ' . $expectedField . ' is not in the form HTML'
+                );
+            }
+        }
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/FileMetadataVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/FileMetadataVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..9ac8500
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class FileMetadataVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $fileMetadataFields = [
+        'title',
+        'description',
+        'alternative',
+        'categories',
+    ];
+
+    /**
+     * @test
+     */
+    public function fileMetadataFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_file_metadata');
+
+        foreach (static::$fileMetadataFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/FileStorageVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/FileStorageVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..cc1f954
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class FileStorageVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $fileStorageFields = [
+        'name',
+        'description',
+        'driver',
+        'is_default',
+        'auto_extract_metadata',
+        'processingfolder',
+        'is_browsable',
+        'is_public',
+        'is_writable',
+        'is_online',
+    ];
+
+    /**
+     * @test
+     */
+    public function fileStorageFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_file_storage');
+
+        foreach (static::$fileStorageFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/FilemountsVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/FilemountsVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..914d562
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class FilemountsVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $filemountsFields = [
+        'title',
+        'hidden',
+        'description',
+        'base',
+        'path',
+        'read_only',
+    ];
+
+    /**
+     * @test
+     */
+    public function filemountsFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_filemounts', ['base' => 1]);
+
+        foreach (static::$filemountsFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/LanguageVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/LanguageVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..f17c0c6
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class LanguageVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $languageFields = [
+        'title',
+        'language_isocode',
+        'flag',
+        'hidden',
+    ];
+
+    /**
+     * @test
+     */
+    public function languageFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_language', ['base' => 1]);
+
+        foreach (static::$languageFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/NewsVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/NewsVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..72f4fd0
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class NewsVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $newsFields = [
+        'hidden',
+        'title',
+        'content',
+        'starttime',
+        'endtime',
+    ];
+
+    /**
+     * @test
+     */
+    public function newsFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_news');
+
+        foreach (static::$newsFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/core/Tests/Functional/Tca/PagesVisibleFieldsTest.php b/typo3/sysext/core/Tests/Functional/Tca/PagesVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..aa21759
--- /dev/null
@@ -0,0 +1,284 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Frontend\Page\PageRepository;
+use TYPO3\CMS\Lang\LanguageService;
+
+class PagesVisibleFieldsTest extends FunctionalTestCase
+{
+    /**
+     * These form fields a visisble in the default page types.
+     *
+     * @var array
+     */
+    protected static $defaultPageFormFields = [
+        'title',
+        'nav_title',
+        'subtitle',
+        'hidden',
+        'nav_hide',
+        'starttime',
+        'endtime',
+        'extendToSubpages',
+        'fe_group',
+        'fe_login_mode',
+        'abstract',
+        'keywords',
+        'description',
+        'author',
+        'author_email',
+        'layout',
+        'newUntil',
+        'backend_layout',
+        'backend_layout_next_level',
+        'content_from_pid',
+        'alias',
+        'target',
+        'url_scheme',
+        'cache_timeout',
+        'cache_tags',
+        'no_cache',
+        'l18n_cfg',
+        'is_siteroot',
+        'no_search',
+        'editlock',
+        'php_tree_stop',
+        'module',
+        'media',
+        'tsconfig_includes',
+        'TSconfig',
+        'categories',
+    ];
+
+    /**
+     * Configuration of hidden / additional form fields per page type.
+     *
+     * @var array
+     */
+    protected static $pageFormFields = [
+        PageRepository::DOKTYPE_BE_USER_SECTION => [],
+        PageRepository::DOKTYPE_DEFAULT => [],
+        PageRepository::DOKTYPE_SHORTCUT => [
+            'additionalFields' => [
+                'shortcut_mode',
+                'shortcut',
+            ],
+            'hiddenFields' => [
+                'keywords',
+                'description',
+                'content_from_pid',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'module',
+            ],
+        ],
+        PageRepository::DOKTYPE_MOUNTPOINT => [
+            'additionalFields' => [
+                'mount_pid_ol',
+                'mount_pid',
+            ],
+            'hiddenFields' => [
+                'keywords',
+                'description',
+                'content_from_pid',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'module',
+            ],
+        ],
+        PageRepository::DOKTYPE_LINK => [
+            'additionalFields' => [
+                'urltype',
+                'url',
+            ],
+            'hiddenFields' => [
+                'keywords',
+                'description',
+                'content_from_pid',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'module',
+            ],
+        ],
+        PageRepository::DOKTYPE_SYSFOLDER => [
+            'hiddenFields' => [
+                'nav_title',
+                'subtitle',
+                'nav_hide',
+                'starttime',
+                'endtime',
+                'extendToSubpages',
+                'fe_group',
+                'fe_login_mode',
+                'abstract',
+                'keywords',
+                'description',
+                'author',
+                'author_email',
+                'layout',
+                'newUntil',
+                'content_from_pid',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'content_from_pid',
+                'alias',
+                'target',
+                'url_scheme',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'l18n_cfg',
+                'is_siteroot',
+                'no_search',
+                'php_tree_stop',
+            ],
+        ],
+        PageRepository::DOKTYPE_RECYCLER => [
+            'hiddenFields' => [
+                'nav_title',
+                'subtitle',
+                'nav_hide',
+                'starttime',
+                'endtime',
+                'extendToSubpages',
+                'fe_group',
+                'fe_login_mode',
+                'abstract',
+                'keywords',
+                'description',
+                'author',
+                'author_email',
+                'layout',
+                'newUntil',
+                'backend_layout',
+                'backend_layout_next_level',
+                'content_from_pid',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'content_from_pid',
+                'alias',
+                'target',
+                'url_scheme',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'l18n_cfg',
+                'is_siteroot',
+                'no_search',
+                'php_tree_stop',
+                'module',
+                'media',
+                'tsconfig_includes',
+                'TSconfig',
+            ],
+        ],
+        PageRepository::DOKTYPE_SPACER => [
+            'hiddenFields' => [
+                'nav_title',
+                'subtitle',
+                'abstract',
+                'keywords',
+                'description',
+                'author',
+                'author_email',
+                'layout',
+                'newUntil',
+                'backend_layout',
+                'backend_layout_next_level',
+                'module',
+                'content_from_pid',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'content_from_pid',
+                'alias',
+                'target',
+                'url_scheme',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'l18n_cfg',
+                'is_siteroot',
+                'no_search',
+                'php_tree_stop',
+                'media',
+                'tsconfig_includes',
+                'TSconfig',
+            ],
+        ],
+    ];
+
+    /**
+     * @return array
+     */
+    public function pagesFormContainsExpectedFieldsDataProvider(): array
+    {
+        $pageTypes = [];
+
+        foreach (static::$pageFormFields as $doktype => $fieldConfig) {
+            $expectedFields = static::$defaultPageFormFields;
+            $hiddenFields = [];
+            if (array_key_exists('additionalFields', $fieldConfig)) {
+                $expectedFields = array_merge($expectedFields, $fieldConfig['additionalFields']);
+            }
+            if (array_key_exists('hiddenFields', $fieldConfig)) {
+                $hiddenFields = $fieldConfig['hiddenFields'];
+                $expectedFields = array_diff($expectedFields, $hiddenFields);
+            }
+            $pageTypes['page doktype ' . $doktype] = [$doktype, $expectedFields, $hiddenFields];
+        }
+
+        return $pageTypes;
+    }
+
+    /**
+     * @test
+     * @dataProvider pagesFormContainsExpectedFieldsDataProvider
+     * @param int $doktype
+     * @param array $expectedFields
+     * @param array $hiddenFields
+     */
+    public function pagesFormContainsExpectedFields(int $doktype, array $expectedFields, array $hiddenFields)
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('pages', ['doktype' => $doktype]);
+
+        foreach ($expectedFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the HTML'
+            );
+        }
+
+        foreach ($hiddenFields as $hiddenField) {
+            $this->assertFalse(
+                $formEngineTestService->formHtmlContainsField($hiddenField, $formResult['html']),
+                'The field ' . $hiddenField . ' is in the HTML'
+            );
+        }
+    }
+}
index 56b28f0..2d6d06c 100644 (file)
@@ -400,59 +400,59 @@ $GLOBALS['TCA']['tt_content']['palettes'] = array_replace(
     [
         'header' => [
             'showitem' => '
-                               header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
-                               --linebreak--,
-                               header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
-                               header_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position_formlabel,
-                               date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
-                               --linebreak--,
-                               header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel
-                       ',
+                header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
+                --linebreak--,
+                header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
+                header_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position_formlabel,
+                date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
+                --linebreak--,
+                header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel
+            ',
         ],
         'headers' => [
             'showitem' => '
-                               header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
-                               --linebreak--,
-                               header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
-                               header_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position_formlabel,
-                               date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
-                               --linebreak--,
-                               header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel,
-                               --linebreak--,
-                               subheader;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:subheader_formlabel
-                       ',
+                header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
+                --linebreak--,
+                header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
+                header_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position_formlabel,
+                date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
+                --linebreak--,
+                header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel,
+                --linebreak--,
+                subheader;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:subheader_formlabel
+            ',
         ],
         'imageblock' => [
             'showitem' => '
-                               imageorient;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageorient_formlabel,
-                               imagecols;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagecols_formlabel,
-                               --linebreak--,
-                               image_noRows;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_noRows_formlabel,
-                               imagecaption_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagecaption_position_formlabel
-                       ',
+                imageorient;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageorient_formlabel,
+                imagecols;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagecols_formlabel,
+                --linebreak--,
+                image_noRows;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_noRows_formlabel,
+                imagecaption_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagecaption_position_formlabel
+            ',
         ],
         'tablelayout' => [
             'showitem' => '
-                               table_bgColor;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor_formlabel,
-                               table_border;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_border_formlabel,
-                               table_cellspacing;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_cellspacing_formlabel,
-                               table_cellpadding;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_cellpadding_formlabel
-                       ',
+                table_bgColor;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor_formlabel,
+                table_border;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_border_formlabel,
+                table_cellspacing;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_cellspacing_formlabel,
+                table_cellpadding;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_cellpadding_formlabel
+            ',
         ],
         'visibility' => [
             'showitem' => '
-                               hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:hidden_formlabel,
-                               sectionIndex;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:sectionIndex_formlabel,
-                               linkToTop;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:linkToTop_formlabel
-                       ',
+                hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:hidden_formlabel,
+                sectionIndex;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:sectionIndex_formlabel,
+                linkToTop;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:linkToTop_formlabel
+            ',
         ],
         'frames' => [
             'showitem' => '
-                               layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                               spaceBefore;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceBefore_formlabel,
-                               spaceAfter;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceAfter_formlabel,
-                               section_frame;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame_formlabel
-                       ',
+                layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                spaceBefore;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceBefore_formlabel,
+                spaceAfter;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceAfter_formlabel,
+                section_frame;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame_formlabel
+            ',
         ]
     ]
 );
@@ -461,36 +461,52 @@ $GLOBALS['TCA']['tt_content']['palettes'] = array_replace(
     'tt_content',
     'image_settings',
     'imagewidth;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagewidth_formlabel,
-               imageheight;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageheight_formlabel,
-               imageborder;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageborder_formlabel,
-               --linebreak--,
-               image_compression;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression_formlabel,
-               image_effects;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects_formlabel,'
+        imageheight;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageheight_formlabel,
+        imageborder;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageborder_formlabel,
+        --linebreak--,
+        image_compression;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression_formlabel,
+        image_effects;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects_formlabel,'
 );
 
 // Field arrangement for CE "header"
 $GLOBALS['TCA']['tt_content']['types']['header']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.headers;headers,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.headers;headers,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 
 // Field arrangement for CE "text"
 $GLOBALS['TCA']['tt_content']['types']['text']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-               bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext_formlabel,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+        bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext_formlabel,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 if (!is_array($GLOBALS['TCA']['tt_content']['types']['text']['columnsOverrides'])) {
     $GLOBALS['TCA']['tt_content']['types']['text']['columnsOverrides'] = [];
@@ -506,20 +522,28 @@ $GLOBALS['TCA']['tt_content']['types']['text']['columnsOverrides']['bodytext']['
 
 // Field arrangement for CE "textpic"
 $GLOBALS['TCA']['tt_content']['types']['textpic']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-               bodytext;Text,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.images,
-               image,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imagelinks;imagelinks,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.image_settings;image_settings,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imageblock;imageblock,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+        bodytext;Text,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.images,
+        image,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imagelinks;imagelinks,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.image_settings;image_settings,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imageblock;imageblock,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 if (!is_array($GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides'])) {
     $GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides'] = [];
@@ -531,32 +555,48 @@ $GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['bodytext'
 
 // Field arrangement for CE "image"
 $GLOBALS['TCA']['tt_content']['types']['image']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.images,
-               image,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imagelinks;imagelinks,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.image_settings;image_settings,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imageblock;imageblock,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.images,
+        image,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imagelinks;imagelinks,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.image_settings;image_settings,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imageblock;imageblock,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 
 // Field arrangement for CE "bullets"
 $GLOBALS['TCA']['tt_content']['types']['bullets']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-               bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.bulletlist_formlabel,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+        bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.bulletlist_formlabel,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 if (!is_array($GLOBALS['TCA']['tt_content']['types']['bullets']['columnsOverrides'])) {
     $GLOBALS['TCA']['tt_content']['types']['bullets']['columnsOverrides'] = [];
@@ -568,19 +608,25 @@ $GLOBALS['TCA']['tt_content']['types']['bullets']['columnsOverrides']['bodytext'
 
 // Field arrangement for CE "table"
 $GLOBALS['TCA']['tt_content']['types']['table']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType.I.5,
-               cols,
-               bodytext,
-               pi_flexform,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.table_layout;tablelayout,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType.I.5,
+        cols,bodytext,pi_flexform,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.table_layout;tablelayout,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 if (!is_array($GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides'])) {
     $GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides'] = [];
@@ -592,85 +638,133 @@ $GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides']['bodytext'][
 
 // Field arrangement for CE "uploads"
 $GLOBALS['TCA']['tt_content']['types']['uploads']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:media;uploads,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.uploads_layout;uploadslayout,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:media;uploads,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.uploads_layout;uploadslayout,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 
 // Field arrangement for CE "menu"
 $GLOBALS['TCA']['tt_content']['types']['menu']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu;menu,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu_accessibility;menu_accessibility,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu;menu,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu_accessibility;menu_accessibility,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 
 // Field arrangement for CE "shortcut"
 $GLOBALS['TCA']['tt_content']['types']['shortcut']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.shortcut_formlabel,
-               records;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:records_formlabel,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.shortcut_formlabel,
+        records;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:records_formlabel,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 
 // Field arrangement for CE "list"
 $GLOBALS['TCA']['tt_content']['types']['list']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin,
-               list_type;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:list_type_formlabel,
-               select_key;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:select_key_formlabel,
-               pages;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pages.ALT.list_formlabel,
-               recursive,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin,
+        list_type;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:list_type_formlabel,
+        select_key;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:select_key_formlabel,
+        pages;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pages.ALT.list_formlabel,
+        recursive,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 
 // Field arrangement for CE "div"
 $GLOBALS['TCA']['tt_content']['types']['div']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.div_formlabel,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.div_formlabel,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 
 // Field arrangement for CE "html"
 $GLOBALS['TCA']['tt_content']['types']['html']['showitem'] = '
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-               header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.html_formlabel,
-               bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.html_formlabel,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,
-               --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+        header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.html_formlabel,
+        bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.html_formlabel,
+    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+        --palette--;;language,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+        --palette--;;hidden,
+        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+        categories,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+        rowDescription,
+    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
 ';
 
 $GLOBALS['TCA']['tt_content']['columns']['section_frame']['config']['items'][0] = [
@@ -680,5 +774,3 @@ $GLOBALS['TCA']['tt_content']['columns']['section_frame']['config']['items'][0]
 $GLOBALS['TCA']['tt_content']['columns']['section_frame']['config']['items'][9] = [
     'LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_section_frame.I.9', '66'
 ];
-
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable('css_styled_content', 'tt_content', 'categories', [], true);
diff --git a/typo3/sysext/css_styled_content/Tests/Functional/Tca/ContentVisibleFieldsTest.php b/typo3/sysext/css_styled_content/Tests/Functional/Tca/ContentVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..108e4b1
--- /dev/null
@@ -0,0 +1,169 @@
+<?php
+namespace TYPO3\CMS\CssStyledContent\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class ContentVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['css_styled_content'];
+
+    protected static $commonContentFields = [
+        'CType',
+        'colPos',
+        'sys_language_uid',
+        'layout',
+        'spaceBefore',
+        'spaceAfter',
+        'section_frame',
+        'hidden',
+        'sectionIndex',
+        'linkToTop',
+        'starttime',
+        'endtime',
+        'fe_group',
+        'editlock',
+        'rowDescription',
+        'categories',
+    ];
+
+    protected static $headerFields = [
+        'header',
+        'header_layout',
+        'header_position',
+        'date',
+        'header_link',
+    ];
+
+    protected static $imageFields = [
+        'image',
+        'image_zoom',
+        'imagewidth',
+        'imageheight',
+        'imageborder',
+        'image_compression',
+        'image_effects',
+        'imageorient',
+        'imagecols',
+        'image_noRows',
+    ];
+
+    protected static $contentFieldsByType = [
+        'header' => [
+            'additionalFields' => ['subheader'],
+        ],
+        'text' => [
+            'additionalFields' => ['bodytext'],
+        ],
+        'textpic' => [
+            'additionalFields' => ['bodytext'],
+        ],
+        'image' => [
+            'useImageFields' => true,
+        ],
+        'bullets' => [
+            'additionalFields' => ['bodytext'],
+        ],
+        'table' => [
+            'additionalFields' => [
+                'cols',
+                'bodytext',
+                'pi_flexform',
+            ],
+        ],
+        'uploads' => [
+            'additionalFields' => [
+                'media',
+                'file_collections',
+                'filelink_sorting',
+                'target',
+            ],
+        ],
+        'menu' => [
+            'additionalFields' => [
+                'menu_type',
+                'pages',
+                'accessibility_title',
+                'accessibility_bypass',
+                'accessibility_bypass_text',
+            ],
+        ],
+        'shortcut' => [
+            'additionalFields' => [
+                'header',
+                'records'
+            ],
+            'disableHeaderFields' => true,
+        ],
+        'list' => [
+            'additionalFields' => [
+                'list_type',
+                'select_key',
+                'pages',
+                'recursive',
+            ],
+        ],
+        'div' => [
+            'additionalFields' => [
+                'header',
+            ],
+            'disableHeaderFields' => true,
+        ],
+        'html' => [
+            'additionalFields' => [
+                'bodytext',
+            ],
+            'disableHeaderFields' => true,
+        ],
+    ];
+
+    /**
+     * @test
+     */
+    public function contentFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+
+        foreach (static::$contentFieldsByType as $contentType => $fieldConfig) {
+            $expectedFields = static::$commonContentFields;
+
+            if (empty($fieldConfig['disableHeaderFields'])) {
+                $expectedFields = array_merge($expectedFields, static::$headerFields);
+            }
+
+            if (!empty($fieldConfig['useImageFields'])) {
+                $expectedFields = array_merge($expectedFields, static::$imageFields);
+            }
+
+            if (!empty($fieldConfig['additionalFields'])) {
+                $expectedFields = array_merge($expectedFields, $fieldConfig['additionalFields']);
+            }
+
+            $formResult = $formEngineTestService->createNewRecordForm('tt_content', ['CType' => $contentType]);
+            foreach ($expectedFields as $expectedField) {
+                $this->assertNotFalse(
+                    $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                    'The field ' . $expectedField . ' is not in the HTML'
+                );
+            }
+        }
+    }
+}
index 7e46cf1..823ed44 100644 (file)
@@ -39,15 +39,23 @@ call_user_func(function () {
         \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem('tt_content', 'CType', $additionalCTypeItem);
     }
 
-    $GLOBALS['TCA']['tt_content']['types']['login']['showitem'] =
-        '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,'
-        . '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,rowDescription,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin,pi_flexform,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,'
-        . '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,'
-        . '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,'
-        . '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.behaviour,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended';
+    $GLOBALS['TCA']['tt_content']['types']['login']['showitem'] = '
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+            pi_flexform,
+        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+            --palette--;;language,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+            --palette--;;hidden,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+            categories,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+            rowDescription,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+    ';
 });
diff --git a/typo3/sysext/felogin/Tests/Functional/Tca/ContentVisibleFieldsTest.php b/typo3/sysext/felogin/Tests/Functional/Tca/ContentVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..f023826
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+namespace TYPO3\CMS\Felogin\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class ContentVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['felogin'];
+
+    protected static $contentFields = [
+        'CType',
+        'colPos',
+        'sys_language_uid',
+        'header',
+        'header_layout',
+        'date',
+        'header_link',
+        'starttime',
+        'endtime',
+        'fe_group',
+        'editlock',
+        'rowDescription',
+        'categories',
+        'pi_flexform'
+    ];
+
+    /**
+     * @test
+     */
+    public function contentFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('tt_content', ['CType' => 'login']);
+
+        foreach (static::$contentFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
index 8c52c06..8fa1b3c 100644 (file)
@@ -8,87 +8,123 @@ $tca = [
     'types' => [
         TYPO3\CMS\Core\Resource\File::FILETYPE_UNKNOWN => [
             'showitem' => '
-                               fileinfo, title, description, ranking, keywords,
-                                   --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
-                                       fe_groups,
-                               --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
-                                       creator, creator_tool, publisher, source, copyright,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.geo_location;40
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    fileinfo, title, description, ranking, keywords,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
+                --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
+                    creator, creator_tool, publisher, source, copyright,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.geo_location;40,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
+                    fe_groups,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
             'showitem' => '
-                               fileinfo, title, description, ranking, keywords,
-                                   --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
-                                       fe_groups,
-                               --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
-                                       creator, creator_tool, publisher, source, copyright, language,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.geo_location;40
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    fileinfo, title, description, ranking, keywords,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
+                --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
+                    creator, creator_tool, publisher, source, copyright, language,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.geo_location;40,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
+                    fe_groups,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
             'showitem' => '
-                               fileinfo, title, description, ranking, keywords,
-                                   --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;20,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
-                                       fe_groups,
-                               --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
-                                       creator, creator_tool, publisher, source, copyright, language,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.geo_location;40,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.gps;30,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.content_date;60,
-                               --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.camera,
-                                       color_space,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.metrics;50
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    fileinfo, title, description, ranking, keywords,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;20,
+                --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
+                    creator, creator_tool, publisher, source, copyright, language,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.geo_location;40,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.gps;30,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.content_date;60,
+                --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.camera,
+                    color_space,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.metrics;50,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
+                    fe_groups,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
             'showitem' => '
-                               fileinfo, title, description, ranking, keywords,
-                                   --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
-                                       fe_groups,
-                               --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
-                                       creator, creator_tool, publisher, source, copyright, language,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.content_date;60,
-                               --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.audio,
-                                   duration
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    fileinfo, title, description, ranking, keywords,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
+                --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
+                    creator, creator_tool, publisher, source, copyright, language,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.content_date;60,
+                --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.audio,
+                    duration,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
+                    fe_groups,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
             'showitem' => '
-                               fileinfo, title, description, ranking, keywords,
-                                   --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
-                                       fe_groups,
-                               --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
-                                       creator, creator_tool, publisher, source, copyright, language,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.content_date;60,
-                               --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.video,
-                                       duration
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    fileinfo, title, description, ranking, keywords,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
+                --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
+                    creator, creator_tool, publisher, source, copyright, language,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.content_date;60,
+                --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.video,
+                    duration,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
+                    fe_groups,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
             'showitem' => '
-                               fileinfo, title, description, ranking, keywords,
-                                   --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
-                                       fe_groups,
-                               --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
-                                       creator, creator_tool, publisher, source, copyright, language,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.geo_location;40,
-                                       pages,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.metrics;50,
-                                       --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.content_date;60
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    fileinfo, title, description, ranking, keywords,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.accessibility;25,
+                --div--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:tabs.metadata,
+                    creator, creator_tool, publisher, source, copyright, language,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.geo_location;40,
+                    pages,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.metrics;50,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.content_date;60,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:filemetadata/Resources/Private/Language/locallang_tca.xlf:palette.visibility;10,
+                    fe_groups,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
     'palettes' => [
@@ -487,11 +523,3 @@ $tca = [
 ];
 
 $GLOBALS['TCA']['sys_file_metadata'] = array_replace_recursive($GLOBALS['TCA']['sys_file_metadata'], $tca);
-
-// Add category tab if categories column is present
-if (isset($GLOBALS['TCA']['sys_file_metadata']['columns']['categories'])) {
-    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
-        'sys_file_metadata',
-        '--div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_category.tabs.category,categories'
-    );
-}
diff --git a/typo3/sysext/filemetadata/Tests/Functional/Tca/FileMetadataVisibleFieldsTest.php b/typo3/sysext/filemetadata/Tests/Functional/Tca/FileMetadataVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..df184f3
--- /dev/null
@@ -0,0 +1,169 @@
+<?php
+namespace TYPO3\CMS\Filemetadata\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Resource\File;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class FileMetadataVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['filemetadata'];
+
+    protected static $fileMetadataFields = [
+        File::FILETYPE_UNKNOWN => [
+            'sys_language_uid',
+            'title',
+            'description',
+            'ranking',
+            'keywords',
+            'caption',
+            'download_name',
+            'visible',
+            'status',
+            'fe_groups',
+            'creator',
+            'creator_tool',
+            'publisher',
+            'source',
+            'copyright',
+            'location_country',
+            'location_region',
+            'location_city',
+            'categories',
+        ],
+        File::FILETYPE_TEXT => [
+            'sys_language_uid',
+            'title',
+            'description',
+            'ranking',
+            'keywords',
+            'caption',
+            'download_name',
+            'visible',
+            'status',
+            'fe_groups',
+            'creator',
+            'creator_tool',
+            'publisher',
+            'source',
+            'copyright',
+            'language',
+            'location_country',
+            'location_region',
+            'location_city',
+            'categories',
+        ],
+        File::FILETYPE_IMAGE => [
+            'sys_language_uid',
+            'title',
+            'description',
+            'ranking',
+            'keywords',
+            'alternative',
+            'caption',
+            'download_name',
+            'visible',
+            'status',
+            'fe_groups',
+            'creator',
+            'creator_tool',
+            'publisher',
+            'source',
+            'copyright',
+            'language',
+            'location_country',
+            'location_region',
+            'location_city',
+            'latitude',
+            'longitude',
+            'content_creation_date',
+            'content_modification_date',
+            'categories',
+        ],
+        File::FILETYPE_AUDIO => [
+            'sys_language_uid',
+            'title',
+            'description',
+            'ranking',
+            'keywords',
+            'caption',
+            'download_name',
+            'visible',
+            'status',
+            'fe_groups',
+            'creator',
+            'creator_tool',
+            'publisher',
+            'source',
+            'copyright',
+            'language',
+            'content_creation_date',
+            'content_modification_date',
+            'duration',
+            'categories',
+        ],
+        File::FILETYPE_VIDEO => [
+            'sys_language_uid',
+            'title',
+            'description',
+            'ranking',
+            'keywords',
+            'caption',
+            'download_name',
+            'visible',
+            'status',
+            'fe_groups',
+            'creator',
+            'creator_tool',
+            'publisher',
+            'source',
+            'copyright',
+            'language',
+            'content_creation_date',
+            'content_modification_date',
+            'duration',
+            'categories',
+        ],
+    ];
+
+    /**
+     * @test
+     */
+    public function fileMetadataFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+        $GLOBALS['TCA']['sys_file_metadata']['ctrl']['type'] = 'fileype';
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+
+        foreach (static::$fileMetadataFields as $filetype => $expectedFields) {
+            $formResult = $formEngineTestService->createNewRecordForm(
+                'sys_file_metadata',
+                ['fileype' => $filetype]
+            );
+
+            foreach ($expectedFields as $expectedField) {
+                $this->assertNotFalse(
+                    $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                    'The field ' . $expectedField . ' is not in the form HTML for file type ' . $filetype
+                );
+            }
+        }
+    }
+}
index 915a5b9..786ec67 100644 (file)
@@ -35,34 +35,34 @@ call_user_func(function () {
     ];
     $GLOBALS['TCA']['tt_content']['types']['textmedia'] = [
         'showitem' => '
-                               --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general,
-                               --palette--;' . $frontendLanguageFilePrefix . 'palette.header;header,
-                               bodytext;' . $frontendLanguageFilePrefix . 'bodytext_formlabel,
-                       --div--;' . $frontendLanguageFilePrefix . 'tabs.media,
-                               assets,
-                               --palette--;' . $frontendLanguageFilePrefix . 'palette.imagelinks;imagelinks,
-                       --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance,
-                               layout;' . $frontendLanguageFilePrefix . 'layout_formlabel,
-                               --palette--;' . $languageFilePrefix . 'tt_content.palette.mediaAdjustments;mediaAdjustments,
-                               --palette--;' . $languageFilePrefix . 'tt_content.palette.gallerySettings;gallerySettings,
-                               --palette--;' . $frontendLanguageFilePrefix . 'palette.appearanceLinks;appearanceLinks,
-                       --div--;' . $frontendLanguageFilePrefix . 'tabs.access,
-                               hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden,
-                               --palette--;' . $frontendLanguageFilePrefix . 'palette.access;access,
-                       --div--;' . $frontendLanguageFilePrefix . 'tabs.extended,rowDescription
-               ',
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general,
+                --palette--;' . $frontendLanguageFilePrefix . 'palette.header;header,
+                bodytext;' . $frontendLanguageFilePrefix . 'bodytext_formlabel,
+            --div--;' . $frontendLanguageFilePrefix . 'tabs.media,
+                assets,
+                --palette--;' . $frontendLanguageFilePrefix . 'palette.imagelinks;imagelinks,
+            --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance,
+                layout;' . $frontendLanguageFilePrefix . 'layout_formlabel,
+                --palette--;' . $languageFilePrefix . 'tt_content.palette.mediaAdjustments;mediaAdjustments,
+                --palette--;' . $languageFilePrefix . 'tt_content.palette.gallerySettings;gallerySettings,
+                --palette--;' . $frontendLanguageFilePrefix . 'palette.appearanceLinks;appearanceLinks,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                --palette--;;language,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                --palette--;;hidden,
+                --palette--;' . $frontendLanguageFilePrefix . 'palette.access;access,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                categories,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                rowDescription,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ',
         'columnsOverrides' => ['bodytext' => ['defaultExtras' => 'richtext:rte_transform']]
     ];
 
     $GLOBALS['TCA']['tt_content']['columns']['bodytext']['config']['search']['andWhere'] .= ' OR CType=\'textmedia\'';
 
-    // Add category tab when categories column exits
-    if (!empty($GLOBALS['TCA']['tt_content']['columns']['categories'])) {
-        $GLOBALS['TCA']['tt_content']['types']['textmedia']['showitem'] .=
-        ',--div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_category.tabs.category,
-                               categories';
-    }
-
     // Add table wizard
     $GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides']['bodytext']['defaultExtras'] = 'nowrap:wizards[table]';
 
index 79f5525..c2b9e85 100644 (file)
@@ -87,14 +87,22 @@ Then we configure the backend fields for our new content element:
    // Configure the default backend fields for the content element
    $GLOBALS['TCA']['tt_content']['types']['yourextensionkey_newcontentelement'] = array(
       'showitem' => '
-            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:palette.general;general,
-            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:palette.header;header,
-         --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:tabs.appearance,
-            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:palette.frames;frames,
-         --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:tabs.access,
-            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:palette.visibility;visibility,
-            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:palette.access;access,
-         --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xml:tabs.extended
+         --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+            --palette--;;language,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+            --palette--;;hidden,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+            categories,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+            rowDescription,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
    ');
 
 .. _AddingCE-TCA-Overrides-sys_template:
diff --git a/typo3/sysext/fluid_styled_content/Tests/Functional/Tca/ContentVisibleFieldsTest.php b/typo3/sysext/fluid_styled_content/Tests/Functional/Tca/ContentVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..f162291
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+namespace TYPO3\CMS\FluidStyledContent\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class ContentVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['fluid_styled_content'];
+
+    protected static $contentFields = [
+        'CType',
+        'colPos',
+        'sys_language_uid',
+        'header',
+        'header_layout',
+        'date',
+        'header_link',
+        'bodytext',
+        'assets',
+        'image_zoom',
+        'layout',
+        'imagewidth',
+        'imageheight',
+        'imageborder',
+        'imageorient',
+        'imagecols',
+        'sectionIndex',
+        'linkToTop',
+        'hidden',
+        'starttime',
+        'endtime',
+        'fe_group',
+        'editlock',
+        'rowDescription',
+        'categories',
+    ];
+
+    /**
+     * @test
+     */
+    public function contentFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+
+        $formResult = $formEngineTestService->createNewRecordForm('tt_content', ['CType' => 'textmedia']);
+
+        foreach (static::$contentFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
index 99ec0cd..c04d725 100644 (file)
@@ -9,18 +9,26 @@ call_user_func(function () {
         'form_formframework'
     );
 
-    $GLOBALS['TCA']['tt_content']['types']['form_formframework']['showitem'] =
-        '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,'
-        . '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,rowDescription,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin,pi_flexform,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,'
-        . '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.visibility;visibility,'
-        . '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,'
-        . '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.behaviour,'
-        . '--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended';
-
+    $GLOBALS['TCA']['tt_content']['types']['form_formframework']['showitem'] = '
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin,
+            pi_flexform,
+        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+            --palette--;;language,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+            --palette--;;hidden,
+            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+            categories,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+            rowDescription,
+        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+    ';
     // Register the plugin
     \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
         'TYPO3.CMS.Form',
diff --git a/typo3/sysext/frontend/Configuration/TCA/Overrides/tt_content.php b/typo3/sysext/frontend/Configuration/TCA/Overrides/tt_content.php
new file mode 100644 (file)
index 0000000..61aa208
--- /dev/null
@@ -0,0 +1,10 @@
+
+<?php
+\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable(
+    'core',
+    'tt_content',
+    'categories',
+    [
+        'position' => 'replace:categories'
+    ]
+);
index 7ca350f..0277803 100644 (file)
@@ -72,9 +72,15 @@ return [
     ],
     'types' => [
         '1' => [
-            'showitem' => 'title,icon,config,
-            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:backend_layout.tabs.access, hidden,
-            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:backend_layout.tabs.extended, description',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    title,icon,config,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ]
 ];
index 19b420b..4a915d7 100644 (file)
@@ -85,9 +85,15 @@ return [
     ],
     'types' => [
         '0' => ['showitem' => '
-                       hidden,title,description,subgroup,
-                       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_groups.tabs.options, lockToDomain, TSconfig,
-                       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_groups.tabs.extended
-               ']
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                title,subgroup,
+            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_groups.tabs.options,
+                lockToDomain, TSconfig,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
     ]
 ];
index a83a950..a5bf61b 100644 (file)
@@ -273,16 +273,20 @@ return [
     'types' => [
         '0' => [
             'showitem' => '
-                               disable, username, password, usergroup, lastlogin,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_users.tabs.personelData, company, --palette--;;1, name, --palette--;;2, address, zip, city, country, telephone, fax, email, www, image,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_users.tabs.options, lockToDomain, TSconfig,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_users.tabs.access, starttime, endtime,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_users.tabs.extended
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    username,password,usergroup,lastlogin,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_users.tabs.personelData,
+                    company, title, name, --palette--;;2, address, zip, city, country, telephone, fax, email, www, image,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:fe_users.tabs.options,
+                    lockToDomain, TSconfig,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    disable,--palette--;;timeRestriction,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
     'palettes' => [
-        '1' => ['showitem' => 'title'],
+        'timeRestriction' => ['showitem' => 'starttime, endtime'],
         '2' => ['showitem' => 'first_name,--linebreak--,middle_name,--linebreak--,last_name']
     ]
 ];
index 82c8d04..845c207 100644 (file)
@@ -267,95 +267,125 @@ return [
     'types' => [
         // normal
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_DEFAULT => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.metatags;metatags,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.metatags;metatags,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    sys_language_uid,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // external URL
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_LINK => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.external;external,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    doktype,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.external;external,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    sys_language_uid,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // shortcut
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_SHORTCUT => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.shortcut;shortcut,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.shortcutpage;shortcutpage,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-                               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    doktype,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.shortcut;shortcut,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.shortcutpage;shortcutpage,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    sys_language_uid,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // mount page
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_MOUNTPOINT => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;title,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.abstract;abstract,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;editorial,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    sys_language_uid,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // spacer
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_SPACER => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-                       '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    sys_language_uid,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // sysfolder
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_SYSFOLDER => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.resources,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.media;media,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    sys_language_uid,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         // trash
         (string)\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_RECYCLER => [
-            'showitem' => '--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.access,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
-               '
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.standard;standard,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.title;titleonly,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    sys_language_uid,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.visibility;hiddenonly,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ]
     ],
     'palettes' => [
@@ -363,16 +393,16 @@ return [
             'showitem' => 'author,author_email',
         ],
         'standard' => [
-            'showitem' => 'doktype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.doktype_formlabel, sys_language_uid',
+            'showitem' => 'doktype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.doktype_formlabel',
         ],
         'shortcut' => [
-            'showitem' => 'doktype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.doktype_formlabel, sys_language_uid, shortcut_mode;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.shortcut_mode_formlabel',
+            'showitem' => 'shortcut_mode;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.shortcut_mode_formlabel',
         ],
         'shortcutpage' => [
             'showitem' => 'shortcut;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.shortcut_formlabel',
         ],
         'external' => [
-            'showitem' => 'doktype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.doktype_formlabel, sys_language_uid, urltype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.urltype_formlabel, url;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.url_formlabel',
+            'showitem' => 'urltype;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.urltype_formlabel, url;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.url_formlabel',
         ],
         'title' => [
             'showitem' => 'title;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.title_formlabel, --linebreak--, nav_title;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.nav_title_formlabel, --linebreak--, subtitle;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.subtitle_formlabel',
index 7c127d5..5de2d89 100644 (file)
@@ -83,7 +83,13 @@ return [
     ],
     'types' => [
         '1' => [
-            'showitem' => 'hidden, domainName, --palette--;;1, prepend_params, forced',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    domainName,--palette--;;1, prepend_params, forced,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
     'palettes' => [
index bbc9b6c..30ffb84 100644 (file)
@@ -231,9 +231,20 @@ return [
     ],
     'types' => [
         '1' => ['showitem' => '
-                       hidden, title, sitetitle, constants, config, description,
-                       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_template.tabs.options, clear, root, nextLevel,
-                       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_template.tabs.include, includeStaticAfterBasedOn, include_static_file, basedOn, static_file_mode,
-                       --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_template.tabs.access, starttime, endtime']
-    ]
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                title, sitetitle, constants, config,
+            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_template.tabs.options,
+                clear, root, nextLevel,
+            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:sys_template.tabs.include,
+                includeStaticAfterBasedOn, include_static_file, basedOn, static_file_mode,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,--palette--;;timeRestriction,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
+    ],
+    'palettes' => [
+        'timeRestriction' => ['showitem' => 'starttime, endtime'],
+    ],
 ];
index e81418d..ba72c9e 100644 (file)
@@ -441,33 +441,33 @@ return [
                 'foreign_types' => [
                     '0' => [
                         'showitem' => '
-                                                       --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                                                       --palette--;;filePalette'
+                            --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
                     ],
                     \TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
                         'showitem' => '
-                                                       --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                                                       --palette--;;filePalette'
+                            --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
                     ],
                     \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
                         'showitem' => '
-                                                       --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                                                       --palette--;;filePalette'
+                            --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
                     ],
                     \TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
                         'showitem' => '
-                                                       --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.audioOverlayPalette;audioOverlayPalette,
-                                                       --palette--;;filePalette'
+                            --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.audioOverlayPalette;audioOverlayPalette,
+                            --palette--;;filePalette'
                     ],
                     \TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
                         'showitem' => '
-                                                       --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.videoOverlayPalette;videoOverlayPalette,
-                                                       --palette--;;filePalette'
+                            --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.videoOverlayPalette;videoOverlayPalette,
+                            --palette--;;filePalette'
                     ],
                     \TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
                         'showitem' => '
-                                                       --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
-                                                       --palette--;;filePalette'
+                            --palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
+                            --palette--;;filePalette'
                     ]
                 ]
             ], $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'])
@@ -941,24 +941,24 @@ return [
                 'ds_pointerField' => 'list_type,CType',
                 'ds' => [
                     'default' => '
-                                               <T3DataStructure>
-                                                 <ROOT>
-                                                   <type>array</type>
-                                                   <el>
-                                                               <!-- Repeat an element like "xmlTitle" beneath for as many elements you like. Remember to name them uniquely  -->
-                                                     <xmlTitle>
-                                                               <TCEforms>
-                                                                       <label>The Title:</label>
-                                                                       <config>
-                                                                               <type>input</type>
-                                                                               <size>48</size>
-                                                                       </config>
-                                                               </TCEforms>
-                                                     </xmlTitle>
-                                                   </el>
-                                                 </ROOT>
-                                               </T3DataStructure>
-                                       '
+                        <T3DataStructure>
+                          <ROOT>
+                            <type>array</type>
+                            <el>
+                                <!-- Repeat an element like "xmlTitle" beneath for as many elements you like. Remember to name them uniquely  -->
+                              <xmlTitle>
+                                <TCEforms>
+                                    <label>The Title:</label>
+                                    <config>
+                                        <type>input</type>
+                                        <size>48</size>
+                                    </config>
+                                </TCEforms>
+                              </xmlTitle>
+                            </el>
+                          </ROOT>
+                        </T3DataStructure>
+                    '
                 ],
                 'search' => [
                     'andWhere' => 'CType=\'list\''
@@ -1106,76 +1106,111 @@ return [
         ],
         'bullets' => [
             'showitem' => '
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-                                       bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.bulletlist_formlabel,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-                                       layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+                    bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.bulletlist_formlabel,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                    layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;hidden,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    rowDescription,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
             'columnsOverrides' => ['bodytext' => ['defaultExtras' => 'nowrap']]
         ],
         'div' => [
             'showitem' => '
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                       header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.div_formlabel,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-                                       layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
-                       '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                    header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.div_formlabel,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                    layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;hidden,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    rowDescription,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         'header' => [
             'showitem' => '
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.headers;headers,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-                                       layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
-                       '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.headers;headers,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                    layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;hidden,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    rowDescription,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         'html' => [
             'showitem' => '
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                       header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.html_formlabel,
-                                       bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.html_formlabel,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-                                       layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
-                       '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                    header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.html_formlabel,
+                    bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.html_formlabel,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                    layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;hidden,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    rowDescription,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         'list' => [
             'showitem' => '
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin,
-                                       list_type;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:list_type_formlabel,
-                                       select_key;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:select_key_formlabel,
-                                       pages;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pages.ALT.list_formlabel,
-                                       recursive,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-                                       layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin,
+                    list_type;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:list_type_formlabel,
+                    select_key;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:select_key_formlabel,
+                    pages;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pages.ALT.list_formlabel,
+                    recursive,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                    layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;hidden,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    rowDescription,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
             'subtype_value_field' => 'list_type',
             'subtypes_excludelist' => [
                 '3' => 'layout',
@@ -1194,19 +1229,26 @@ return [
         ],
         'menu' => [
             'showitem' => '
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu;menu,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-                                       layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.accessibility,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu_accessibility;menu_accessibility,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
-                       ',
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu;menu,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                    layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.accessibility,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu_accessibility;menu_accessibility,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;hidden,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    rowDescription,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
             'subtype_value_field' => 'menu_type',
             'subtypes_excludelist' => [
                 '2' => 'pages',
@@ -1220,145 +1262,173 @@ return [
         ],
         'shortcut' => [
             'showitem' => '
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                       header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.shortcut_formlabel,
-                                       records;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:records_formlabel,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-                                       layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
-                       '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                    header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.shortcut_formlabel,
+                    records;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:records_formlabel,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                    layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;hidden,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    rowDescription,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         'table' => [
             'showitem' => '
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-                                       bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.table.bodytext,
-                                       --palette--;;tableconfiguration,
-                                       table_caption,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-                                       layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.table_layout;tablelayout,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
-                       '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+                    bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.table.bodytext,
+                    --palette--;;tableconfiguration,
+                    table_caption,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                    layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.table_layout;tablelayout,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;hidden,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    rowDescription,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ],
         'uploads' => [
             'showitem' => '
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:media;uploads,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-                                       layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.uploads_layout;uploadslayout,
-                                        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access,
-                                       hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden,
-                                       --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-                               --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.extended,rowDescription
-                       '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:media;uploads,
+                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                    layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.uploads_layout;uploadslayout,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    --palette--;;language,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    --palette--;;hidden,
+                    --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                    categories,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    rowDescription,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            '
         ]
     ],
     'palettes' => [
         'general' => [
             'showitem' => '
-                               CType;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType_formlabel,
-                               colPos;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:colPos_formlabel,
-                               sys_language_uid;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:sys_language_uid_formlabel,
-                               --linebreak--,
-                               l18n_parent
-                       ',
+                CType;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType_formlabel,
+                colPos;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:colPos_formlabel,
+            ',
         ],
         'header' => [
             'showitem' => '
-                               header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
-                               --linebreak--,
-                               header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
-                               date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
-                               --linebreak--,
-                               header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel
-                       ',
+                header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
+                --linebreak--,
+                header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
+                date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
+                --linebreak--,
+                header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel
+            ',
         ],
         'headers' => [
             'showitem' => '
-                               header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
-                               --linebreak--,
-                               header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
-                               date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
-                               --linebreak--,
-                               header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel,
-                               --linebreak--,
-                               subheader;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:subheader_formlabel
-                       ',
+                header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
+                --linebreak--,
+                header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
+                date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
+                --linebreak--,
+                header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel,
+                --linebreak--,
+                subheader;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:subheader_formlabel
+            ',
         ],
         'imagelinks' => [
             'showitem' => '
-                               image_zoom;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_zoom_formlabel
-                       ',
+                image_zoom;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_zoom_formlabel
+            ',
         ],
         'uploads' => [
             'showitem' => '
-                               media;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:media.ALT.uploads_formlabel,
-                               --linebreak--,
-                               file_collections;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:file_collections.ALT.uploads_formlabel,
-                               --linebreak--,
-                               filelink_sorting,
-                               target
-                       ',
+                media;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:media.ALT.uploads_formlabel,
+                --linebreak--,
+                file_collections;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:file_collections.ALT.uploads_formlabel,
+                --linebreak--,
+                filelink_sorting,
+                target
+            ',
         ],
         'menu' => [
             'showitem' => '
-                               menu_type;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type_formlabel,
-                               --linebreak--,
-                               pages;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pages.ALT.menu_formlabel
-                       ',
+                menu_type;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type_formlabel,
+                --linebreak--,
+                pages;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pages.ALT.menu_formlabel
+            ',
         ],
         'menu_accessibility' => [
             'showitem' => '
-                               accessibility_title;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu.ALT.accessibility_title_formlabel,
-                               --linebreak--,
-                               accessibility_bypass;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu.ALT.accessibility_bypass_formlabel,
-                               accessibility_bypass_text;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu.ALT.accessibility_bypass_text_formlabel
-                       ',
+                accessibility_title;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu.ALT.accessibility_title_formlabel,
+                --linebreak--,
+                accessibility_bypass;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu.ALT.accessibility_bypass_formlabel,
+                accessibility_bypass_text;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu.ALT.accessibility_bypass_text_formlabel
+            ',
+        ],
+        'hidden' => [
+            'showitem' => '
+                hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:field.default.hidden
+            ',
+        ],
+        'language' => [
+            'showitem' => '
+                sys_language_uid;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:sys_language_uid_formlabel,l18n_parent
+            ',
         ],
         'access' => [
             'showitem' => '
-                               starttime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:starttime_formlabel,
-                               endtime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:endtime_formlabel,
-                               --linebreak--,
-                               fe_group;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:fe_group_formlabel,
-                               --linebreak--,editlock
-                       ',
+                starttime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:starttime_formlabel,
+                endtime;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:endtime_formlabel,
+                --linebreak--,
+                fe_group;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:fe_group_formlabel,
+                --linebreak--,editlock
+            ',
         ],
         'uploadslayout' => [
             'showitem' => '
-                               filelink_size;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:filelink_size_formlabel
-                       ',
+                filelink_size;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:filelink_size_formlabel
+            ',
         ],
         'appearanceLinks' => [
             'showitem' => '
-                               sectionIndex;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:sectionIndex_formlabel,
-                               linkToTop;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:linkToTop_formlabel
-                       '
+                sectionIndex;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:sectionIndex_formlabel,
+                linkToTop;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:linkToTop_formlabel
+            '
         ],
         'tableconfiguration' => [
             'showitem' => '
-                               table_delimiter,
-                               table_enclosure
-                       '
+                table_delimiter,
+                table_enclosure
+            '
         ],
         'tablelayout' => [
             'showitem' => '
-                               cols,
-                               table_header_position,
-                               table_tfoot
-                       '
+                cols,
+                table_header_position,
+                table_tfoot
+            '
         ]
     ]
 ];
diff --git a/typo3/sysext/frontend/Tests/Functional/Tca/BackendLayoutVisibleFieldsTest.php b/typo3/sysext/frontend/Tests/Functional/Tca/BackendLayoutVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..73ca8b3
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+namespace TYPO3\CMS\Frontend\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class BackendLayoutVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $backendLayoutFields = [
+        'title',
+        'icon',
+        'config',
+        'hidden',
+        'description',
+    ];
+
+    /**
+     * @test
+     */
+    public function backendLayoutsFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('backend_layout');
+
+        foreach (static::$backendLayoutFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/frontend/Tests/Functional/Tca/ContentVisibleFieldsTest.php b/typo3/sysext/frontend/Tests/Functional/Tca/ContentVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..df649ff
--- /dev/null
@@ -0,0 +1,159 @@
+<?php
+namespace TYPO3\CMS\Frontend\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class ContentVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $commonContentFields = [
+        'CType',
+        'colPos',
+        'sys_language_uid',
+        'layout',
+        'hidden',
+        'sectionIndex',
+        'linkToTop',
+        'starttime',
+        'endtime',
+        'fe_group',
+        'editlock',
+        'rowDescription',
+        'categories',
+    ];
+
+    protected static $headerFields = [
+        'header',
+        'header_layout',
+        'date',
+        'header_link',
+    ];
+
+    protected static $imageFields = [
+        'image',
+        'image_zoom',
+        'imagewidth',
+        'imageheight',
+        'imageborder',
+        'image_compression',
+        'image_effects',
+        'imageorient',
+        'imagecols',
+        'image_noRows',
+    ];
+
+    protected static $contentFieldsByType = [
+        'header' => [
+            'additionalFields' => ['subheader'],
+        ],
+        'bullets' => [
+            'additionalFields' => ['bodytext'],
+        ],
+        'table' => [
+            'additionalFields' => [
+                'bodytext',
+                'table_delimiter',
+                'table_enclosure',
+                'table_caption',
+                'table_caption',
+                'cols',
+                'table_header_position',
+                'table_tfoot',
+            ],
+        ],
+        'uploads' => [
+            'additionalFields' => [
+                'media',
+                'file_collections',
+                'filelink_sorting',
+                'target',
+            ],
+        ],
+        'menu' => [
+            'additionalFields' => [
+                'menu_type',
+                'pages',
+                'accessibility_title',
+                'accessibility_bypass',
+                'accessibility_bypass_text',
+            ],
+        ],
+        'shortcut' => [
+            'additionalFields' => [
+                'header',
+                'records'
+            ],
+            'disableHeaderFields' => true,
+        ],
+        'list' => [
+            'additionalFields' => [
+                'list_type',
+                'select_key',
+                'pages',
+                'recursive',
+            ],
+        ],
+        'div' => [
+            'additionalFields' => [
+                'header',
+            ],
+            'disableHeaderFields' => true,
+        ],
+        'html' => [
+            'additionalFields' => [
+                'bodytext',
+            ],
+            'disableHeaderFields' => true,
+        ],
+    ];
+
+    /**
+     * @test
+     */
+    public function contentFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+
+        foreach (static::$contentFieldsByType as $contentType => $fieldConfig) {
+            $expectedFields = static::$commonContentFields;
+
+            if (empty($fieldConfig['disableHeaderFields'])) {
+                $expectedFields = array_merge($expectedFields, static::$headerFields);
+            }
+
+            if (!empty($fieldConfig['useImageFields'])) {
+                $expectedFields = array_merge($expectedFields, static::$imageFields);
+            }
+
+            if (!empty($fieldConfig['additionalFields'])) {
+                $expectedFields = array_merge($expectedFields, $fieldConfig['additionalFields']);
+            }
+
+            $formResult = $formEngineTestService->createNewRecordForm('tt_content', ['CType' => $contentType]);
+            foreach ($expectedFields as $expectedField) {
+                $this->assertNotFalse(
+                    $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                    'The field ' . $expectedField . ' is not in the form HTML'
+                );
+            }
+        }
+    }
+}
diff --git a/typo3/sysext/frontend/Tests/Functional/Tca/DomainVisibleFieldsTest.php b/typo3/sysext/frontend/Tests/Functional/Tca/DomainVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..7dcf6f8
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+namespace TYPO3\CMS\Frontend\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class DomainVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $domainFields = [
+        'hidden',
+        'domainName',
+        'redirectTo',
+        'redirectHttpStatusCode',
+        'prepend_params',
+        'forced',
+    ];
+
+    /**
+     * @test
+     */
+    public function domainFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_domain');
+
+        foreach (static::$domainFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/frontend/Tests/Functional/Tca/FrontendGroupsVisibleFieldsTest.php b/typo3/sysext/frontend/Tests/Functional/Tca/FrontendGroupsVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..b356034
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+namespace TYPO3\CMS\Frontend\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class FrontendGroupsVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $frontendGroupFields = [
+        'hidden',
+        'title',
+        'description',
+        'subgroup',
+        'lockToDomain',
+        'TSconfig',
+        'tx_extbase_type',
+    ];
+
+    /**
+     * @test
+     */
+    public function frontendGroupsFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('fe_groups');
+
+        foreach (static::$frontendGroupFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/frontend/Tests/Functional/Tca/FrontendUsersVisibleFieldsTest.php b/typo3/sysext/frontend/Tests/Functional/Tca/FrontendUsersVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..1e89730
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+namespace TYPO3\CMS\Frontend\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class FrontendUsersVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $frontendUsersFields = [
+        'disable',
+        'username',
+        'password',
+        'usergroup',
+        'company',
+        'title',
+        'name',
+        'first_name',
+        'middle_name',
+        'last_name',
+        'address',
+        'zip',
+        'city',
+        'country',
+        'telephone',
+        'fax',
+        'email',
+        'www',
+        'image',
+        'lockToDomain',
+        'TSconfig',
+        'starttime',
+        'endtime',
+        'tx_extbase_type',
+    ];
+
+    /**
+     * @test
+     */
+    public function frontendUsersFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('fe_users');
+
+        foreach (static::$frontendUsersFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+
+        $this->assertNotFalse(
+            strpos($formResult['html'], 'Last login'),
+            'The field Last login is not in the HTML'
+        );
+    }
+}
diff --git a/typo3/sysext/frontend/Tests/Functional/Tca/PagesLanguageOverlayVisibleFieldsTest.php b/typo3/sysext/frontend/Tests/Functional/Tca/PagesLanguageOverlayVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..76ab775
--- /dev/null
@@ -0,0 +1,190 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Frontend\Page\PageRepository;
+use TYPO3\CMS\Lang\LanguageService;
+
+class PagesLanguageOverlayVisibleFieldsTest extends FunctionalTestCase
+{
+    /**
+     * These form fields a visisble in the default page types.
+     *
+     * @var array
+     */
+    protected static $defaultPagesLanguageOverlayFields = [
+        'title',
+        'nav_title',
+        'subtitle',
+        'hidden',
+        'starttime',
+        'endtime',
+        'abstract',
+        'keywords',
+        'description',
+        'author',
+        'author_email',
+        'media',
+    ];
+
+    /**
+     * Configuration of hidden / additional form fields per page type.
+     *
+     * @var array
+     */
+    protected static $pageFormFields = [
+        PageRepository::DOKTYPE_BE_USER_SECTION => [],
+        PageRepository::DOKTYPE_DEFAULT => [],
+        PageRepository::DOKTYPE_SHORTCUT => [
+            'additionalFields' => [
+                'shortcut_mode',
+                'shortcut',
+            ],
+            'hiddenFields' => [
+                'keywords',
+                'description',
+                'content_from_pid',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'module',
+            ],
+        ],
+        PageRepository::DOKTYPE_MOUNTPOINT => [
+            'hiddenFields' => [
+                'keywords',
+                'description',
+                'content_from_pid',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'module',
+            ],
+        ],
+        PageRepository::DOKTYPE_LINK => [
+            'additionalFields' => [
+                'urltype',
+                'url',
+            ],
+            'hiddenFields' => [
+                'keywords',
+                'description',
+                'content_from_pid',
+                'cache_timeout',
+                'cache_tags',
+                'no_cache',
+                'module',
+            ],
+        ],
+        PageRepository::DOKTYPE_SYSFOLDER => [
+            'hiddenFields' => [
+                'nav_title',
+                'subtitle',
+                'starttime',
+                'endtime',
+                'abstract',
+                'keywords',
+                'description',
+                'author',
+                'author_email',
+            ],
+        ],
+        PageRepository::DOKTYPE_RECYCLER => [
+            'hiddenFields' => [
+                'nav_title',
+                'subtitle',
+                'starttime',
+                'endtime',
+                'abstract',
+                'keywords',
+                'description',
+                'author',
+                'author_email',
+                'media',
+            ],
+        ],
+        PageRepository::DOKTYPE_SPACER => [
+            'hiddenFields' => [
+                'nav_title',
+                'subtitle',
+                'abstract',
+                'keywords',
+                'description',
+                'author',
+                'author_email',
+                'media',
+            ],
+        ],
+    ];
+
+    /**
+     * @return array
+     */
+    public function pagesLanguageOverlayFormContainsExpectedFieldsDataProvider(): array
+    {
+        $pageTypes = [];
+
+        foreach (static::$pageFormFields as $doktype => $fieldConfig) {
+            $expectedFields = static::$defaultPagesLanguageOverlayFields;
+            $hiddenFields = [];
+            if (array_key_exists('additionalFields', $fieldConfig)) {
+                $expectedFields = array_merge($expectedFields, $fieldConfig['additionalFields']);
+            }
+            if (array_key_exists('hiddenFields', $fieldConfig)) {
+                $hiddenFields = $fieldConfig['hiddenFields'];
+                $expectedFields = array_diff($expectedFields, $hiddenFields);
+            }
+            $pageTypes['page doktype ' . $doktype] = [$doktype, $expectedFields, $hiddenFields];
+        }
+
+        return $pageTypes;
+    }
+
+    /**
+     * @test
+     * @dataProvider pagesLanguageOverlayFormContainsExpectedFieldsDataProvider
+     * @param int $doktype
+     * @param array $expectedFields
+     * @param array $hiddenFields
+     */
+    public function pagesLanguageOverlayFormContainsExpectedFields(
+        int $doktype,
+        array $expectedFields,
+        array $hiddenFields
+    ) {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('pages_language_overlay', ['doktype' => $doktype]);
+
+        foreach ($expectedFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+
+        foreach ($hiddenFields as $hiddenField) {
+            $this->assertFalse(
+                $formEngineTestService->formHtmlContainsField($hiddenField, $formResult['html']),
+                'The field ' . $hiddenField . ' is in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/frontend/Tests/Functional/Tca/TemplateVisibleFieldsTest.php b/typo3/sysext/frontend/Tests/Functional/Tca/TemplateVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..3d8e303
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+namespace TYPO3\CMS\Frontend\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class TemplateVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $templateFields = [
+        'hidden',
+        'title',
+        'sitetitle',
+        'constants',
+        'config',
+        'description',
+        'clear',
+        'root',
+        'nextLevel',
+        'includeStaticAfterBasedOn',
+        'include_static_file',
+        'basedOn',
+        'static_file_mode',
+        'starttime',
+        'endtime',
+    ];
+
+    /**
+     * @test
+     */
+    public function templateFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_template');
+
+        foreach (static::$templateFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
index 29a5610..c8eb7c0 100644 (file)
@@ -241,27 +241,70 @@ return [
     ],
     'types' => [
         '0' => [
-            'showitem' => 'title, --palette--;;1, description, timer_next_indexing, timer_offset, timer_frequency, set_id, type',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,timer_next_indexing, timer_offset, timer_frequency, set_id,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,starttime,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         '1' => [
-            'showitem' => 'title, --palette--;;1, description, timer_next_indexing, timer_offset, timer_frequency, set_id, type, table2index, alternative_source_pid, fieldlist, get_params, chashcalc,recordsbatch,records_indexonchange',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,timer_next_indexing, timer_offset, timer_frequency, set_id, table2index, alternative_source_pid, fieldlist, get_params, chashcalc,recordsbatch,records_indexonchange,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,starttime,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         '2' => [
-            'showitem' => 'title, --palette--;;1, description, timer_next_indexing, timer_offset, timer_frequency, set_id, type, filepath, extensions, depth',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,timer_next_indexing, timer_offset, timer_frequency, set_id, filepath, extensions, depth,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,starttime,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         '3' => [
-            'showitem' => 'title, --palette--;;1, timer_next_indexing, timer_offset, timer_frequency, set_id, type, externalUrl, depth, url_deny',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type, title, timer_next_indexing, timer_offset, timer_frequency, set_id, externalUrl, depth, url_deny,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,starttime,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         '4' => [
-            'showitem' => 'title, --palette--;;1, description, timer_next_indexing, timer_offset, timer_frequency, set_id, type, alternative_source_pid;LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.rootpage, depth',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,timer_next_indexing, timer_offset, timer_frequency, set_id, alternative_source_pid;LLL:EXT:indexed_search/Resources/Private/Language/locallang_db.xlf:index_config.rootpage, depth,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,starttime,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
         '5' => [
-            'showitem' => 'title, description, type, indexcfgs',
-        ],
-    ],
-    'palettes' => [
-        '1' => [
-            'showitem' => 'starttime, hidden',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type,title,indexcfgs,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,starttime,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
 ];
diff --git a/typo3/sysext/indexed_search/Tests/Functional/Tca/IndexConfigVisibleFieldsTest.php b/typo3/sysext/indexed_search/Tests/Functional/Tca/IndexConfigVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..fe19c61
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+namespace TYPO3\CMS\IndexedSearch\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class IndexConfigVisibleFieldsTest extends FunctionalTestCase
+{
+    protected static $commonIndexConfigFields = [
+        'title',
+        'starttime',
+        'hidden',
+        'description',
+        'timer_next_indexing',
+        'timer_offset',
+        'timer_frequency',
+        'type',
+    ];
+
+    protected static $indexConfigFieldsByType = [
+        '0' => [],
+        '1' => [
+            'table2index',
+            'alternative_source_pid',
+            'fieldlist',
+            'get_params',
+            'chashcalc',
+            'recordsbatch',
+            'records_indexonchange',
+        ],
+        '2' => [
+            'filepath',
+            'extensions',
+            'depth',
+        ],
+        '3' => [
+            'externalUrl',
+            'depth',
+            'url_deny',
+        ],
+        '4' => [
+            'alternative_source_pid',
+            'depth',
+        ],
+    ];
+
+    protected static $metaIndexConfigFields = [
+        'title',
+        'description',
+        'type',
+        'indexcfgs',
+    ];
+
+    protected $coreExtensionsToLoad = ['indexed_search'];
+
+    /**
+     * @test
+     */
+    public function indexConfigFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+
+        foreach (static::$indexConfigFieldsByType as $type => $additionalFields) {
+            $formResult = $formEngineTestService->createNewRecordForm('index_config', ['type' => $type]);
+            $expectedFields = array_merge(static::$commonIndexConfigFields, $additionalFields);
+
+            foreach ($expectedFields as $expectedField) {
+                $this->assertNotFalse(
+                    $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                    'The field ' . $expectedField . ' is not in the form HTML for index type ' . $type
+                );
+            }
+
+            $this->assertNotFalse(
+                strpos($formResult['html'], 'Session ID'),
+                'The field Session ID is not in the form HTML'
+            );
+        }
+    }
+
+    /**
+     * @test
+     */
+    public function indexConfigFormContainsExpectedFieldsForMetaConfiguration()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('index_config', ['type' => '5']);
+
+        foreach (static::$metaIndexConfigFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML for index type ' . $type
+            );
+        }
+    }
+}
index f0700d2..0403883 100644 (file)
@@ -96,7 +96,15 @@ return [
     ],
     'types' => [
         '0' => [
-            'showitem' => 'hidden, --palette--;;1, sys_language_uid, type, term, acronym',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    type, term, acronym,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                    sys_language_uid,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,--palette--;;1,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
     'palettes' => [
diff --git a/typo3/sysext/rtehtmlarea/Tests/Functional/Tca/AcronymVisibleFieldsTest.php b/typo3/sysext/rtehtmlarea/Tests/Functional/Tca/AcronymVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..bff2320
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+namespace TYPO3\CMS\Rtehtmlarea\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class AcronymVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['rtehtmlarea'];
+
+    protected static $acronymFields = [
+        'hidden',
+        'starttime',
+        'endtime',
+        'sys_language_uid',
+        'type',
+        'term',
+        'acronym',
+    ];
+
+    /**
+     * @test
+     */
+    public function acronymFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('tx_rtehtmlarea_acronym');
+
+        foreach (static::$acronymFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
index 1f2dec8..9d1b37e 100644 (file)
@@ -49,7 +49,15 @@ return [
     ],
     'types' => [
         '1' => [
-            'showitem' => 'hidden, groupName, description',
+            'showitem' => '
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                    groupName,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                    hidden,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                    description,
+                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+            ',
         ],
     ],
 ];
diff --git a/typo3/sysext/scheduler/Tests/Functional/Tca/TaskGroupVisibleFieldsTest.php b/typo3/sysext/scheduler/Tests/Functional/Tca/TaskGroupVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..2df8fdc
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+namespace TYPO3\CMS\Scheduler\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class TaskGroupVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['scheduler'];
+
+    protected static $taskGroupFields = [
+        'hidden',
+        'groupName',
+        'description',
+    ];
+
+    /**
+     * @test
+     */
+    public function taskGroupFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('tx_scheduler_task_group');
+
+        foreach (static::$taskGroupFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
index 59760eb..791a0e5 100644 (file)
@@ -170,64 +170,59 @@ return [
     ],
     'types' => [
         '0' => ['showitem' => '
-                       type,
-                       title,
-                       description,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.access,
-                               hidden,
-                               assign_to_groups
-               '],
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                type,title,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,assign_to_groups,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        '],
         '1' => ['showitem' => '
-                       type,
-                       title,
-                       description,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.create_user.settings,
-                               t1_userprefix,t1_copy_of_user,
-                               t1_allowed_groups,
-                               t1_create_user_dir,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.access,
-                               hidden,
-                               assign_to_groups
-               '],
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                type,title,    t1_userprefix,t1_copy_of_user,t1_allowed_groups,t1_create_user_dir,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,assign_to_groups,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        '],
         '2' => ['showitem' => '
-                       type,
-                       title,
-                       description,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.access,
-                               hidden,
-                               assign_to_groups
-               '],
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                type,title,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,assign_to_groups,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        '],
         '3' => ['showitem' => '
-                       type,
-                       title,
-                       description,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.record_list.settings,
-                               t3_listPid,
-                               t3_tables,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.access,
-                               hidden,
-                               assign_to_groups
-               '],
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                type,title,t3_listPid,t3_tables,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,assign_to_groups,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        '],
         '4' => ['showitem' => '
-                       type,
-                       title,
-                       description,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.edit_records.settings,
-                               t4_recordsToEdit,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.access,
-                               hidden,
-                               assign_to_groups
-               '],
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                type,title,t4_recordsToEdit,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,assign_to_groups,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        '],
         '5' => ['showitem' => '
-                       type,
-                       title,
-                       description,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.new_record.settings,
-                               t3_listPid;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.new_record.pid,
-                               t3_tables;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.new_record.tablename,
-                       --div--;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.tab.access,
-                               hidden,
-                               assign_to_groups
-               ']
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                type,title,t3_listPid;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.new_record.pid,
+                t3_tables;LLL:EXT:sys_action/Resources/Private/Language/locallang_tca.xlf:sys_action.new_record.tablename,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                hidden,assign_to_groups,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
     ]
 ];
diff --git a/typo3/sysext/sys_action/Tests/Functional/Tca/ActionVisibleFieldsTest.php b/typo3/sysext/sys_action/Tests/Functional/Tca/ActionVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..abe6062
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+namespace TYPO3\CMS\SysAction\Tests\Functional\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class ActionVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['sys_action'];
+
+    protected static $actionCommonFields = [
+        'type',
+        'title',
+        'description',
+        'hidden',
+        'assign_to_groups',
+    ];
+
+    protected static $actionFieldsByType = [
+        '0' => [],
+        '1' => [
+            't1_userprefix',
+            't1_copy_of_user',
+            't1_allowed_groups',
+            't1_create_user_dir',
+        ],
+        '2' => [],
+        '3' => [
+            't3_listPid',
+            't3_tables',
+        ],
+        '4' => [
+            't4_recordsToEdit',
+        ],
+        '5' => [
+            't3_listPid',
+            't3_tables',
+        ],
+    ];
+
+    /**
+     * @test
+     */
+    public function actionFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+
+        foreach (static::$actionFieldsByType as $type => $additionalFields) {
+            $expectedFields = array_merge(static::$actionCommonFields, $additionalFields);
+            $formResult = $formEngineTestService->createNewRecordForm('sys_action', ['type' => $type]);
+
+            foreach ($expectedFields as $expectedField) {
+                $this->assertNotFalse(
+                    $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                    'The field ' . $expectedField . ' is not in the form HTML'
+                );
+            }
+        }
+    }
+}
index f29d5f0..3239240 100644 (file)
@@ -58,6 +58,12 @@ return [
         ]
     ],
     'types' => [
-        '0' => ['showitem' => 'category, personal, subject, message']
+        '0' => ['showitem' => '
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                category, subject,message,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                personal,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
     ]
 ];
diff --git a/typo3/sysext/sys_note/Tests/Functional/Tca/NoteVisibleFieldsTest.php b/typo3/sysext/sys_note/Tests/Functional/Tca/NoteVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..edd1e44
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+namespace TYPO3\CMS\SysNote\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class NoteVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['sys_note'];
+
+    protected static $noteFields = [
+        'category',
+        'personal',
+        'subject',
+        'message',
+    ];
+
+    /**
+     * @test
+     */
+    public function noteFormContainsExpectedFields()
+    {
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_note');
+
+        foreach (static::$noteFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
index 40de211..ffff8ca 100644 (file)
@@ -4,6 +4,7 @@ return [
         'label' => 'title',
         'tstamp' => 'tstamp',
         'title' => 'LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_workspace',
+        'descriptionColumn' => 'description',
         'adminOnly' => true,
         'rootLevel' => 1,
         'delete' => 'deleted',
@@ -323,15 +324,27 @@ return [
         ]
     ],
     'types' => [
-        '0' => ['showitem' => 'title,description,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.tabs.users,adminusers,members,
-                       --div--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:tabs.notification_settings, stagechg_notification,
-                               --palette--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xml:sys_workspace.palette.stage.edit;stage.edit, edit_notification_defaults,
-                               --palette--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xml:sys_workspace.palette.stage.publish;stage.publish, publish_notification_defaults,
-                               --palette--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xml:sys_workspace.palette.stage.execute;stage.execute, execute_notification_defaults,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.tabs.mountpoints,db_mountpoints,file_mountpoints,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.tabs.publishing,publish_time,unpublish_time,
-                       --div--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_filemounts.tabs.staging,custom_stages,
-                       --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.tabs.other,freeze,live_edit,swap_modes,publish_access']
+        '0' => ['showitem' => '
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                title,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.tabs.users,
+                adminusers,members,
+            --div--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:tabs.notification_settings,
+                stagechg_notification,
+                --palette--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xml:sys_workspace.palette.stage.edit;stage.edit, edit_notification_defaults,
+                --palette--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xml:sys_workspace.palette.stage.publish;stage.publish, publish_notification_defaults,
+                --palette--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xml:sys_workspace.palette.stage.execute;stage.execute, execute_notification_defaults,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.tabs.mountpoints,
+                db_mountpoints,file_mountpoints,
+            --div--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.tabs.publishing,
+                publish_time,unpublish_time,
+            --div--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:sys_filemounts.tabs.staging,
+                custom_stages,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                freeze,live_edit,swap_modes,publish_access,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                description,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
     ]
 ];
index 5570afd..501bd14 100644 (file)
@@ -115,7 +115,11 @@ return [
     ],
     'types' => [
         '0' => ['showitem' => '
-                       --div--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:tabs.general,title,responsible_persons,
-                       --div--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:tabs.notification_settings,--palette--;;stage, notification_defaults, default_mailcomment']
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                title,responsible_persons,
+            --div--;LLL:EXT:workspaces/Resources/Private/Language/locallang_db.xlf:tabs.notification_settings,
+                --palette--;;stage, notification_defaults, default_mailcomment,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ']
     ]
 ];
diff --git a/typo3/sysext/workspaces/Tests/Functional/Fixtures/sys_filemounts.xml b/typo3/sysext/workspaces/Tests/Functional/Fixtures/sys_filemounts.xml
new file mode 100644 (file)
index 0000000..28a9637
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<dataset>
+       <sys_filemounts>
+               <uid>90</uid>
+               <pid>0</pid>
+               <title>Empty filemount</title>
+       </sys_filemounts>
+</dataset>
diff --git a/typo3/sysext/workspaces/Tests/Functional/Tca/WorkspaceStageVisibleFieldsTest.php b/typo3/sysext/workspaces/Tests/Functional/Tca/WorkspaceStageVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..d149387
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class WorkspaceStageVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['workspaces'];
+
+    protected static $workspaceStageFields = [
+        'title',
+        'responsible_persons',
+        'allow_notificaton_settings',
+        'notification_preselection',
+        'notification_defaults',
+        'default_mailcomment',
+    ];
+
+    /**
+     * Sets up this test case.
+     *
+     * @return void
+     */
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+    }
+
+    /**
+     * @test
+     */
+    public function workspaceStageFormContainsExpectedFields()
+    {
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_workspace_stage');
+
+        foreach (static::$workspaceStageFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}
diff --git a/typo3/sysext/workspaces/Tests/Functional/Tca/WorkspaceVisibleFieldsTest.php b/typo3/sysext/workspaces/Tests/Functional/Tca/WorkspaceVisibleFieldsTest.php
new file mode 100644 (file)
index 0000000..c4930b2
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+namespace TYPO3\CMS\Workspaces\Tests\Unit\Tca;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Backend\Tests\Functional\Form\FormTestService;
+use TYPO3\CMS\Core\Tests\FunctionalTestCase;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Lang\LanguageService;
+
+class WorkspaceVisibleFieldsTest extends FunctionalTestCase
+{
+    protected $coreExtensionsToLoad = ['workspaces'];
+
+    protected static $workspaceFields = [
+        'title',
+        'description',
+        'adminusers',
+        'members',
+        'stagechg_notification',
+        'edit_allow_notificaton_settings',
+        'edit_notification_preselection',
+        'edit_notification_defaults',
+        'publish_allow_notificaton_settings',
+        'publish_notification_preselection',
+        'publish_notification_defaults',
+        'execute_allow_notificaton_settings',
+        'execute_notification_preselection',
+        'execute_notification_defaults',
+        'db_mountpoints',
+        'file_mountpoints',
+        'publish_time',
+        'custom_stages',
+        'freeze',
+        'live_edit',
+        'swap_modes',
+        'publish_access',
+    ];
+
+    /**
+     * Sets up this test case.
+     *
+     * @return void
+     */
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->setUpBackendUserFromFixture(1);
+        $GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
+
+        $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/workspaces/Tests/Functional/Fixtures/sys_filemounts.xml');
+    }
+
+    /**
+     * @test
+     */
+    public function workspaceFormContainsExpectedFields()
+    {
+        $formEngineTestService = GeneralUtility::makeInstance(FormTestService::class);
+        $formResult = $formEngineTestService->createNewRecordForm('sys_workspace');
+
+        foreach (static::$workspaceFields as $expectedField) {
+            $this->assertNotFalse(
+                $formEngineTestService->formHtmlContainsField($expectedField, $formResult['html']),
+                'The field ' . $expectedField . ' is not in the form HTML'
+            );
+        }
+    }
+}