[TASK] Change some site configuration details 01/57001/9
authorChristian Kuhn <lolli@schwarzbu.ch>
Fri, 18 May 2018 10:07:52 +0000 (12:07 +0200)
committerBenni Mack <benni@typo3.org>
Mon, 21 May 2018 10:34:01 +0000 (12:34 +0200)
Some first experiences with the new v9.2 site configuration
show us that people think site configuration can be extended
just like any other TCA, but that's not the case. The
patch changes some details to make more clear site
configuration is not just some other sort of TCA with the
same feature set.

* Do not prefix site_* with sys_ anymore to abstract
  better from db tables
* Rename configuration folder SiteConfigurationTca/
  to SiteConfiguration/ to make it more clear this
  is not straight TCA
* Do not load SiteConfiguration into GLOBALS['TCA']
  to distinct from TCA
* Mark extending site configuration experimental, add
  a documentation example and explain what is not working.

Change-Id: I87890ccd07ca73c4ef1f7690c61f8d2185baf575
Resolves: #85050
Releases: master
Reviewed-on: https://review.typo3.org/57001
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
17 files changed:
typo3/sysext/backend/Classes/Configuration/SiteTcaConfiguration.php
typo3/sysext/backend/Classes/Controller/SiteConfigurationController.php
typo3/sysext/backend/Classes/Controller/SiteInlineAjaxController.php
typo3/sysext/backend/Classes/Form/FormDataProvider/SiteDatabaseEditRow.php
typo3/sysext/backend/Classes/Form/FormDataProvider/SiteTcaInline.php
typo3/sysext/backend/Classes/Form/FormDataProvider/SiteTcaSelectItems.php
typo3/sysext/backend/Configuration/SiteConfiguration/site.php [new file with mode: 0644]
typo3/sysext/backend/Configuration/SiteConfiguration/site_errorhandling.php [new file with mode: 0644]
typo3/sysext/backend/Configuration/SiteConfiguration/site_language.php [new file with mode: 0644]
typo3/sysext/backend/Configuration/SiteConfigurationTCA/sys_site.php [deleted file]
typo3/sysext/backend/Configuration/SiteConfigurationTCA/sys_site_errorhandling.php [deleted file]
typo3/sysext/backend/Configuration/SiteConfigurationTCA/sys_site_language.php [deleted file]
typo3/sysext/backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf
typo3/sysext/backend/Resources/Private/Language/siteconfiguration_fieldinformation.xlf
typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/SiteDatabaseEditRowTest.php
typo3/sysext/core/Classes/Site/Entity/SiteLanguage.php
typo3/sysext/core/Documentation/Changelog/9.2/Feature-84581-SiteHandling.rst

index 1b32aeb..08f44e0 100644 (file)
@@ -23,41 +23,42 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 /**
  * Helper class for the backend "Sites" module
  *
- * Load Site configuration TCA from ext:*Configuration/SiteConfigurationTCA
- * and ext:*Configuration/SiteConfigurationTCA/Overrides
+ * Load Site configuration TCA from ext:*Configuration/SiteConfiguration
+ * and ext:*Configuration/SiteConfiguration/Overrides
  */
 class SiteTcaConfiguration
 {
     /**
      * Returns a "fake TCA" array that is syntactically identical to
-     * "normal" TCA, and just isn't available as $GLOBALS['TCA'].
+     * "normal" TCA, but is not available as $GLOBALS['TCA']. During
+     * configuration loading time, the target array is available as
+     * $GLOBALS['SiteConfiguration'] within the Overrides files.
+     *
+     * It is not possible to use ExtensionManagementUtility methods.
      *
      * @return array
      */
     public function getTca(): array
     {
-        // To allow casual ExtensionManagementUtility methods that works on $GLOBALS['TCA']
-        // to change our fake TCA, just kick original TCA, and reset to original at the end.
-        $originalTca = $GLOBALS['TCA'];
-        $GLOBALS['TCA'] = [];
+        $GLOBALS['SiteConfiguration'] = [];
         $activePackages = GeneralUtility::makeInstance(PackageManager::class)->getActivePackages();
-        // First load "full table" files from Configuration/SiteConfigurationTCA
+        // First load "full table" files from Configuration/SiteConfiguration
         $finder = new Finder();
         foreach ($activePackages as $package) {
             try {
-                $finder->files()->depth(0)->name('*.php')->in($package->getPackagePath() . 'Configuration/SiteConfigurationTCA');
+                $finder->files()->depth(0)->name('*.php')->in($package->getPackagePath() . 'Configuration/SiteConfiguration');
             } catch (\InvalidArgumentException $e) {
                 // No such directory in this package
                 continue;
             }
             foreach ($finder as $fileInfo) {
-                $GLOBALS['TCA'][substr($fileInfo->getBasename(), 0, -4)] = require $fileInfo->getPathname();
+                $GLOBALS['SiteConfiguration'][substr($fileInfo->getBasename(), 0, -4)] = require $fileInfo->getPathname();
             }
         }
-        // Execute override files from Configuration/TCA/Overrides
+        // Execute override files from Configuration/SiteConfiguration/Overrides
         foreach ($activePackages as $package) {
             try {
-                $finder->files()->depth(0)->name('*.php')->in($package->getPackagePath() . 'Configuration/SiteConfigurationTCA/Overrides');
+                $finder->files()->depth(0)->name('*.php')->in($package->getPackagePath() . 'Configuration/SiteConfiguration/Overrides');
             } catch (\InvalidArgumentException $e) {
                 // No such directory in this package
                 continue;
@@ -66,8 +67,8 @@ class SiteTcaConfiguration
                 require $fileInfo->getPathname();
             }
         }
-        $result = $GLOBALS['TCA'];
-        $GLOBALS['TCA'] = $originalTca;
+        $result = $GLOBALS['SiteConfiguration'];
+        unset($GLOBALS['SiteConfiguration']);
         return $result;
     }
 }
index dc17e09..f91fea9 100644 (file)
@@ -124,7 +124,7 @@ class SiteConfigurationController
     {
         $this->configureEditViewDocHeader();
 
-        // Put sys_site and friends TCA into global TCA
+        // Put site and friends TCA into global TCA
         // @todo: We might be able to get rid of that later
         $GLOBALS['TCA'] = array_merge($GLOBALS['TCA'], GeneralUtility::makeInstance(SiteTcaConfiguration::class)->getTca());
 
@@ -138,7 +138,7 @@ class SiteConfigurationController
 
         $defaultValues = [];
         if ($isNewConfig) {
-            $defaultValues['sys_site']['rootPageId'] = $pageUid;
+            $defaultValues['site']['rootPageId'] = $pageUid;
         }
 
         $allSites = $this->siteFinder->getAllSites();
@@ -152,7 +152,7 @@ class SiteConfigurationController
         $formDataGroup = GeneralUtility::makeInstance(SiteConfigurationDataGroup::class);
         $formDataCompiler = GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
         $formDataCompilerInput = [
-            'tableName' => 'sys_site',
+            'tableName' => 'site',
             'vanillaUid' => $isNewConfig ? $pageUid : $allSites[$siteIdentifier]->getRootPageId(),
             'command' => $isNewConfig ? 'new' : 'edit',
             'returnUrl' => (string)$returnUrl,
@@ -186,7 +186,7 @@ class SiteConfigurationController
      */
     protected function saveAction(ServerRequestInterface $request): ResponseInterface
     {
-        // Put sys_site and friends TCA into global TCA
+        // Put site and friends TCA into global TCA
         // @todo: We might be able to get rid of that later
         $GLOBALS['TCA'] = array_merge($GLOBALS['TCA'], GeneralUtility::makeInstance(SiteTcaConfiguration::class)->getTca());
 
@@ -205,14 +205,14 @@ class SiteConfigurationController
             throw new \RuntimeException('Either save or save and close', 1520370364);
         }
 
-        if (!isset($parsedBody['data']['sys_site']) || !is_array($parsedBody['data']['sys_site'])) {
-            throw new \RuntimeException('No sys_site data or sys_site identifier given', 1521030950);
+        if (!isset($parsedBody['data']['site']) || !is_array($parsedBody['data']['site'])) {
+            throw new \RuntimeException('No site data or site identifier given', 1521030950);
         }
 
         $data = $parsedBody['data'];
         // This can be NEW123 for new records
-        $pageId = (int)key($data['sys_site']);
-        $sysSiteRow = current($data['sys_site']);
+        $pageId = (int)key($data['site']);
+        $sysSiteRow = current($data['site']);
         $siteIdentifier = $sysSiteRow['identifier'] ?? '';
 
         $isNewConfiguration = false;
@@ -236,20 +236,20 @@ class SiteConfigurationController
 
         try {
             $newSysSiteData = [];
-            // Hard set rootPageId: This is TCA readOnly and not transmitted by FormEngine, but is also the "uid" of the sys_site record
+            // Hard set rootPageId: This is TCA readOnly and not transmitted by FormEngine, but is also the "uid" of the site record
             $newSysSiteData['site']['rootPageId'] = $pageId;
             foreach ($sysSiteRow as $fieldName => $fieldValue) {
-                $type = $siteTca['sys_site']['columns'][$fieldName]['config']['type'];
+                $type = $siteTca['site']['columns'][$fieldName]['config']['type'];
                 if ($type === 'input') {
-                    $fieldValue = $this->validateAndProcessValue('sys_site', $fieldName, $fieldValue);
+                    $fieldValue = $this->validateAndProcessValue('site', $fieldName, $fieldValue);
                     $newSysSiteData['site'][$fieldName] = $fieldValue;
                 } elseif ($type === 'inline') {
                     $newSysSiteData['site'][$fieldName] = [];
                     $childRowIds = GeneralUtility::trimExplode(',', $fieldValue, true);
-                    if (!isset($siteTca['sys_site']['columns'][$fieldName]['config']['foreign_table'])) {
+                    if (!isset($siteTca['site']['columns'][$fieldName]['config']['foreign_table'])) {
                         throw new \RuntimeException('No foreign_table found for inline type', 1521555037);
                     }
-                    $foreignTable = $siteTca['sys_site']['columns'][$fieldName]['config']['foreign_table'];
+                    $foreignTable = $siteTca['site']['columns'][$fieldName]['config']['foreign_table'];
                     foreach ($childRowIds as $childRowId) {
                         $childRowData = [];
                         if (!isset($data[$foreignTable][$childRowId])) {
@@ -315,7 +315,7 @@ class SiteConfigurationController
     {
         $languageService = $this->getLanguageService();
         // Normal "eval" processing of field first
-        $identifier = $this->validateAndProcessValue('sys_site', 'identifier', $identifier);
+        $identifier = $this->validateAndProcessValue('site', 'identifier', $identifier);
         if ($isNew) {
             // Verify no other site with this identifier exists. If so, find a new unique name as
             // identifier and show a flash message the identifier has been adapted
index d732aee..6d8a46e 100644 (file)
@@ -81,8 +81,8 @@ class SiteInlineAjaxController extends AbstractFormEngineAjaxController
         $childTableName = $parentConfig['foreign_table'];
 
         $defaultDatabaseRow = [];
-        if ($childTableName === 'sys_site_language') {
-            // Feed new sys_site_language row with data from sys_language record if possible
+        if ($childTableName === 'site_language') {
+            // Feed new site_language row with data from sys_language record if possible
             if ($childChildUid > 0) {
                 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_language');
                 $queryBuilder->getRestrictions()->removeByType(HiddenRestriction::class);
index b4f1a60..72f21af 100644 (file)
@@ -41,12 +41,12 @@ class SiteDatabaseEditRow implements FormDataProviderInterface
 
         $tableName = $result['tableName'];
         $siteFinder = GeneralUtility::makeInstance(SiteFinder::class);
-        if ($tableName === 'sys_site') {
+        if ($tableName === 'site') {
             $siteConfigurationForPageUid = (int)$result['vanillaUid'];
             $rowData = $siteFinder->getSiteByRootPageId($siteConfigurationForPageUid)->getConfiguration();
             $result['databaseRow']['uid'] = $rowData['rootPageId'];
             $result['databaseRow']['identifier'] = $result['customData']['siteIdentifier'];
-        } elseif ($tableName === 'sys_site_errorhandling' || $tableName === 'sys_site_language') {
+        } elseif ($tableName === 'site_errorhandling' || $tableName === 'site_language') {
             $siteConfigurationForPageUid = (int)($result['inlineTopMostParentUid'] ?? $result['inlineParentUid']);
             $rowData = $siteFinder->getSiteByRootPageId($siteConfigurationForPageUid)->getConfiguration();
             $parentFieldName = $result['inlineParentFieldName'];
index c4cf7d3..3f1903f 100644 (file)
@@ -29,7 +29,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 /**
  * Special data provider for the sites configuration module.
  *
- * Handle inline children of 'sys_site"
+ * Handle inline children of 'site'
  */
 class SiteTcaInline extends AbstractDatabaseRecordProvider implements FormDataProviderInterface
 {
@@ -47,7 +47,7 @@ class SiteTcaInline extends AbstractDatabaseRecordProvider implements FormDataPr
                 continue;
             }
             $childTableName = $fieldConfig['config']['foreign_table'];
-            if ($childTableName !== 'sys_site_errorhandling' && $childTableName !== 'sys_site_language') {
+            if ($childTableName !== 'site_errorhandling' && $childTableName !== 'site_language') {
                 throw new \RuntimeException('Inline relation to other tables not implemented', 1522494737);
             }
             $result['processedTca']['columns'][$fieldName]['children'] = [];
@@ -122,9 +122,9 @@ class SiteTcaInline extends AbstractDatabaseRecordProvider implements FormDataPr
             }
         }
 
-        // If we are dealing with sys_site_language, we *always* force a relation to sys_language "0"
+        // If we are dealing with site_language, we *always* force a relation to sys_language "0"
         $foreignTable = $result['processedTca']['columns'][$fieldName]['config']['foreign_table'];
-        if ($foreignTable === 'sys_site_language' && $result['command'] === 'new') {
+        if ($foreignTable === 'site_language' && $result['command'] === 'new') {
             // If new, just add a new default child
             $child = $this->compileDefaultSysSiteLanguageChild($result, $fieldName);
             $connectedUids[] = $child['databaseRow']['uid'];
@@ -141,8 +141,8 @@ class SiteTcaInline extends AbstractDatabaseRecordProvider implements FormDataPr
             }
         }
 
-        // If we are dealing with sys_site_language, we *always* force a relation to sys_language "0"
-        if ($foreignTable === 'sys_site_language' && $result['command'] === 'edit') {
+        // If we are dealing with ite_language, we *always* force a relation to sys_language "0"
+        if ($foreignTable === 'site_language' && $result['command'] === 'edit') {
             // If edit, find out if a child using sys_language "0" exists, else add it on top
             $defaultSysSiteLanguageChildFound = false;
             foreach ($result['processedTca']['columns'][$fieldName]['children'] as $child) {
@@ -264,7 +264,7 @@ class SiteTcaInline extends AbstractDatabaseRecordProvider implements FormDataPr
     }
 
     /**
-     * Compile default sys_site_language child using sys_language uid "0"
+     * Compile default site_language child using sys_language uid "0"
      *
      * @param array $result
      * @param string $parentFieldName
@@ -280,7 +280,7 @@ class SiteTcaInline extends AbstractDatabaseRecordProvider implements FormDataPr
         $formDataCompiler = GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
         $formDataCompilerInput = [
             'command' => 'new',
-            'tableName' => 'sys_site_language',
+            'tableName' => 'site_language',
             'vanillaUid' => $result['inlineFirstPid'],
             'returnUrl' => $result['returnUrl'],
             'isInlineChild' => true,
index 548efdf..6b511f7 100644 (file)
@@ -29,7 +29,7 @@ class SiteTcaSelectItems implements FormDataProviderInterface
 {
     /**
      * Resolve select items for
-     * * 'sys_site_language' -> 'typo3language'
+     * * 'site_language' -> 'typo3language'
      *
      * @param array $result
      * @return array
@@ -38,7 +38,7 @@ class SiteTcaSelectItems implements FormDataProviderInterface
     public function addData(array $result): array
     {
         $table = $result['tableName'];
-        if ($table !== 'sys_site_language') {
+        if ($table !== 'site_language') {
             return $result;
         }
 
diff --git a/typo3/sysext/backend/Configuration/SiteConfiguration/site.php b/typo3/sysext/backend/Configuration/SiteConfiguration/site.php
new file mode 100644 (file)
index 0000000..ab4ae85
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+
+return [
+    'ctrl' => [
+        'label' => 'identifier',
+        'title' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.ctrl.title',
+        'typeicon_classes' => [
+            'default' => 'mimetypes-x-content-domain',
+        ],
+    ],
+    'columns' => [
+        'identifier' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.identifier',
+            'config' => [
+                'type' => 'input',
+                'size' => 35,
+                'max' => 255,
+                // identifier is used as directory name - allow a-z,0-9,_,- as chars only.
+                // unique is additionally checked server side
+                'eval' => 'required,lower,alphanum_x',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'rootPageId' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.rootPageId',
+            'config' => [
+                'type' => 'select',
+                'readOnly' => true,
+                'renderType' => 'selectSingle',
+                'foreign_table' => 'pages',
+                'foreign_table_where' => ' AND (is_siteroot=1 OR (pid=0 AND doktype IN (1,6,7))) AND l10n_parent = 0 ORDER BY pid, sorting',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'base' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.base',
+            'config' => [
+                'type' => 'input',
+                'eval' => 'required',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'languages' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.languages',
+            'config' => [
+                'type' => 'inline',
+                'foreign_table' => 'site_language',
+                'foreign_selector' => 'languageId',
+                'foreign_unique' => 'languageId',
+                'size' => 4,
+                'minitems' => 1,
+                'appearance' => [
+                    'enabledControls' => [
+                        'info' => false,
+                    ],
+                ],
+            ],
+        ],
+        'errorHandling' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.errorHandling',
+            'config' => [
+                'type' => 'inline',
+                'foreign_table' => 'site_errorhandling',
+                'appearance' => [
+                    'enabledControls' => [
+                        'info' => false,
+                    ],
+                ],
+            ],
+        ],
+    ],
+    'types' => [
+        '0' => [
+            'showitem' => 'identifier, rootPageId, base,
+                --div--;LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.tab.languages, languages,
+                --div--;LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site.tab.errorHandling, errorHandling',
+        ],
+    ],
+];
diff --git a/typo3/sysext/backend/Configuration/SiteConfiguration/site_errorhandling.php b/typo3/sysext/backend/Configuration/SiteConfiguration/site_errorhandling.php
new file mode 100644 (file)
index 0000000..71e9ed5
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+
+return [
+    'ctrl' => [
+        'label' => 'errorCode',
+        'title' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.ctrl.title',
+        'type' => 'errorHandler',
+        'typeicon_column' => 'errorHandler',
+        'typeicon_classes' => [
+            'default' => 'default-not-found',
+            'Fluid' => 'mimetypes-text-html',
+            'ContentFromPid' => 'apps-pagetree-page-content-from-page',
+            'ClassDispatcher' => 'mimetypes-text-php',
+        ],
+    ],
+    'columns' => [
+        'errorCode' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorCode',
+            'config' => [
+                'type' => 'input',
+                'eval' => 'required, trim, int',
+                'range' => [
+                    'lower' => 0,
+                    'upper' => 599,
+                ],
+                'default' => 404,
+                'valuePicker' => [
+                    'mode' => '',
+                    'items' => [
+                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorCode.404', '404'],
+                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorCode.403', '403'],
+                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorCode.401', '401'],
+                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorCode.500', '500'],
+                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorCode.503', '503'],
+                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorCode.0', '0'],
+                    ],
+                ],
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'errorHandler' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorHandler',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                'items' => [
+                    [' - select an handler type - ', ''],
+                    ['Fluid Template', 'Fluid'],
+                    ['Show Content from Page', 'Page'],
+                    ['PHP Class (must implement the PageErrorHandlerInterface)', 'PHP'],
+                ],
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'errorFluidTemplate' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorFluidTemplate',
+            'config' => [
+                'type' => 'input',
+                'eval' => 'required',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'errorFluidTemplatesRootPath' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorFluidTemplatesRootPath',
+            'config' => [
+                'type' => 'input',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'errorFluidLayoutsRootPath' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorFluidLayoutsRootPath',
+            'config' => [
+                'type' => 'input',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'errorFluidPartialsRootPath' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorFluidPartialsRootPath',
+            'config' => [
+                'type' => 'input',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'errorContentSource' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorContentSource',
+            'config' => [
+                'type' => 'input',
+                'renderType' => 'inputLink',
+                'eval' => 'required',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+                'fieldControl' => [
+                    'linkPopup' => [
+                        'options' => [
+                            'blindLinkOptions' => 'file,mail,spec,folder',
+                        ]
+                    ]
+                ],
+            ],
+        ],
+        'errorPhpClassFQCN' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.errorPhpClassFQCN',
+            'config' => [
+                'type' => 'input',
+                'eval' => 'required',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+    ],
+    'types' => [
+        '1' => [
+            'showitem' => 'errorCode, errorHandler',
+        ],
+        'Fluid' => [
+            'showitem' => 'errorCode, errorHandler, errorFluidTemplate,
+                           --div--;LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_errorhandling.tab.rootpaths,
+                           errorFluidTemplatesRootPath, errorFluidLayoutsRootPath, errorFluidPartialsRootPath',
+        ],
+        'Page' => [
+            'showitem' => 'errorCode, errorHandler, errorContentSource',
+        ],
+        'PHP' => [
+            'showitem' => 'errorCode, errorHandler, errorPhpClassFQCN',
+        ],
+    ],
+];
diff --git a/typo3/sysext/backend/Configuration/SiteConfiguration/site_language.php b/typo3/sysext/backend/Configuration/SiteConfiguration/site_language.php
new file mode 100644 (file)
index 0000000..28caf8f
--- /dev/null
@@ -0,0 +1,457 @@
+<?php
+
+return [
+    'ctrl' => [
+        'label' => 'languageId',
+        'title' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.ctrl.title',
+        'typeicon_classes' => [
+            'default' => 'mimetypes-x-content-domain',
+        ],
+    ],
+    'columns' => [
+        'languageId' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.language',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                'items' => [
+                    ['Default Language', 0],
+                ],
+                'foreign_table' => 'sys_language',
+                'size' => 1,
+                'min' => 1,
+                'max' => 1,
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'title' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.title',
+            'config' => [
+                'type' => 'input',
+                'size' => 10,
+                'eval' => 'required',
+                'placeholder' => 'English',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'navigationTitle' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.navigationTitle',
+            'config' => [
+                'type' => 'input',
+                'size' => 10,
+                'placeholder' => 'English',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'base' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.base',
+            'config' => [
+                'type' => 'input',
+                'eval' => 'required',
+                'default' => '/',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'locale' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.locale',
+            'config' => [
+                'type' => 'input',
+                'eval' => 'required',
+                'placeholder' => 'en_US.UTF-8',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'iso-639-1' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.iso-639-1',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                // Fed by data provider
+                'items' => [],
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'hreflang' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.hreflang',
+            'config' => [
+                'type' => 'input',
+                'placeholder' => 'en-US',
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'direction' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.direction',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                'items' => [
+                    ['None', '', ''],
+                    ['Left to Right', 'ltr', ''],
+                    ['Right to Left', 'rtl', ''],
+                ],
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'typo3Language' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.typo3Language',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                // Fed by data provider
+                'items' => [],
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+                'default' => 'default'
+            ],
+        ],
+        'flag' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.flag',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                'items' => [
+                    ['global', 'global', 'flags-multiple'],
+                    ['ad', 'ad', 'flags-ad'],
+                    ['ae', 'ae', 'flags-ae'],
+                    ['af', 'af', 'flags-af'],
+                    ['ag', 'ag', 'flags-ag'],
+                    ['ai', 'ai', 'flags-ai'],
+                    ['al', 'al', 'flags-al'],
+                    ['am', 'am', 'flags-am'],
+                    ['an', 'an', 'flags-an'],
+                    ['ao', 'ao', 'flags-ao'],
+                    ['ar', 'ar', 'flags-ar'],
+                    ['as', 'as', 'flags-as'],
+                    ['at', 'at', 'flags-at'],
+                    ['au', 'au', 'flags-au'],
+                    ['aw', 'aw', 'flags-aw'],
+                    ['ax', 'ax', 'flags-ax'],
+                    ['az', 'az', 'flags-az'],
+                    ['ba', 'ba', 'flags-ba'],
+                    ['bb', 'bb', 'flags-bb'],
+                    ['bd', 'bd', 'flags-bd'],
+                    ['be', 'be', 'flags-be'],
+                    ['bf', 'bf', 'flags-bf'],
+                    ['bg', 'bg', 'flags-bg'],
+                    ['bh', 'bh', 'flags-bh'],
+                    ['bi', 'bi', 'flags-bi'],
+                    ['bj', 'bj', 'flags-bj'],
+                    ['bm', 'bm', 'flags-bm'],
+                    ['bn', 'bn', 'flags-bn'],
+                    ['bo', 'bo', 'flags-bo'],
+                    ['br', 'br', 'flags-br'],
+                    ['bs', 'bs', 'flags-bs'],
+                    ['bt', 'bt', 'flags-bt'],
+                    ['bv', 'bv', 'flags-bv'],
+                    ['bw', 'bw', 'flags-bw'],
+                    ['by', 'by', 'flags-by'],
+                    ['bz', 'bz', 'flags-bz'],
+                    ['ca', 'ca', 'flags-ca'],
+                    ['catalonia', 'catalonia', 'flags-catalonia'],
+                    ['cc', 'cc', 'flags-cc'],
+                    ['cd', 'cd', 'flags-cd'],
+                    ['cf', 'cf', 'flags-cf'],
+                    ['cg', 'cg', 'flags-cg'],
+                    ['ch', 'ch', 'flags-ch'],
+                    ['ci', 'ci', 'flags-ci'],
+                    ['ck', 'ck', 'flags-ck'],
+                    ['cl', 'cl', 'flags-cl'],
+                    ['cm', 'cm', 'flags-cm'],
+                    ['cn', 'cn', 'flags-cn'],
+                    ['co', 'co', 'flags-co'],
+                    ['cr', 'cr', 'flags-cr'],
+                    ['cs', 'cs', 'flags-cs'],
+                    ['cu', 'cu', 'flags-cu'],
+                    ['cv', 'cv', 'flags-cv'],
+                    ['cx', 'cx', 'flags-cx'],
+                    ['cy', 'cy', 'flags-cy'],
+                    ['cz', 'cz', 'flags-cz'],
+                    ['de', 'de', 'flags-de'],
+                    ['dj', 'dj', 'flags-dj'],
+                    ['dk', 'dk', 'flags-dk'],
+                    ['dm', 'dm', 'flags-dm'],
+                    ['do', 'do', 'flags-do'],
+                    ['dz', 'dz', 'flags-dz'],
+                    ['ec', 'ec', 'flags-ec'],
+                    ['ee', 'ee', 'flags-ee'],
+                    ['eg', 'eg', 'flags-eg'],
+                    ['eh', 'eh', 'flags-eh'],
+                    ['en-us-gb', 'en-us-gb', 'flags-en-us-gb'],
+                    ['england', 'england', 'flags-gb-eng'],
+                    ['er', 'er', 'flags-er'],
+                    ['es', 'es', 'flags-es'],
+                    ['et', 'et', 'flags-et'],
+                    ['eu', 'eu', 'flags-eu'],
+                    ['fm', 'fm', 'flags-fm'],
+                    ['fi', 'fi', 'flags-fi'],
+                    ['fj', 'fj', 'flags-fj'],
+                    ['fk', 'fk', 'flags-fk'],
+                    ['fm', 'fm', 'flags-fm'],
+                    ['fo', 'fo', 'flags-fo'],
+                    ['fr', 'fr', 'flags-fr'],
+                    ['ga', 'ga', 'flags-ga'],
+                    ['gb', 'gb', 'flags-gb'],
+                    ['gd', 'gd', 'flags-gd'],
+                    ['ge', 'ge', 'flags-ge'],
+                    ['gf', 'gf', 'flags-gf'],
+                    ['gh', 'gh', 'flags-gh'],
+                    ['gi', 'gi', 'flags-gi'],
+                    ['gl', 'gl', 'flags-gl'],
+                    ['gm', 'gm', 'flags-gm'],
+                    ['gn', 'gn', 'flags-gn'],
+                    ['gp', 'gp', 'flags-gp'],
+                    ['gq', 'gq', 'flags-gq'],
+                    ['gr', 'gr', 'flags-gr'],
+                    ['gs', 'gs', 'flags-gs'],
+                    ['gt', 'gt', 'flags-gt'],
+                    ['gu', 'gu', 'flags-gu'],
+                    ['gw', 'gw', 'flags-gw'],
+                    ['gy', 'gy', 'flags-gy'],
+                    ['hk', 'hk', 'flags-hk'],
+                    ['hm', 'hm', 'flags-hm'],
+                    ['hn', 'hn', 'flags-hn'],
+                    ['hr', 'hr', 'flags-hr'],
+                    ['ht', 'ht', 'flags-ht'],
+                    ['hu', 'hu', 'flags-hu'],
+                    ['id', 'id', 'flags-id'],
+                    ['ie', 'ie', 'flags-ie'],
+                    ['il', 'il', 'flags-il'],
+                    ['in', 'in', 'flags-in'],
+                    ['io', 'io', 'flags-io'],
+                    ['iq', 'iq', 'flags-iq'],
+                    ['ir', 'ir', 'flags-ir'],
+                    ['is', 'is', 'flags-is'],
+                    ['it', 'it', 'flags-it'],
+                    ['jm', 'jm', 'flags-jm'],
+                    ['jo', 'jo', 'flags-jo'],
+                    ['jp', 'jp', 'flags-jp'],
+                    ['ke', 'ke', 'flags-ke'],
+                    ['kg', 'kg', 'flags-kg'],
+                    ['kh', 'kh', 'flags-kh'],
+                    ['ki', 'ki', 'flags-ki'],
+                    ['km', 'km', 'flags-km'],
+                    ['kn', 'kn', 'flags-kn'],
+                    ['kp', 'kp', 'flags-kp'],
+                    ['kr', 'kr', 'flags-kr'],
+                    ['kw', 'kw', 'flags-kw'],
+                    ['ky', 'ky', 'flags-ky'],
+                    ['kz', 'kz', 'flags-kz'],
+                    ['la', 'la', 'flags-la'],
+                    ['lb', 'lb', 'flags-lb'],
+                    ['lc', 'lc', 'flags-lc'],
+                    ['li', 'li', 'flags-li'],
+                    ['lk', 'lk', 'flags-lk'],
+                    ['lr', 'lr', 'flags-lr'],
+                    ['ls', 'ls', 'flags-ls'],
+                    ['lt', 'lt', 'flags-lt'],
+                    ['lu', 'lu', 'flags-lu'],
+                    ['lv', 'lv', 'flags-lv'],
+                    ['ly', 'ly', 'flags-ly'],
+                    ['ma', 'ma', 'flags-ma'],
+                    ['mc', 'mc', 'flags-mc'],
+                    ['md', 'md', 'flags-md'],
+                    ['me', 'me', 'flags-me'],
+                    ['mg', 'mg', 'flags-mg'],
+                    ['mh', 'mh', 'flags-mh'],
+                    ['mk', 'mk', 'flags-mk'],
+                    ['ml', 'ml', 'flags-ml'],
+                    ['mm', 'mm', 'flags-mm'],
+                    ['mn', 'mn', 'flags-mn'],
+                    ['mo', 'mo', 'flags-mo'],
+                    ['mp', 'mp', 'flags-mp'],
+                    ['mq', 'mq', 'flags-mq'],
+                    ['mr', 'mr', 'flags-mr'],
+                    ['ms', 'ms', 'flags-ms'],
+                    ['mt', 'mt', 'flags-mt'],
+                    ['mu', 'mu', 'flags-mu'],
+                    ['mv', 'mv', 'flags-mv'],
+                    ['mw', 'mw', 'flags-mw'],
+                    ['mx', 'mx', 'flags-mx'],
+                    ['my', 'my', 'flags-my'],
+                    ['mz', 'mz', 'flags-mz'],
+                    ['na', 'na', 'flags-na'],
+                    ['nc', 'nc', 'flags-nc'],
+                    ['ne', 'ne', 'flags-ne'],
+                    ['nf', 'nf', 'flags-nf'],
+                    ['ng', 'ng', 'flags-ng'],
+                    ['ni', 'ni', 'flags-ni'],
+                    ['nl', 'nl', 'flags-nl'],
+                    ['no', 'no', 'flags-no'],
+                    ['np', 'np', 'flags-np'],
+                    ['nr', 'nr', 'flags-nr'],
+                    ['nu', 'nu', 'flags-nu'],
+                    ['nz', 'nz', 'flags-nz'],
+                    ['om', 'om', 'flags-om'],
+                    ['pa', 'pa', 'flags-pa'],
+                    ['pe', 'pe', 'flags-pe'],
+                    ['pf', 'pf', 'flags-pf'],
+                    ['pg', 'pg', 'flags-pg'],
+                    ['ph', 'ph', 'flags-ph'],
+                    ['pk', 'pk', 'flags-pk'],
+                    ['pl', 'pl', 'flags-pl'],
+                    ['pm', 'pm', 'flags-pm'],
+                    ['pn', 'pn', 'flags-pn'],
+                    ['pr', 'pr', 'flags-pr'],
+                    ['ps', 'ps', 'flags-ps'],
+                    ['pt', 'pt', 'flags-pt'],
+                    ['pw', 'pw', 'flags-pw'],
+                    ['py', 'py', 'flags-py'],
+                    ['qa', 'qa', 'flags-qa'],
+                    ['qc', 'qc', 'flags-qc'],
+                    ['re', 're', 'flags-re'],
+                    ['ro', 'ro', 'flags-ro'],
+                    ['rs', 'rs', 'flags-rs'],
+                    ['ru', 'ru', 'flags-ru'],
+                    ['rw', 'rw', 'flags-rw'],
+                    ['sa', 'sa', 'flags-sa'],
+                    ['sb', 'sb', 'flags-sb'],
+                    ['sc', 'sc', 'flags-sc'],
+                    ['gb-sct', 'gb-sct', 'flags-gb-sct'],
+                    ['sd', 'sd', 'flags-sd'],
+                    ['se', 'se', 'flags-se'],
+                    ['sg', 'sg', 'flags-sg'],
+                    ['sh', 'sh', 'flags-sh'],
+                    ['si', 'si', 'flags-si'],
+                    ['sj', 'sj', 'flags-sj'],
+                    ['sk', 'sk', 'flags-sk'],
+                    ['sl', 'sl', 'flags-sl'],
+                    ['sm', 'sm', 'flags-sm'],
+                    ['sn', 'sn', 'flags-sn'],
+                    ['so', 'so', 'flags-so'],
+                    ['sr', 'sr', 'flags-sr'],
+                    ['st', 'st', 'flags-st'],
+                    ['sv', 'sv', 'flags-sv'],
+                    ['sy', 'sy', 'flags-sy'],
+                    ['sz', 'sz', 'flags-sz'],
+                    ['tc', 'tc', 'flags-tc'],
+                    ['td', 'td', 'flags-td'],
+                    ['tf', 'tf', 'flags-tf'],
+                    ['tg', 'tg', 'flags-tg'],
+                    ['th', 'th', 'flags-th'],
+                    ['tj', 'tj', 'flags-tj'],
+                    ['tk', 'tk', 'flags-tk'],
+                    ['tl', 'tl', 'flags-tl'],
+                    ['tm', 'tm', 'flags-tm'],
+                    ['tn', 'tn', 'flags-tn'],
+                    ['to', 'to', 'flags-to'],
+                    ['tr', 'tr', 'flags-tr'],
+                    ['tt', 'tt', 'flags-tt'],
+                    ['tv', 'tv', 'flags-tv'],
+                    ['tw', 'tw', 'flags-tw'],
+                    ['tz', 'tz', 'flags-tz'],
+                    ['ua', 'ua', 'flags-ua'],
+                    ['ug', 'ug', 'flags-ug'],
+                    ['um', 'um', 'flags-um'],
+                    ['us', 'us', 'flags-us'],
+                    ['uy', 'uy', 'flags-uy'],
+                    ['uz', 'uz', 'flags-uz'],
+                    ['va', 'va', 'flags-va'],
+                    ['vc', 'vc', 'flags-vc'],
+                    ['ve', 've', 'flags-ve'],
+                    ['vg', 'vg', 'flags-vg'],
+                    ['vi', 'vi', 'flags-vi'],
+                    ['vn', 'vn', 'flags-vn'],
+                    ['vu', 'vu', 'flags-vu'],
+                    ['gb-wls', 'gb-wls', 'flags-gb-wls'],
+                    ['wf', 'wf', 'flags-wf'],
+                    ['ws', 'ws', 'flags-ws'],
+                    ['ye', 'ye', 'flags-ye'],
+                    ['yt', 'yt', 'flags-yt'],
+                    ['za', 'za', 'flags-za'],
+                    ['zm', 'zm', 'flags-zm'],
+                    ['zw', 'zw', 'flags-zw'],
+                ],
+                'size' => 1,
+                'minitems' => 0,
+                'maxitems' => 1,
+                'fieldWizard' => [
+                    'selectIcons' => [
+                        'disabled' => false,
+                    ],
+                ],
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'fallbackType' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.fallbackType',
+            'displayCond' => 'FIELD:languageId:>:0',
+            'onChange' => 'reload',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                'items' => [
+                    ['No fallback (strict)', 'strict'],
+                    ['Fallback to other language', 'fallback'],
+                ],
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+        'fallbacks' => [
+            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:site_language.fallbacks',
+            'displayCond' => 'FIELD:fallbackType:=:fallback',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectMultipleSideBySide',
+                'items' => [
+                    ['Default Language', 0],
+                ],
+                'foreign_table' => 'sys_language',
+                'size' => 5,
+                'min' => 0,
+                'fieldInformation' => [
+                    'SiteConfigurationModuleFieldInformation' => [
+                        'renderType' => 'SiteConfigurationModuleFieldInformation',
+                    ],
+                ],
+            ],
+        ],
+    ],
+    'types' => [
+        '1' => [
+            'showitem' => 'languageId, title, navigationTitle, base, locale, iso-639-1, hreflang, direction, typo3Language, flag, fallbackType, fallbacks',
+        ],
+    ],
+];
diff --git a/typo3/sysext/backend/Configuration/SiteConfigurationTCA/sys_site.php b/typo3/sysext/backend/Configuration/SiteConfigurationTCA/sys_site.php
deleted file mode 100644 (file)
index 834cfb3..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-return [
-    'ctrl' => [
-        'label' => 'identifier',
-        'title' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site.ctrl.title',
-        'typeicon_classes' => [
-            'default' => 'mimetypes-x-content-domain',
-        ],
-    ],
-    'columns' => [
-        'identifier' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site.identifier',
-            'config' => [
-                'type' => 'input',
-                'size' => 35,
-                'max' => 255,
-                // identifier is used as directory name - allow a-z,0-9,_,- as chars only.
-                // unique is additionally checked server side
-                'eval' => 'required,lower,alphanum_x',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'rootPageId' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site.rootPageId',
-            'config' => [
-                'type' => 'select',
-                'readOnly' => true,
-                'renderType' => 'selectSingle',
-                'foreign_table' => 'pages',
-                'foreign_table_where' => ' AND (is_siteroot=1 OR (pid=0 AND doktype IN (1,6,7))) AND l10n_parent = 0 ORDER BY pid, sorting',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'base' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site.base',
-            'config' => [
-                'type' => 'input',
-                'eval' => 'required',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'languages' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site.languages',
-            'config' => [
-                'type' => 'inline',
-                'foreign_table' => 'sys_site_language',
-                'foreign_selector' => 'languageId',
-                'foreign_unique' => 'languageId',
-                'size' => 4,
-                'minitems' => 1,
-                'appearance' => [
-                    'enabledControls' => [
-                        'info' => false,
-                    ],
-                ],
-            ],
-        ],
-        'errorHandling' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site.errorHandling',
-            'config' => [
-                'type' => 'inline',
-                'foreign_table' => 'sys_site_errorhandling',
-                'appearance' => [
-                    'enabledControls' => [
-                        'info' => false,
-                    ],
-                ],
-            ],
-        ],
-    ],
-    'types' => [
-        '0' => [
-            'showitem' => 'identifier, rootPageId, base,
-                --div--;LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site.tab.languages, languages,
-                --div--;LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site.tab.errorHandling, errorHandling',
-        ],
-    ],
-];
diff --git a/typo3/sysext/backend/Configuration/SiteConfigurationTCA/sys_site_errorhandling.php b/typo3/sysext/backend/Configuration/SiteConfigurationTCA/sys_site_errorhandling.php
deleted file mode 100644 (file)
index c906773..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-
-return [
-    'ctrl' => [
-        'label' => 'errorCode',
-        'title' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.ctrl.title',
-        'type' => 'errorHandler',
-        'typeicon_column' => 'errorHandler',
-        'typeicon_classes' => [
-            'default' => 'default-not-found',
-            'Fluid' => 'mimetypes-text-html',
-            'ContentFromPid' => 'apps-pagetree-page-content-from-page',
-            'ClassDispatcher' => 'mimetypes-text-php',
-        ],
-    ],
-    'columns' => [
-        'errorCode' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorCode',
-            'config' => [
-                'type' => 'input',
-                'eval' => 'required, trim, int',
-                'range' => [
-                    'lower' => 0,
-                    'upper' => 599,
-                ],
-                'default' => 404,
-                'valuePicker' => [
-                    'mode' => '',
-                    'items' => [
-                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorCode.404', '404'],
-                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorCode.403', '403'],
-                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorCode.401', '401'],
-                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorCode.500', '500'],
-                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorCode.503', '503'],
-                        ['LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorCode.0', '0'],
-                    ],
-                ],
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'errorHandler' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorHandler',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'items' => [
-                    [' - select an handler type - ', ''],
-                    ['Fluid Template', 'Fluid'],
-                    ['Show Content from Page', 'Page'],
-                    ['PHP Class (must implement the PageErrorHandlerInterface)', 'PHP'],
-                ],
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'errorFluidTemplate' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorFluidTemplate',
-            'config' => [
-                'type' => 'input',
-                'eval' => 'required',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'errorFluidTemplatesRootPath' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorFluidTemplatesRootPath',
-            'config' => [
-                'type' => 'input',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'errorFluidLayoutsRootPath' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorFluidLayoutsRootPath',
-            'config' => [
-                'type' => 'input',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'errorFluidPartialsRootPath' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorFluidPartialsRootPath',
-            'config' => [
-                'type' => 'input',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'errorContentSource' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorContentSource',
-            'config' => [
-                'type' => 'input',
-                'renderType' => 'inputLink',
-                'eval' => 'required',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-                'fieldControl' => [
-                    'linkPopup' => [
-                        'options' => [
-                            'blindLinkOptions' => 'file,mail,spec,folder',
-                        ]
-                    ]
-                ],
-            ],
-        ],
-        'errorPhpClassFQCN' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.errorPhpClassFQCN',
-            'config' => [
-                'type' => 'input',
-                'eval' => 'required',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-    ],
-    'types' => [
-        '1' => [
-            'showitem' => 'errorCode, errorHandler',
-        ],
-        'Fluid' => [
-            'showitem' => 'errorCode, errorHandler, errorFluidTemplate,
-                           --div--;LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_errorhandling.tab.rootpaths,
-                           errorFluidTemplatesRootPath, errorFluidLayoutsRootPath, errorFluidPartialsRootPath',
-        ],
-        'Page' => [
-            'showitem' => 'errorCode, errorHandler, errorContentSource',
-        ],
-        'PHP' => [
-            'showitem' => 'errorCode, errorHandler, errorPhpClassFQCN',
-        ],
-    ],
-];
diff --git a/typo3/sysext/backend/Configuration/SiteConfigurationTCA/sys_site_language.php b/typo3/sysext/backend/Configuration/SiteConfigurationTCA/sys_site_language.php
deleted file mode 100644 (file)
index db157ee..0000000
+++ /dev/null
@@ -1,457 +0,0 @@
-<?php
-
-return [
-    'ctrl' => [
-        'label' => 'languageId',
-        'title' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.ctrl.title',
-        'typeicon_classes' => [
-            'default' => 'mimetypes-x-content-domain',
-        ],
-    ],
-    'columns' => [
-        'languageId' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.language',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'items' => [
-                    ['Default Language', 0],
-                ],
-                'foreign_table' => 'sys_language',
-                'size' => 1,
-                'min' => 1,
-                'max' => 1,
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'title' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.title',
-            'config' => [
-                'type' => 'input',
-                'size' => 10,
-                'eval' => 'required',
-                'placeholder' => 'English',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'navigationTitle' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.navigationTitle',
-            'config' => [
-                'type' => 'input',
-                'size' => 10,
-                'placeholder' => 'English',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'base' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.base',
-            'config' => [
-                'type' => 'input',
-                'eval' => 'required',
-                'default' => '/',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'locale' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.locale',
-            'config' => [
-                'type' => 'input',
-                'eval' => 'required',
-                'placeholder' => 'en_US.UTF-8',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'iso-639-1' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.iso-639-1',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                // Fed by data provider
-                'items' => [],
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'hreflang' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.hreflang',
-            'config' => [
-                'type' => 'input',
-                'placeholder' => 'en-US',
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'direction' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.direction',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'items' => [
-                    ['None', '', ''],
-                    ['Left to Right', 'ltr', ''],
-                    ['Right to Left', 'rtl', ''],
-                ],
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'typo3Language' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.typo3Language',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                // Fed by data provider
-                'items' => [],
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-                'default' => 'default'
-            ],
-        ],
-        'flag' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.flag',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'items' => [
-                    ['global', 'global', 'flags-multiple'],
-                    ['ad', 'ad', 'flags-ad'],
-                    ['ae', 'ae', 'flags-ae'],
-                    ['af', 'af', 'flags-af'],
-                    ['ag', 'ag', 'flags-ag'],
-                    ['ai', 'ai', 'flags-ai'],
-                    ['al', 'al', 'flags-al'],
-                    ['am', 'am', 'flags-am'],
-                    ['an', 'an', 'flags-an'],
-                    ['ao', 'ao', 'flags-ao'],
-                    ['ar', 'ar', 'flags-ar'],
-                    ['as', 'as', 'flags-as'],
-                    ['at', 'at', 'flags-at'],
-                    ['au', 'au', 'flags-au'],
-                    ['aw', 'aw', 'flags-aw'],
-                    ['ax', 'ax', 'flags-ax'],
-                    ['az', 'az', 'flags-az'],
-                    ['ba', 'ba', 'flags-ba'],
-                    ['bb', 'bb', 'flags-bb'],
-                    ['bd', 'bd', 'flags-bd'],
-                    ['be', 'be', 'flags-be'],
-                    ['bf', 'bf', 'flags-bf'],
-                    ['bg', 'bg', 'flags-bg'],
-                    ['bh', 'bh', 'flags-bh'],
-                    ['bi', 'bi', 'flags-bi'],
-                    ['bj', 'bj', 'flags-bj'],
-                    ['bm', 'bm', 'flags-bm'],
-                    ['bn', 'bn', 'flags-bn'],
-                    ['bo', 'bo', 'flags-bo'],
-                    ['br', 'br', 'flags-br'],
-                    ['bs', 'bs', 'flags-bs'],
-                    ['bt', 'bt', 'flags-bt'],
-                    ['bv', 'bv', 'flags-bv'],
-                    ['bw', 'bw', 'flags-bw'],
-                    ['by', 'by', 'flags-by'],
-                    ['bz', 'bz', 'flags-bz'],
-                    ['ca', 'ca', 'flags-ca'],
-                    ['catalonia', 'catalonia', 'flags-catalonia'],
-                    ['cc', 'cc', 'flags-cc'],
-                    ['cd', 'cd', 'flags-cd'],
-                    ['cf', 'cf', 'flags-cf'],
-                    ['cg', 'cg', 'flags-cg'],
-                    ['ch', 'ch', 'flags-ch'],
-                    ['ci', 'ci', 'flags-ci'],
-                    ['ck', 'ck', 'flags-ck'],
-                    ['cl', 'cl', 'flags-cl'],
-                    ['cm', 'cm', 'flags-cm'],
-                    ['cn', 'cn', 'flags-cn'],
-                    ['co', 'co', 'flags-co'],
-                    ['cr', 'cr', 'flags-cr'],
-                    ['cs', 'cs', 'flags-cs'],
-                    ['cu', 'cu', 'flags-cu'],
-                    ['cv', 'cv', 'flags-cv'],
-                    ['cx', 'cx', 'flags-cx'],
-                    ['cy', 'cy', 'flags-cy'],
-                    ['cz', 'cz', 'flags-cz'],
-                    ['de', 'de', 'flags-de'],
-                    ['dj', 'dj', 'flags-dj'],
-                    ['dk', 'dk', 'flags-dk'],
-                    ['dm', 'dm', 'flags-dm'],
-                    ['do', 'do', 'flags-do'],
-                    ['dz', 'dz', 'flags-dz'],
-                    ['ec', 'ec', 'flags-ec'],
-                    ['ee', 'ee', 'flags-ee'],
-                    ['eg', 'eg', 'flags-eg'],
-                    ['eh', 'eh', 'flags-eh'],
-                    ['en-us-gb', 'en-us-gb', 'flags-en-us-gb'],
-                    ['england', 'england', 'flags-gb-eng'],
-                    ['er', 'er', 'flags-er'],
-                    ['es', 'es', 'flags-es'],
-                    ['et', 'et', 'flags-et'],
-                    ['eu', 'eu', 'flags-eu'],
-                    ['fm', 'fm', 'flags-fm'],
-                    ['fi', 'fi', 'flags-fi'],
-                    ['fj', 'fj', 'flags-fj'],
-                    ['fk', 'fk', 'flags-fk'],
-                    ['fm', 'fm', 'flags-fm'],
-                    ['fo', 'fo', 'flags-fo'],
-                    ['fr', 'fr', 'flags-fr'],
-                    ['ga', 'ga', 'flags-ga'],
-                    ['gb', 'gb', 'flags-gb'],
-                    ['gd', 'gd', 'flags-gd'],
-                    ['ge', 'ge', 'flags-ge'],
-                    ['gf', 'gf', 'flags-gf'],
-                    ['gh', 'gh', 'flags-gh'],
-                    ['gi', 'gi', 'flags-gi'],
-                    ['gl', 'gl', 'flags-gl'],
-                    ['gm', 'gm', 'flags-gm'],
-                    ['gn', 'gn', 'flags-gn'],
-                    ['gp', 'gp', 'flags-gp'],
-                    ['gq', 'gq', 'flags-gq'],
-                    ['gr', 'gr', 'flags-gr'],
-                    ['gs', 'gs', 'flags-gs'],
-                    ['gt', 'gt', 'flags-gt'],
-                    ['gu', 'gu', 'flags-gu'],
-                    ['gw', 'gw', 'flags-gw'],
-                    ['gy', 'gy', 'flags-gy'],
-                    ['hk', 'hk', 'flags-hk'],
-                    ['hm', 'hm', 'flags-hm'],
-                    ['hn', 'hn', 'flags-hn'],
-                    ['hr', 'hr', 'flags-hr'],
-                    ['ht', 'ht', 'flags-ht'],
-                    ['hu', 'hu', 'flags-hu'],
-                    ['id', 'id', 'flags-id'],
-                    ['ie', 'ie', 'flags-ie'],
-                    ['il', 'il', 'flags-il'],
-                    ['in', 'in', 'flags-in'],
-                    ['io', 'io', 'flags-io'],
-                    ['iq', 'iq', 'flags-iq'],
-                    ['ir', 'ir', 'flags-ir'],
-                    ['is', 'is', 'flags-is'],
-                    ['it', 'it', 'flags-it'],
-                    ['jm', 'jm', 'flags-jm'],
-                    ['jo', 'jo', 'flags-jo'],
-                    ['jp', 'jp', 'flags-jp'],
-                    ['ke', 'ke', 'flags-ke'],
-                    ['kg', 'kg', 'flags-kg'],
-                    ['kh', 'kh', 'flags-kh'],
-                    ['ki', 'ki', 'flags-ki'],
-                    ['km', 'km', 'flags-km'],
-                    ['kn', 'kn', 'flags-kn'],
-                    ['kp', 'kp', 'flags-kp'],
-                    ['kr', 'kr', 'flags-kr'],
-                    ['kw', 'kw', 'flags-kw'],
-                    ['ky', 'ky', 'flags-ky'],
-                    ['kz', 'kz', 'flags-kz'],
-                    ['la', 'la', 'flags-la'],
-                    ['lb', 'lb', 'flags-lb'],
-                    ['lc', 'lc', 'flags-lc'],
-                    ['li', 'li', 'flags-li'],
-                    ['lk', 'lk', 'flags-lk'],
-                    ['lr', 'lr', 'flags-lr'],
-                    ['ls', 'ls', 'flags-ls'],
-                    ['lt', 'lt', 'flags-lt'],
-                    ['lu', 'lu', 'flags-lu'],
-                    ['lv', 'lv', 'flags-lv'],
-                    ['ly', 'ly', 'flags-ly'],
-                    ['ma', 'ma', 'flags-ma'],
-                    ['mc', 'mc', 'flags-mc'],
-                    ['md', 'md', 'flags-md'],
-                    ['me', 'me', 'flags-me'],
-                    ['mg', 'mg', 'flags-mg'],
-                    ['mh', 'mh', 'flags-mh'],
-                    ['mk', 'mk', 'flags-mk'],
-                    ['ml', 'ml', 'flags-ml'],
-                    ['mm', 'mm', 'flags-mm'],
-                    ['mn', 'mn', 'flags-mn'],
-                    ['mo', 'mo', 'flags-mo'],
-                    ['mp', 'mp', 'flags-mp'],
-                    ['mq', 'mq', 'flags-mq'],
-                    ['mr', 'mr', 'flags-mr'],
-                    ['ms', 'ms', 'flags-ms'],
-                    ['mt', 'mt', 'flags-mt'],
-                    ['mu', 'mu', 'flags-mu'],
-                    ['mv', 'mv', 'flags-mv'],
-                    ['mw', 'mw', 'flags-mw'],
-                    ['mx', 'mx', 'flags-mx'],
-                    ['my', 'my', 'flags-my'],
-                    ['mz', 'mz', 'flags-mz'],
-                    ['na', 'na', 'flags-na'],
-                    ['nc', 'nc', 'flags-nc'],
-                    ['ne', 'ne', 'flags-ne'],
-                    ['nf', 'nf', 'flags-nf'],
-                    ['ng', 'ng', 'flags-ng'],
-                    ['ni', 'ni', 'flags-ni'],
-                    ['nl', 'nl', 'flags-nl'],
-                    ['no', 'no', 'flags-no'],
-                    ['np', 'np', 'flags-np'],
-                    ['nr', 'nr', 'flags-nr'],
-                    ['nu', 'nu', 'flags-nu'],
-                    ['nz', 'nz', 'flags-nz'],
-                    ['om', 'om', 'flags-om'],
-                    ['pa', 'pa', 'flags-pa'],
-                    ['pe', 'pe', 'flags-pe'],
-                    ['pf', 'pf', 'flags-pf'],
-                    ['pg', 'pg', 'flags-pg'],
-                    ['ph', 'ph', 'flags-ph'],
-                    ['pk', 'pk', 'flags-pk'],
-                    ['pl', 'pl', 'flags-pl'],
-                    ['pm', 'pm', 'flags-pm'],
-                    ['pn', 'pn', 'flags-pn'],
-                    ['pr', 'pr', 'flags-pr'],
-                    ['ps', 'ps', 'flags-ps'],
-                    ['pt', 'pt', 'flags-pt'],
-                    ['pw', 'pw', 'flags-pw'],
-                    ['py', 'py', 'flags-py'],
-                    ['qa', 'qa', 'flags-qa'],
-                    ['qc', 'qc', 'flags-qc'],
-                    ['re', 're', 'flags-re'],
-                    ['ro', 'ro', 'flags-ro'],
-                    ['rs', 'rs', 'flags-rs'],
-                    ['ru', 'ru', 'flags-ru'],
-                    ['rw', 'rw', 'flags-rw'],
-                    ['sa', 'sa', 'flags-sa'],
-                    ['sb', 'sb', 'flags-sb'],
-                    ['sc', 'sc', 'flags-sc'],
-                    ['gb-sct', 'gb-sct', 'flags-gb-sct'],
-                    ['sd', 'sd', 'flags-sd'],
-                    ['se', 'se', 'flags-se'],
-                    ['sg', 'sg', 'flags-sg'],
-                    ['sh', 'sh', 'flags-sh'],
-                    ['si', 'si', 'flags-si'],
-                    ['sj', 'sj', 'flags-sj'],
-                    ['sk', 'sk', 'flags-sk'],
-                    ['sl', 'sl', 'flags-sl'],
-                    ['sm', 'sm', 'flags-sm'],
-                    ['sn', 'sn', 'flags-sn'],
-                    ['so', 'so', 'flags-so'],
-                    ['sr', 'sr', 'flags-sr'],
-                    ['st', 'st', 'flags-st'],
-                    ['sv', 'sv', 'flags-sv'],
-                    ['sy', 'sy', 'flags-sy'],
-                    ['sz', 'sz', 'flags-sz'],
-                    ['tc', 'tc', 'flags-tc'],
-                    ['td', 'td', 'flags-td'],
-                    ['tf', 'tf', 'flags-tf'],
-                    ['tg', 'tg', 'flags-tg'],
-                    ['th', 'th', 'flags-th'],
-                    ['tj', 'tj', 'flags-tj'],
-                    ['tk', 'tk', 'flags-tk'],
-                    ['tl', 'tl', 'flags-tl'],
-                    ['tm', 'tm', 'flags-tm'],
-                    ['tn', 'tn', 'flags-tn'],
-                    ['to', 'to', 'flags-to'],
-                    ['tr', 'tr', 'flags-tr'],
-                    ['tt', 'tt', 'flags-tt'],
-                    ['tv', 'tv', 'flags-tv'],
-                    ['tw', 'tw', 'flags-tw'],
-                    ['tz', 'tz', 'flags-tz'],
-                    ['ua', 'ua', 'flags-ua'],
-                    ['ug', 'ug', 'flags-ug'],
-                    ['um', 'um', 'flags-um'],
-                    ['us', 'us', 'flags-us'],
-                    ['uy', 'uy', 'flags-uy'],
-                    ['uz', 'uz', 'flags-uz'],
-                    ['va', 'va', 'flags-va'],
-                    ['vc', 'vc', 'flags-vc'],
-                    ['ve', 've', 'flags-ve'],
-                    ['vg', 'vg', 'flags-vg'],
-                    ['vi', 'vi', 'flags-vi'],
-                    ['vn', 'vn', 'flags-vn'],
-                    ['vu', 'vu', 'flags-vu'],
-                    ['gb-wls', 'gb-wls', 'flags-gb-wls'],
-                    ['wf', 'wf', 'flags-wf'],
-                    ['ws', 'ws', 'flags-ws'],
-                    ['ye', 'ye', 'flags-ye'],
-                    ['yt', 'yt', 'flags-yt'],
-                    ['za', 'za', 'flags-za'],
-                    ['zm', 'zm', 'flags-zm'],
-                    ['zw', 'zw', 'flags-zw'],
-                ],
-                'size' => 1,
-                'minitems' => 0,
-                'maxitems' => 1,
-                'fieldWizard' => [
-                    'selectIcons' => [
-                        'disabled' => false,
-                    ],
-                ],
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'fallbackType' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.fallbackType',
-            'displayCond' => 'FIELD:languageId:>:0',
-            'onChange' => 'reload',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectSingle',
-                'items' => [
-                    ['No fallback (strict)', 'strict'],
-                    ['Fallback to other language', 'fallback'],
-                ],
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-        'fallbacks' => [
-            'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_siteconfiguration_tca.xlf:sys_site_language.fallbacks',
-            'displayCond' => 'FIELD:fallbackType:=:fallback',
-            'config' => [
-                'type' => 'select',
-                'renderType' => 'selectMultipleSideBySide',
-                'items' => [
-                    ['Default Language', 0],
-                ],
-                'foreign_table' => 'sys_language',
-                'size' => 5,
-                'min' => 0,
-                'fieldInformation' => [
-                    'SiteConfigurationModuleFieldInformation' => [
-                        'renderType' => 'SiteConfigurationModuleFieldInformation',
-                    ],
-                ],
-            ],
-        ],
-    ],
-    'types' => [
-        '1' => [
-            'showitem' => 'languageId, title, navigationTitle, base, locale, iso-639-1, hreflang, direction, typo3Language, flag, fallbackType, fallbacks',
-        ],
-    ],
-];
index f3a5fd2..a99d4ca 100644 (file)
        <file t3:id="1522785604" source-language="en" datatype="plaintext" original="messages" date="2018-02-27T22:22:32Z" product-name="backend">
                <header/>
                <body>
-                       <trans-unit id="sys_site.ctrl.title">
+                       <trans-unit id="site.ctrl.title">
                                <source>Site Configuration</source>
                        </trans-unit>
-                       <trans-unit id="sys_site.identifier">
+                       <trans-unit id="site.identifier">
                                <source>Site Identifier</source>
                        </trans-unit>
-                       <trans-unit id="sys_site.rootPageId">
+                       <trans-unit id="site.rootPageId">
                                <source>Root Page ID (You must create a page with a site root flag)</source>
                        </trans-unit>
-                       <trans-unit id="sys_site.base">
+                       <trans-unit id="site.base">
                                <source>Entry point (can be https://www.mydomain/ or just /, if it is just / you can not rely on TYPO3 creating full URLs)</source>
                        </trans-unit>
-                       <trans-unit id="sys_site.languages">
+                       <trans-unit id="site.languages">
                                <source>Available Languages for this site</source>
                        </trans-unit>
-                       <trans-unit id="sys_site.errorHandling">
+                       <trans-unit id="site.errorHandling">
                                <source>Error Handling</source>
                        </trans-unit>
-                       <trans-unit id="sys_site.tab.languages">
+                       <trans-unit id="site.tab.languages">
                                <source>Languages</source>
                        </trans-unit>
-                       <trans-unit id="sys_site.tab.errorHandling">
+                       <trans-unit id="site.tab.errorHandling">
                                <source>Error Handling</source>
                        </trans-unit>
 
-                       <trans-unit id="sys_site_language.ctrl.title">
+                       <trans-unit id="site_language.ctrl.title">
                                <source>Language Configuration for a Site</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.language">
+                       <trans-unit id="site_language.language">
                                <source>Language</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.title">
+                       <trans-unit id="site_language.title">
                                <source>Language title (e.g. "English")</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.navigationTitle">
+                       <trans-unit id="site_language.navigationTitle">
                                <source>Navigation title (e.g. "English", "Deutsch", "Fran├žais")</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.base">
+                       <trans-unit id="site_language.base">
                                <source>Entry point (either https://www.mydomain.fr/ or /fr/)</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.locale">
+                       <trans-unit id="site_language.locale">
                                <source>Language locale</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.iso-639-1">
+                       <trans-unit id="site_language.iso-639-1">
                                <source>Two letter ISO code</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.hreflang">
+                       <trans-unit id="site_language.hreflang">
                                <source>Language tag defined by RFC 1766 / 3066 for "lang" and "hreflang" attributes</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.direction">
+                       <trans-unit id="site_language.direction">
                                <source>Language direction for "dir" attribute</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.typo3Language">
+                       <trans-unit id="site_language.typo3Language">
                                <source>Language key for XLF files</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.flag">
+                       <trans-unit id="site_language.flag">
                                <source>Select flag icon</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.fallbackType">
+                       <trans-unit id="site_language.fallbackType">
                                <source>Fallback type</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.fallbacks">
+                       <trans-unit id="site_language.fallbacks">
                                <source>Fallback to other language(s) - order is important!</source>
                        </trans-unit>
 
-                       <trans-unit id="sys_site_errorhandling.ctrl.title">
+                       <trans-unit id="site_errorhandling.ctrl.title">
                                <source>Error Handling</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.tab.rootpaths">
+                       <trans-unit id="site_errorhandling.tab.rootpaths">
                                <source>Root Paths (optional)</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorCode">
+                       <trans-unit id="site_errorhandling.errorCode">
                                <source>Error Status Code</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorCode.404">
+                       <trans-unit id="site_errorhandling.errorCode.404">
                                <source>404 (Page not found)</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorCode.403">
+                       <trans-unit id="site_errorhandling.errorCode.403">
                                <source>403 (Forbidden)</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorCode.401">
+                       <trans-unit id="site_errorhandling.errorCode.401">
                                <source>401 (Unauthorized)</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorCode.500">
+                       <trans-unit id="site_errorhandling.errorCode.500">
                                <source>500 (Internal Server Error)</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorCode.503">
+                       <trans-unit id="site_errorhandling.errorCode.503">
                                <source>503 (Service Unavailable)</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorCode.0">
+                       <trans-unit id="site_errorhandling.errorCode.0">
                                <source>any error not defined otherwise</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorHandler">
+                       <trans-unit id="site_errorhandling.errorHandler">
                                <source>How to handle errors</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorFluidTemplate">
+                       <trans-unit id="site_errorhandling.errorFluidTemplate">
                                <source>Fluid Template File</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorFluidTemplatesRootPath">
+                       <trans-unit id="site_errorhandling.errorFluidTemplatesRootPath">
                                <source>Fluid Templates Root Path</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorFluidLayoutsRootPath">
+                       <trans-unit id="site_errorhandling.errorFluidLayoutsRootPath">
                                <source>Fluid Layouts Root Path</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorFluidPartialsRootPath">
+                       <trans-unit id="site_errorhandling.errorFluidPartialsRootPath">
                                <source>Fluid Partials Root Path</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorContentSource">
+                       <trans-unit id="site_errorhandling.errorContentSource">
                                <source>Show Content From Page</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorPhpClassFQCN">
+                       <trans-unit id="site_errorhandling.errorPhpClassFQCN">
                                <source>ErrorHandler Class Target (FQCN)</source>
                        </trans-unit>
                </body>
index 4f3ae66..19bc4f5 100644 (file)
@@ -3,28 +3,28 @@
        <file t3:id="1522923345" source-language="en" datatype="plaintext" original="messages" date="2015-01-02T11:16:11Z" product-name="backend">
                <header/>
                <body>
-                       <trans-unit id="sys_site.identifier">
+                       <trans-unit id="site.identifier">
                                <source>This name will be used to create the configuration directory. Mind the recommendations for directory names (only a-z,0-9,_,-) and make it unique.</source>
                        </trans-unit>
-                       <trans-unit id="sys_site.base">
+                       <trans-unit id="site.base">
                                <source>Main URL to call the frontend in default language.</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.base">
+                       <trans-unit id="site_language.base">
                                <source>use / to use keep the main URL as configured at field Entry Point. Add language specific suffixes to use those, or configure complete URLs for independent domains.</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.locale">
+                       <trans-unit id="site_language.locale">
                                <source>should be something like de_DE or en_US.UTF-8</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_language.typo3Language">
+                       <trans-unit id="site_language.typo3Language">
                                <source>Select the language to be used from translation files. Keep default if no translation files are available.</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorCode">
+                       <trans-unit id="site_errorhandling.errorCode">
                                <source>make sure to have at least 0 (not defined otherwise) configured in order to serve helpful error messages to your visitors.</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorFluidTemplate">
+                       <trans-unit id="site_errorhandling.errorFluidTemplate">
                                <source>absolute or relative path (from site root) to fluid template file</source>
                        </trans-unit>
-                       <trans-unit id="sys_site_errorhandling.errorPhpClassFQCN">
+                       <trans-unit id="site_errorhandling.errorPhpClassFQCN">
                                <source>PHP class full qualified name that serves the error page.</source>
                        </trans-unit>
                </body>
index b01f829..2cc100c 100644 (file)
@@ -76,7 +76,7 @@ class SiteDatabaseEditRowTest extends UnitTestCase
     {
         $input = [
             'command' => 'edit',
-            'tableName' => 'sys_site',
+            'tableName' => 'site',
             'vanillaUid' => 23,
             'customData' => [
                 'siteIdentifier' => 'main',
@@ -114,7 +114,7 @@ class SiteDatabaseEditRowTest extends UnitTestCase
     {
         $input = [
             'command' => 'edit',
-            'tableName' => 'sys_site_errorhandling',
+            'tableName' => 'site_errorhandling',
             'vanillaUid' => 23,
             'inlineTopMostParentUid' => 5,
             'inlineParentFieldName' => 'invalid',
@@ -140,7 +140,7 @@ class SiteDatabaseEditRowTest extends UnitTestCase
     {
         $input = [
             'command' => 'edit',
-            'tableName' => 'sys_site_language',
+            'tableName' => 'site_language',
             'vanillaUid' => 23,
             'inlineTopMostParentUid' => 5,
             'inlineParentFieldName' => 'invalid',
@@ -166,7 +166,7 @@ class SiteDatabaseEditRowTest extends UnitTestCase
     {
         $input = [
             'command' => 'edit',
-            'tableName' => 'sys_site_language',
+            'tableName' => 'site_language',
             'vanillaUid' => 23,
             'inlineTopMostParentUid' => 5,
             'inlineParentFieldName' => 'languages',
index f409289..ced7eb5 100644 (file)
@@ -17,7 +17,7 @@ namespace TYPO3\CMS\Core\Site\Entity;
  */
 
 /**
- * Entity representing a sys_sitelanguage configuration of a site object.
+ * Entity representing a site_language configuration of a site object.
  */
 class SiteLanguage
 {
index f1d97d7..fd3eea6 100644 (file)
@@ -139,6 +139,54 @@ Root pages are identified by one of these two properties:
 * they have the "Use as Root Page" property in `pages` set to true.
 
 
+Configuration
+=============
+
+The new backend module relies on FormEngine to render the edit interface. Since the form data is not stored in
+database records but in :file:`.yml` files, a couple of details have been extended of the default FormEngine code.
+
+The render configuration is stored in :file:`typo3/sysext/backend/Configuration/SiteConfiguration/` in a format
+syntactically identical to TCA. However, this is **not** loaded into :php:`$GLOBALS['TCA']` scope, and only a small
+subset of TCA features is supported.
+
+**Extending site configuration is experimental** and may change any time.
+
+In practice the configuration can be extended, but only with very simple fields like the basic config type :php:`input`,
+and even for this one not all features are possible, for example the :php:`eval` options are limited. The code throws
+exceptions or just ignores settings it does not support. While some of the limits may be relaxed a bit over time, many
+will be kept. The goal is to allow developers to extend the site configuration with a couple of simple things like 
+an input field for a Google API key. However it is **not possible to extend with complex TCA** like inline relations,
+database driven select fields, Flex Form handling and similar.
+
+The example below shows the experimental feature adding a field to site in an extensions file
+:file:`Configuration/SiteConfiguration/Overrides/sites.php`. Note the helper methods of class
+:php:`TYPO3\CMS\core\Utility\ExtensionManagementUtility` can not be used.
+
+.. code-block:: php
+
+    <?php
+    // Experimental example to add a new field to the site configuration
+
+    // Configure a new simple required input field to site
+    $GLOBALS['SiteConfiguration']['site']['columns']['myNewField'] = [
+        'label' => 'A new custom field',
+        'config' => [
+            'type' => 'input',
+            'eval' => 'required',
+        ],
+    ];
+    // And add it to showitem
+    $GLOBALS['SiteConfiguration']['site']['types']['0']['showitem'] = str_replace(
+        'base,',
+        'base, myNewField, ',
+        $GLOBALS['SiteConfiguration']['site']['types']['0']['showitem']
+    );
+
+The field will be shown in the edit form of the configuration module and it's value stored in the .yml
+file. Using the site object :php:`TYPO3\CMS\core\Site\Entity\Site`, the value can be fetched using
+:php:`->getConfiguration()['myNewField']`.
+
+
 Impact
 ======