[TASK] Rename ext:lowlevel/View to ext:lowlevel/Controller 75/54375/2
authorChristian Kuhn <lolli@schwarzbu.ch>
Thu, 12 Oct 2017 11:11:02 +0000 (13:11 +0200)
committerAndreas Fernandez <typo3@scripting-base.de>
Thu, 12 Oct 2017 12:19:24 +0000 (14:19 +0200)
The two "view" classes are clearly controllers and are
renamed with this patch accordingly.

Change-Id: Ic1cdc405ae24b87aa6224cda79b7226ce5eeec64
Resolves: #82744
Releases: master
Reviewed-on: https://review.typo3.org/54375
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
12 files changed:
composer.json
composer.lock
typo3/sysext/core/Classes/Integrity/DatabaseIntegrityCheck.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-82744-RenameExtlowlevelViewToLowlevelController.rst [new file with mode: 0644]
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php
typo3/sysext/lowlevel/Classes/Controller/ConfigurationController.php [new file with mode: 0644]
typo3/sysext/lowlevel/Classes/Controller/DatabaseIntegrityController.php [new file with mode: 0644]
typo3/sysext/lowlevel/Classes/View/ConfigurationView.php [deleted file]
typo3/sysext/lowlevel/Classes/View/DatabaseIntegrityView.php [deleted file]
typo3/sysext/lowlevel/Migrations/Code/ClassAliasMap.php [new file with mode: 0644]
typo3/sysext/lowlevel/composer.json
typo3/sysext/lowlevel/ext_tables.php

index f97622d..c7f27a0 100644 (file)
@@ -75,6 +75,7 @@
                                "typo3/sysext/extbase/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/fluid/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/info/Migrations/Code/ClassAliasMap.php",
+                               "typo3/sysext/lowlevel/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/version/Migrations/Code/ClassAliasMap.php",
                                "typo3/sysext/workspaces/Migrations/Code/ClassAliasMap.php"
                        ]
index c75b571..3170386 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "35c4d8cf070c5caf16b0faa1d7ccf03f",
+    "content-hash": "39981f9ff5c2b39ddf83a87ac8fc5d15",
     "packages": [
         {
             "name": "cogpowered/finediff",
index d61ceed..9c6aa0e 100644 (file)
@@ -29,7 +29,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  * Depends on \TYPO3\CMS\Core\Database\RelationHandler
  *
  * @todo Need to really extend this class when the DataHandler library has been updated and the whole API is better defined. There are some known bugs in this library. Further it would be nice with a facility to not only analyze but also clean up!
- * @see \TYPO3\CMS\Lowlevel\View\DatabaseIntegrityView::func_relations(), \TYPO3\CMS\Lowlevel\View\DatabaseIntegrityView::func_records()
+ * @see \TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController::func_relations(), \TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController::func_records()
  */
 class DatabaseIntegrityCheck
 {
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-82744-RenameExtlowlevelViewToLowlevelController.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-82744-RenameExtlowlevelViewToLowlevelController.rst
new file mode 100644 (file)
index 0000000..ed2ab4b
--- /dev/null
@@ -0,0 +1,37 @@
+.. include:: ../../Includes.txt
+
+=====================================================================
+Deprecation: #82744 - Rename ext:lowlevel/View to lowlevel/Controller
+=====================================================================
+
+See :issue:`82744`
+
+Description
+===========
+
+Two classes of extension lowlevel have been renamed:
+* :php:`TYPO3\CMS\Lowlevel\View\ConfigurationView` to :php:`TYPO3\CMS\Lowlevel\Controller\ConfigurationController`
+* :php:`TYPO3\CMS\Lowlevel\View\DatabaseIntegrityView` to :php:`TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController`
+
+
+Impact
+======
+
+Old class usages will still work: Class aliases are in place for TYPO3 v9,
+but will be removed in v10.
+
+
+Affected Installations
+======================
+
+Extensions that call or instantiate the old class names. It is however rather unlikely
+extensions depend on these controller classes directly. The extension scanner will find
+any usages within extensions.
+
+
+Migration
+=========
+
+Use new class names instead.
+
+.. index:: Backend, PHP-API, FullyScanned
\ No newline at end of file
index db71de8..a2028be 100644 (file)
@@ -394,6 +394,16 @@ return [
             'Deprecation-82725-DeprecateConfigurationForm.rst',
         ],
     ],
+    'TYPO3\CMS\Lowlevel\View\ConfigurationView' => [
+        'restFiles' => [
+            'Deprecation-82744-RenameExtlowlevelViewToLowlevelController.rst',
+        ],
+    ],
+    'TYPO3\CMS\Lowlevel\View\DatabaseIntegrityView' => [
+        'restFiles' => [
+            'Deprecation-82744-RenameExtlowlevelViewToLowlevelController.rst',
+        ],
+    ],
 
     // Removed interfaces
     'TYPO3\CMS\Backend\Form\DatabaseFileIconsHookInterface' => [
diff --git a/typo3/sysext/lowlevel/Classes/Controller/ConfigurationController.php b/typo3/sysext/lowlevel/Classes/Controller/ConfigurationController.php
new file mode 100644 (file)
index 0000000..7139496
--- /dev/null
@@ -0,0 +1,302 @@
+<?php
+namespace TYPO3\CMS\Lowlevel\Controller;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use TYPO3\CMS\Backend\Routing\Router;
+use TYPO3\CMS\Backend\Template\ModuleTemplate;
+use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Utility\ArrayUtility;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
+use TYPO3\CMS\Fluid\View\StandaloneView;
+use TYPO3\CMS\Lowlevel\Utility\ArrayBrowser;
+
+/**
+ * Script class for the Config module
+ */
+class ConfigurationController
+{
+    /**
+     * The name of the module
+     *
+     * @var string
+     */
+    protected $moduleName = 'system_config';
+
+    /**
+     * The module menu items array. Each key represents a key for which values can range between the items in the array of that key.
+     *
+     * @see init()
+     * @var array
+     */
+    protected $MOD_MENU = [
+        'function' => []
+    ];
+
+    /**
+     * Current settings for the keys of the MOD_MENU array
+     *
+     * @see $MOD_MENU
+     * @var array
+     */
+    protected $MOD_SETTINGS = [];
+
+    /**
+     * Blind configurations which should not be visible
+     *
+     * @var array
+     */
+    protected $blindedConfigurationOptions = [
+        'TYPO3_CONF_VARS' => [
+            'DB' => [
+                'database' => '******',
+                'host' => '******',
+                'password' => '******',
+                'port' => '******',
+                'socket' => '******',
+                'username' => '******',
+                'Connections' => [
+                    'Default' => [
+                        'dbname' => '******',
+                        'host' => '******',
+                        'password' => '******',
+                        'port' => '******',
+                        'user' => '******',
+                        'unix_socket' => '******',
+                    ],
+                ],
+            ],
+            'SYS' => [
+                'encryptionKey' => '******'
+            ]
+        ]
+    ];
+
+    /**
+     * Injects the request object for the current request or subrequest
+     * Simply calls main() and init() and outputs the content
+     *
+     * @param ServerRequestInterface $request the current request
+     * @param ResponseInterface $response
+     * @return ResponseInterface the response with the content
+     */
+    public function mainAction(ServerRequestInterface $request, ResponseInterface $response)
+    {
+        $view = GeneralUtility::makeInstance(StandaloneView::class);
+        $view->getRequest()->setControllerExtensionName('lowlevel');
+        // Prepare blinding for all database connection types
+        foreach (array_keys($GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']) as $connectionName) {
+            if ($connectionName !== 'Default') {
+                $this->blindedConfigurationOptions['TYPO3_CONF_VARS']['DB']['Connections'][$connectionName] =
+                    $this->blindedConfigurationOptions['TYPO3_CONF_VARS']['DB']['Connections']['Default'];
+            }
+        }
+
+        // MENU-ITEMS:
+        // If array, then it's a selector box menu
+        // If empty string it's just a variable, that'll be saved.
+        // Values NOT in this array will not be saved in the settings-array for the module.
+        $this->MOD_MENU = [
+            'function' => [
+                0 => LocalizationUtility::translate('typo3ConfVars', 'lowlevel'),
+                1 => LocalizationUtility::translate('tca', 'lowlevel'),
+                2 => LocalizationUtility::translate('tcaDescr', 'lowlevel'),
+                3 => LocalizationUtility::translate('loadedExt', 'lowlevel'),
+                4 => LocalizationUtility::translate('t3services', 'lowlevel'),
+                5 => LocalizationUtility::translate('tbemodules', 'lowlevel'),
+                6 => LocalizationUtility::translate('tbemodulesext', 'lowlevel'),
+                7 => LocalizationUtility::translate('tbeStyles', 'lowlevel'),
+                8 => LocalizationUtility::translate('beUser', 'lowlevel'),
+                9 => LocalizationUtility::translate('usersettings', 'lowlevel'),
+                10 => LocalizationUtility::translate('pagesTypes', 'lowlevel'),
+                11 => LocalizationUtility::translate('routes', 'lowlevel'),
+            ],
+            'regexsearch' => '',
+            'fixedLgd' => ''
+        ];
+        // CLEANSE SETTINGS
+        $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, GeneralUtility::_GP('SET'), $this->moduleName);
+
+        $moduleTemplate = GeneralUtility::makeInstance(ModuleTemplate::class);
+        $moduleTemplate->getPageRenderer()->loadRequireJsModule('TYPO3/CMS/Lowlevel/ConfigurationView');
+
+        /** @var ArrayBrowser $arrayBrowser */
+        $arrayBrowser = GeneralUtility::makeInstance(ArrayBrowser::class);
+        $label = $this->MOD_MENU['function'][$this->MOD_SETTINGS['function']];
+        $search_field = GeneralUtility::_GP('search_field');
+
+        $templatePathAndFilename = GeneralUtility::getFileAbsFileName('EXT:lowlevel/Resources/Private/Templates/Backend/Configuration.html');
+        $view->setTemplatePathAndFilename($templatePathAndFilename);
+        $view->assign('label', $label);
+        $view->assign('search_field', $search_field);
+        $view->assign('checkbox_checkRegexsearch', BackendUtility::getFuncCheck(0, 'SET[regexsearch]', $this->MOD_SETTINGS['regexsearch'], '', '', 'id="checkRegexsearch"'));
+
+        switch ($this->MOD_SETTINGS['function']) {
+            case 0:
+                $theVar = $GLOBALS['TYPO3_CONF_VARS'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$TYPO3_CONF_VARS';
+                break;
+            case 1:
+                $theVar = $GLOBALS['TCA'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$TCA';
+                break;
+            case 2:
+                $theVar = $GLOBALS['TCA_DESCR'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$TCA_DESCR';
+                break;
+            case 3:
+                $theVar = $GLOBALS['TYPO3_LOADED_EXT'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$TYPO3_LOADED_EXT';
+                break;
+            case 4:
+                $theVar = $GLOBALS['T3_SERVICES'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$T3_SERVICES';
+                break;
+            case 5:
+                $theVar = $GLOBALS['TBE_MODULES'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$TBE_MODULES';
+                break;
+            case 6:
+                $theVar = $GLOBALS['TBE_MODULES_EXT'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$TBE_MODULES_EXT';
+                break;
+            case 7:
+                $theVar = $GLOBALS['TBE_STYLES'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$TBE_STYLES';
+                break;
+            case 8:
+                $theVar = $GLOBALS['BE_USER']->uc;
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$BE_USER->uc';
+                break;
+            case 9:
+                $theVar = $GLOBALS['TYPO3_USER_SETTINGS'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$TYPO3_USER_SETTINGS';
+                break;
+            case 10:
+                $theVar = $GLOBALS['PAGES_TYPES'];
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = '$PAGES_TYPES';
+                break;
+            case 11:
+                $router = GeneralUtility::makeInstance(Router::class);
+                $routes = $router->getRoutes();
+                $theVar = [];
+                foreach ($routes as $identifier => $route) {
+                    $theVar[$identifier] = [
+                        'path' => $route->getPath(),
+                        'options' => $route->getOptions()
+                    ];
+                }
+                ArrayUtility::naturalKeySortRecursive($theVar);
+                $arrayBrowser->varName = 'BackendRoutes';
+                break;
+            default:
+                $theVar = [];
+        }
+        // Update node:
+        $update = 0;
+        $node = GeneralUtility::_GET('node');
+        // If any plus-signs were clicked, it's registered.
+        if (is_array($node)) {
+            $this->MOD_SETTINGS['node_' . $this->MOD_SETTINGS['function']] = $arrayBrowser->depthKeys($node, $this->MOD_SETTINGS['node_' . $this->MOD_SETTINGS['function']]);
+            $update = 1;
+        }
+        if ($update) {
+            $this->getBackendUser()->pushModuleData($this->moduleName, $this->MOD_SETTINGS);
+        }
+        $arrayBrowser->dontLinkVar = true;
+        $arrayBrowser->depthKeys = $this->MOD_SETTINGS['node_' . $this->MOD_SETTINGS['function']];
+        $arrayBrowser->regexMode = $this->MOD_SETTINGS['regexsearch'];
+        $arrayBrowser->fixedLgd = $this->MOD_SETTINGS['fixedLgd'];
+        $arrayBrowser->searchKeysToo = true;
+
+        // If any POST-vars are send, update the condition array
+        if (GeneralUtility::_POST('search') && trim($search_field)) {
+            $arrayBrowser->depthKeys = $arrayBrowser->getSearchKeys($theVar, '', $search_field, []);
+        }
+
+        // mask sensitive information
+        $varName = trim($arrayBrowser->varName, '$');
+        if (isset($this->blindedConfigurationOptions[$varName])) {
+            ArrayUtility::mergeRecursiveWithOverrule($theVar, ArrayUtility::intersectRecursive($this->blindedConfigurationOptions[$varName], $theVar));
+        }
+        $tree = $arrayBrowser->tree($theVar, '');
+        $view->assign('tree', $tree);
+
+        // Setting up the shortcut button for docheader
+        $buttonBar = $moduleTemplate->getDocHeaderComponent()->getButtonBar();
+        // Shortcut
+        $shortcutButton = $buttonBar->makeShortcutButton()
+            ->setModuleName($this->moduleName)
+            ->setDisplayName($this->MOD_MENU['function'][$this->MOD_SETTINGS['function']])
+            ->setSetVariables(['function']);
+        $buttonBar->addButton($shortcutButton);
+
+        $menu = $moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
+        $menu->setIdentifier('ConfigurationJumpMenu');
+
+        foreach ($this->MOD_MENU['function'] as $controller => $title) {
+            $item = $menu
+                ->makeMenuItem()
+                ->setHref(
+                    BackendUtility::getModuleUrl(
+                        $this->moduleName,
+                        [
+                            'id' => 0,
+                            'SET' => [
+                                'function' => $controller
+                            ]
+                        ]
+                    )
+                )
+                ->setTitle($title);
+            if ($controller === (int)$this->MOD_SETTINGS['function']) {
+                $item->setActive(true);
+            }
+            $menu->addMenuItem($item);
+        }
+        $moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
+
+        $content = '<form action="" id="ConfigurationView" method="post">';
+        $content .= $view->render();
+        $content .= '</form>';
+
+        $moduleTemplate->setContent($content);
+        $response->getBody()->write($moduleTemplate->renderContent());
+        return $response;
+    }
+
+    /**
+     * Returns the Backend User
+     * @return BackendUserAuthentication
+     */
+    protected function getBackendUser()
+    {
+        return $GLOBALS['BE_USER'];
+    }
+}
diff --git a/typo3/sysext/lowlevel/Classes/Controller/DatabaseIntegrityController.php b/typo3/sysext/lowlevel/Classes/Controller/DatabaseIntegrityController.php
new file mode 100644 (file)
index 0000000..6e8a8df
--- /dev/null
@@ -0,0 +1,494 @@
+<?php
+namespace TYPO3\CMS\Lowlevel\Controller;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use TYPO3\CMS\Backend\Template\Components\ButtonBar;
+use TYPO3\CMS\Backend\Template\ModuleTemplate;
+use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Database\QueryView;
+use TYPO3\CMS\Core\Database\ReferenceIndex;
+use TYPO3\CMS\Core\Imaging\Icon;
+use TYPO3\CMS\Core\Imaging\IconFactory;
+use TYPO3\CMS\Core\Integrity\DatabaseIntegrityCheck;
+use TYPO3\CMS\Core\Localization\LanguageService;
+use TYPO3\CMS\Core\Page\PageRenderer;
+use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Core\Utility\PathUtility;
+use TYPO3\CMS\Fluid\View\StandaloneView;
+
+/**
+ * Script class for the DB int module
+ */
+class DatabaseIntegrityController
+{
+    /**
+     * @var string
+     */
+    protected $formName = 'queryform';
+
+    /**
+     * The name of the module
+     *
+     * @var string
+     */
+    protected $moduleName = 'system_dbint';
+
+    /**
+     * @var StandaloneView
+     */
+    protected $view;
+
+    /**
+     * @var string
+     */
+    protected $templatePath = 'EXT:lowlevel/Resources/Private/Templates/Backend/';
+
+    /**
+     * @var IconFactory
+     */
+    protected $iconFactory;
+
+    /**
+     * ModuleTemplate Container
+     *
+     * @var ModuleTemplate
+     */
+    protected $moduleTemplate;
+
+    /**
+     * Loaded with the global array $MCONF which holds some module configuration from the conf.php file of backend modules.
+     *
+     * @see init()
+     * @var array
+     */
+    protected $MCONF = [
+        'name' => 'system_dbint',
+    ];
+
+    /**
+     * The module menu items array. Each key represents a key for which values can range between the items in the array of that key.
+     *
+     * @see init()
+     * @var array
+     */
+    protected $MOD_MENU = [
+        'function' => []
+    ];
+
+    /**
+     * Current settings for the keys of the MOD_MENU array
+     *
+     * @see $MOD_MENU
+     * @var array
+     */
+    protected $MOD_SETTINGS = [];
+
+    /**
+     * Injects the request object for the current request or subrequest
+     * Simply calls main() and init() and outputs the content
+     *
+     * @param ServerRequestInterface $request the current request
+     * @param ResponseInterface $response
+     * @return ResponseInterface the response with the content
+     */
+    public function mainAction(ServerRequestInterface $request, ResponseInterface $response)
+    {
+        $this->getLanguageService()->includeLLFile('EXT:lowlevel/Resources/Private/Language/locallang.xlf');
+        $this->iconFactory = GeneralUtility::makeInstance(IconFactory::class);
+        $this->view = GeneralUtility::makeInstance(StandaloneView::class);
+        $this->view->getRequest()->setControllerExtensionName('lowlevel');
+
+        $this->menuConfig();
+        $this->moduleTemplate = GeneralUtility::makeInstance(ModuleTemplate::class);
+        $this->moduleTemplate->addJavaScriptCode(
+            'jumpToUrl',
+            '
+            function jumpToUrl(URL) {
+                window.location.href = URL;
+                return false;
+            }
+            '
+        );
+
+        switch ($this->MOD_SETTINGS['function']) {
+            case 'search':
+                $templateFilename = 'CustomSearch.html';
+                $this->func_search();
+                break;
+            case 'records':
+                $templateFilename = 'RecordStatistics.html';
+                $this->func_records();
+                break;
+            case 'relations':
+                $templateFilename = 'Relations.html';
+                $this->func_relations();
+                break;
+            case 'refindex':
+                $templateFilename = 'ReferenceIndex.html';
+                $this->func_refindex();
+                break;
+            default:
+                $templateFilename = 'IntegrityOverview.html';
+                $this->func_default();
+        }
+        $this->view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($this->templatePath . $templateFilename));
+        $content = '<form action="" method="post" id="DatabaseIntegrityView" name="' . $this->formName . '">';
+        $content .= $this->view->render();
+        $content .= '</form>';
+
+        // Setting up the shortcut button for docheader
+        $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
+        // Shortcut
+        $shortCutButton = $buttonBar->makeShortcutButton()
+            ->setModuleName($this->moduleName)
+            ->setDisplayName($this->MOD_MENU['function'][$this->MOD_SETTINGS['function']])
+            ->setSetVariables(['function', 'search', 'search_query_makeQuery']);
+        $buttonBar->addButton($shortCutButton, ButtonBar::BUTTON_POSITION_RIGHT, 2);
+
+        $this->getModuleMenu();
+
+        $this->moduleTemplate->setContent($content);
+        $response->getBody()->write($this->moduleTemplate->renderContent());
+        return $response;
+    }
+
+    /**
+     * Configure menu
+     */
+    protected function menuConfig()
+    {
+        $lang = $this->getLanguageService();
+        // MENU-ITEMS:
+        // If array, then it's a selector box menu
+        // If empty string it's just a variable, that'll be saved.
+        // Values NOT in this array will not be saved in the settings-array for the module.
+        $this->MOD_MENU = [
+            'function' => [
+                0 => htmlspecialchars($lang->getLL('menuTitle')),
+                'records' => htmlspecialchars($lang->getLL('recordStatistics')),
+                'relations' => htmlspecialchars($lang->getLL('databaseRelations')),
+                'search' => htmlspecialchars($lang->getLL('fullSearch')),
+                'refindex' => htmlspecialchars($lang->getLL('manageRefIndex'))
+            ],
+            'search' => [
+                'raw' => htmlspecialchars($lang->getLL('rawSearch')),
+                'query' => htmlspecialchars($lang->getLL('advancedQuery'))
+            ],
+            'search_query_smallparts' => '',
+            'search_result_labels' => '',
+            'labels_noprefix' => '',
+            'options_sortlabel' => '',
+            'show_deleted' => '',
+            'queryConfig' => '',
+            // Current query
+            'queryTable' => '',
+            // Current table
+            'queryFields' => '',
+            // Current tableFields
+            'queryLimit' => '',
+            // Current limit
+            'queryOrder' => '',
+            // Current Order field
+            'queryOrderDesc' => '',
+            // Current Order field descending flag
+            'queryOrder2' => '',
+            // Current Order2 field
+            'queryOrder2Desc' => '',
+            // Current Order2 field descending flag
+            'queryGroup' => '',
+            // Current Group field
+            'storeArray' => '',
+            // Used to store the available Query config memory banks
+            'storeQueryConfigs' => '',
+            // Used to store the available Query configs in memory
+            'search_query_makeQuery' => [
+                'all' => htmlspecialchars($lang->getLL('selectRecords')),
+                'count' => htmlspecialchars($lang->getLL('countResults')),
+                'explain' => htmlspecialchars($lang->getLL('explainQuery')),
+                'csv' => htmlspecialchars($lang->getLL('csvExport'))
+            ],
+            'sword' => ''
+        ];
+        // CLEAN SETTINGS
+        $OLD_MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, '', $this->moduleName, 'ses');
+        $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, GeneralUtility::_GP('SET'), $this->moduleName, 'ses');
+        if (GeneralUtility::_GP('queryConfig')) {
+            $qA = GeneralUtility::_GP('queryConfig');
+            $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, ['queryConfig' => serialize($qA)], $this->moduleName, 'ses');
+        }
+        $addConditionCheck = GeneralUtility::_GP('qG_ins');
+        $setLimitToStart = false;
+        foreach ($OLD_MOD_SETTINGS as $key => $val) {
+            if (substr($key, 0, 5) === 'query' && $this->MOD_SETTINGS[$key] != $val && $key !== 'queryLimit' && $key !== 'use_listview') {
+                $setLimitToStart = true;
+                if ($key === 'queryTable' && !$addConditionCheck) {
+                    $this->MOD_SETTINGS['queryConfig'] = '';
+                }
+            }
+            if ($key === 'queryTable' && $this->MOD_SETTINGS[$key] != $val) {
+                $this->MOD_SETTINGS['queryFields'] = '';
+            }
+        }
+        if ($setLimitToStart) {
+            $currentLimit = explode(',', $this->MOD_SETTINGS['queryLimit']);
+            if ($currentLimit[1]) {
+                $this->MOD_SETTINGS['queryLimit'] = '0,' . $currentLimit[1];
+            } else {
+                $this->MOD_SETTINGS['queryLimit'] = '0';
+            }
+            $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, $this->MOD_SETTINGS, $this->moduleName, 'ses');
+        }
+    }
+
+    /**
+     * Generates the action menu
+     */
+    protected function getModuleMenu()
+    {
+        $menu = $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
+        $menu->setIdentifier('DatabaseJumpMenu');
+
+        foreach ($this->MOD_MENU['function'] as $controller => $title) {
+            $item = $menu
+                ->makeMenuItem()
+                ->setHref(
+                    BackendUtility::getModuleUrl(
+                        $this->moduleName,
+                        [
+                            'id' => 0,
+                            'SET' => [
+                                'function' => $controller
+                            ]
+                        ]
+                    )
+                )
+                ->setTitle($title);
+            if ($controller === $this->MOD_SETTINGS['function']) {
+                $item->setActive(true);
+            }
+            $menu->addMenuItem($item);
+        }
+        $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
+    }
+
+    /**
+     * Creates the overview menu.
+     */
+    protected function func_default()
+    {
+        $modules = [];
+        $availableModFuncs = ['records', 'relations', 'search', 'refindex'];
+        foreach ($availableModFuncs as $modFunc) {
+            $modules[$modFunc] = BackendUtility::getModuleUrl('system_dbint') . '&SET[function]=' . $modFunc;
+        }
+        $this->view->assign('availableFunctions', $modules);
+    }
+
+    /****************************
+     *
+     * Functionality implementation
+     *
+     ****************************/
+    /**
+     * Check and update reference index!
+     */
+    protected function func_refindex()
+    {
+        $readmeLocation = ExtensionManagementUtility::extPath('lowlevel', 'README.rst');
+        $this->view->assign('ReadmeLink', PathUtility::getAbsoluteWebPath($readmeLocation));
+        $this->view->assign('ReadmeLocation', $readmeLocation);
+        $this->view->assign('binaryPath', ExtensionManagementUtility::extPath('core', 'bin/typo3'));
+
+        if (GeneralUtility::_GP('_update') || GeneralUtility::_GP('_check')) {
+            $testOnly = (bool)GeneralUtility::_GP('_check');
+            // Call the functionality
+            $refIndexObj = GeneralUtility::makeInstance(ReferenceIndex::class);
+            list(, $bodyContent) = $refIndexObj->updateIndex($testOnly);
+            $this->view->assign('content', str_replace('##LF##', '<br />', $bodyContent));
+        }
+    }
+
+    /**
+     * Search (Full / Advanced)
+     */
+    protected function func_search()
+    {
+        $lang = $this->getLanguageService();
+        $searchMode = $this->MOD_SETTINGS['search'];
+        $fullsearch = GeneralUtility::makeInstance(QueryView::class);
+        $fullsearch->setFormName($this->formName);
+        $submenu = '<div class="form-inline form-inline-spaced">';
+        $submenu .= BackendUtility::getDropdownMenu(0, 'SET[search]', $searchMode, $this->MOD_MENU['search']);
+        if ($this->MOD_SETTINGS['search'] === 'query') {
+            $submenu .= BackendUtility::getDropdownMenu(0, 'SET[search_query_makeQuery]', $this->MOD_SETTINGS['search_query_makeQuery'], $this->MOD_MENU['search_query_makeQuery']) . '<br />';
+        }
+        $submenu .= '</div>';
+        if ($this->MOD_SETTINGS['search'] === 'query') {
+            $submenu .= '<div class="checkbox"><label for="checkSearch_query_smallparts">' . BackendUtility::getFuncCheck(0, 'SET[search_query_smallparts]', $this->MOD_SETTINGS['search_query_smallparts'], '', '', 'id="checkSearch_query_smallparts"') . $lang->getLL('showSQL') . '</label></div>';
+            $submenu .= '<div class="checkbox"><label for="checkSearch_result_labels">' . BackendUtility::getFuncCheck(0, 'SET[search_result_labels]', $this->MOD_SETTINGS['search_result_labels'], '', '', 'id="checkSearch_result_labels"') . $lang->getLL('useFormattedStrings') . '</label></div>';
+            $submenu .= '<div class="checkbox"><label for="checkLabels_noprefix">' . BackendUtility::getFuncCheck(0, 'SET[labels_noprefix]', $this->MOD_SETTINGS['labels_noprefix'], '', '', 'id="checkLabels_noprefix"') . $lang->getLL('dontUseOrigValues') . '</label></div>';
+            $submenu .= '<div class="checkbox"><label for="checkOptions_sortlabel">' . BackendUtility::getFuncCheck(0, 'SET[options_sortlabel]', $this->MOD_SETTINGS['options_sortlabel'], '', '', 'id="checkOptions_sortlabel"') . $lang->getLL('sortOptions') . '</label></div>';
+            $submenu .= '<div class="checkbox"><label for="checkShow_deleted">' . BackendUtility::getFuncCheck(0, 'SET[show_deleted]', $this->MOD_SETTINGS['show_deleted'], '', '', 'id="checkShow_deleted"') . $lang->getLL('showDeleted') . '</label></div>';
+        }
+        $this->view->assign('submenu', $submenu);
+        $this->view->assign('searchMode', $searchMode);
+        switch ($searchMode) {
+            case 'query':
+                $this->getPageRenderer()->loadRequireJsModule('TYPO3/CMS/Lowlevel/QueryGenerator');
+                $this->view->assign('queryMaker', $fullsearch->queryMaker());
+                break;
+            case 'raw':
+            default:
+                $this->view->assign('searchOptions', $fullsearch->form());
+                $this->view->assign('results', $fullsearch->search());
+        }
+    }
+
+    /**
+     * Records overview
+     */
+    protected function func_records()
+    {
+        /** @var $admin DatabaseIntegrityCheck */
+        $admin = GeneralUtility::makeInstance(DatabaseIntegrityCheck::class);
+        $admin->genTree(0);
+
+        // Pages stat
+        $pageStatistic = [
+            'total_pages' => [
+                'icon' => $this->iconFactory->getIconForRecord('pages', [], Icon::SIZE_SMALL)->render(),
+                'count' => count($admin->page_idArray)
+            ],
+            'hidden_pages' => [
+                'icon' => $this->iconFactory->getIconForRecord('pages', ['hidden' => 1], Icon::SIZE_SMALL)->render(),
+                'count' => $admin->recStats['hidden']
+            ],
+            'deleted_pages' => [
+                'icon' => $this->iconFactory->getIconForRecord('pages', ['deleted' => 1], Icon::SIZE_SMALL)->render(),
+                'count' => count($admin->recStats['deleted']['pages'])
+            ]
+        ];
+
+        $lang = $this->getLanguageService();
+
+        // Doktype
+        $doktypes = [];
+        $doktype = $GLOBALS['TCA']['pages']['columns']['doktype']['config']['items'];
+        if (is_array($doktype)) {
+            foreach ($doktype as $setup) {
+                if ($setup[1] !== '--div--') {
+                    $doktypes[] = [
+                        'icon' => $this->iconFactory->getIconForRecord('pages', ['doktype' => $setup[1]], Icon::SIZE_SMALL)->render(),
+                        'title' => $lang->sL($setup[0]) . ' (' . $setup[1] . ')',
+                        'count' => (int)$admin->recStats['doktype'][$setup[1]]
+                    ];
+                }
+            }
+        }
+
+        // Tables and lost records
+        $id_list = '-1,0,' . implode(',', array_keys($admin->page_idArray));
+        $id_list = rtrim($id_list, ',');
+        $admin->lostRecords($id_list);
+        if ($admin->fixLostRecord(GeneralUtility::_GET('fixLostRecords_table'), GeneralUtility::_GET('fixLostRecords_uid'))) {
+            $admin = GeneralUtility::makeInstance(DatabaseIntegrityCheck::class);
+            $admin->genTree(0);
+            $id_list = '-1,0,' . implode(',', array_keys($admin->page_idArray));
+            $id_list = rtrim($id_list, ',');
+            $admin->lostRecords($id_list);
+        }
+        $tableStatistic = [];
+        $countArr = $admin->countRecords($id_list);
+        if (is_array($GLOBALS['TCA'])) {
+            foreach ($GLOBALS['TCA'] as $t => $value) {
+                if ($GLOBALS['TCA'][$t]['ctrl']['hideTable']) {
+                    continue;
+                }
+                if ($t === 'pages' && $admin->lostPagesList !== '') {
+                    $lostRecordCount = count(explode(',', $admin->lostPagesList));
+                } else {
+                    $lostRecordCount = count($admin->lRecords[$t]);
+                }
+                if ($countArr['all'][$t]) {
+                    $theNumberOfRe = (int)$countArr['non_deleted'][$t] . '/' . $lostRecordCount;
+                } else {
+                    $theNumberOfRe = '';
+                }
+                $lr = '';
+                if (is_array($admin->lRecords[$t])) {
+                    foreach ($admin->lRecords[$t] as $data) {
+                        if (!GeneralUtility::inList($admin->lostPagesList, $data['pid'])) {
+                            $lr .= '<div class="record"><a href="' . htmlspecialchars((BackendUtility::getModuleUrl('system_dbint') . '&SET[function]=records&fixLostRecords_table=' . $t . '&fixLostRecords_uid=' . $data['uid'])) . '" title="' . htmlspecialchars($lang->getLL('fixLostRecord')) . '">' . $this->iconFactory->getIcon('status-dialog-error', Icon::SIZE_SMALL)->render() . '</a>uid:' . $data['uid'] . ', pid:' . $data['pid'] . ', ' . htmlspecialchars(GeneralUtility::fixed_lgd_cs(strip_tags($data['title']), 20)) . '</div>';
+                        } else {
+                            $lr .= '<div class="record-noicon">uid:' . $data['uid'] . ', pid:' . $data['pid'] . ', ' . htmlspecialchars(GeneralUtility::fixed_lgd_cs(strip_tags($data['title']), 20)) . '</div>';
+                        }
+                    }
+                }
+                $tableStatistic[$t] = [
+                    'icon' => $this->iconFactory->getIconForRecord($t, [], Icon::SIZE_SMALL)->render(),
+                    'title' => $lang->sL($GLOBALS['TCA'][$t]['ctrl']['title']),
+                    'count' => $theNumberOfRe,
+                    'lostRecords' => $lr
+                ];
+            }
+        }
+
+        $this->view->assignMultiple([
+            'pages' => $pageStatistic,
+            'doktypes' => $doktypes,
+            'tables' => $tableStatistic
+        ]);
+    }
+
+    /**
+     * Show list references
+     */
+    protected function func_relations()
+    {
+        $admin = GeneralUtility::makeInstance(DatabaseIntegrityCheck::class);
+        $fkey_arrays = $admin->getGroupFields('');
+        $admin->selectNonEmptyRecordsWithFkeys($fkey_arrays);
+        $fileTest = $admin->testFileRefs();
+
+        if (is_array($fileTest['noFile'])) {
+            ksort($fileTest['noFile']);
+        }
+        $this->view->assignMultiple([
+            'files' =>  $fileTest,
+            'select_db' => $admin->testDBRefs($admin->checkSelectDBRefs),
+            'group_db' => $admin->testDBRefs($admin->checkGroupDBRefs)
+        ]);
+    }
+
+    /**
+     * Returns the Language Service
+     * @return LanguageService
+     */
+    protected function getLanguageService()
+    {
+        return $GLOBALS['LANG'];
+    }
+
+    /**
+     * @return PageRenderer
+     */
+    protected function getPageRenderer()
+    {
+        return GeneralUtility::makeInstance(PageRenderer::class);
+    }
+}
diff --git a/typo3/sysext/lowlevel/Classes/View/ConfigurationView.php b/typo3/sysext/lowlevel/Classes/View/ConfigurationView.php
deleted file mode 100644 (file)
index 4f2b815..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-<?php
-namespace TYPO3\CMS\Lowlevel\View;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use TYPO3\CMS\Backend\Routing\Router;
-use TYPO3\CMS\Backend\Template\ModuleTemplate;
-use TYPO3\CMS\Backend\Utility\BackendUtility;
-use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
-use TYPO3\CMS\Core\Utility\ArrayUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
-use TYPO3\CMS\Fluid\View\StandaloneView;
-use TYPO3\CMS\Lowlevel\Utility\ArrayBrowser;
-
-/**
- * Script class for the Config module
- */
-class ConfigurationView
-{
-    /**
-     * The name of the module
-     *
-     * @var string
-     */
-    protected $moduleName = 'system_config';
-
-    /**
-     * The module menu items array. Each key represents a key for which values can range between the items in the array of that key.
-     *
-     * @see init()
-     * @var array
-     */
-    protected $MOD_MENU = [
-        'function' => []
-    ];
-
-    /**
-     * Current settings for the keys of the MOD_MENU array
-     *
-     * @see $MOD_MENU
-     * @var array
-     */
-    protected $MOD_SETTINGS = [];
-
-    /**
-     * Blind configurations which should not be visible
-     *
-     * @var array
-     */
-    protected $blindedConfigurationOptions = [
-        'TYPO3_CONF_VARS' => [
-            'DB' => [
-                'database' => '******',
-                'host' => '******',
-                'password' => '******',
-                'port' => '******',
-                'socket' => '******',
-                'username' => '******',
-                'Connections' => [
-                    'Default' => [
-                        'dbname' => '******',
-                        'host' => '******',
-                        'password' => '******',
-                        'port' => '******',
-                        'user' => '******',
-                        'unix_socket' => '******',
-                    ],
-                ],
-            ],
-            'SYS' => [
-                'encryptionKey' => '******'
-            ]
-        ]
-    ];
-
-    /**
-     * Injects the request object for the current request or subrequest
-     * Simply calls main() and init() and outputs the content
-     *
-     * @param ServerRequestInterface $request the current request
-     * @param ResponseInterface $response
-     * @return ResponseInterface the response with the content
-     */
-    public function mainAction(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $view = GeneralUtility::makeInstance(StandaloneView::class);
-        $view->getRequest()->setControllerExtensionName('lowlevel');
-        // Prepare blinding for all database connection types
-        foreach (array_keys($GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']) as $connectionName) {
-            if ($connectionName !== 'Default') {
-                $this->blindedConfigurationOptions['TYPO3_CONF_VARS']['DB']['Connections'][$connectionName] =
-                    $this->blindedConfigurationOptions['TYPO3_CONF_VARS']['DB']['Connections']['Default'];
-            }
-        }
-
-        // MENU-ITEMS:
-        // If array, then it's a selector box menu
-        // If empty string it's just a variable, that'll be saved.
-        // Values NOT in this array will not be saved in the settings-array for the module.
-        $this->MOD_MENU = [
-            'function' => [
-                0 => LocalizationUtility::translate('typo3ConfVars', 'lowlevel'),
-                1 => LocalizationUtility::translate('tca', 'lowlevel'),
-                2 => LocalizationUtility::translate('tcaDescr', 'lowlevel'),
-                3 => LocalizationUtility::translate('loadedExt', 'lowlevel'),
-                4 => LocalizationUtility::translate('t3services', 'lowlevel'),
-                5 => LocalizationUtility::translate('tbemodules', 'lowlevel'),
-                6 => LocalizationUtility::translate('tbemodulesext', 'lowlevel'),
-                7 => LocalizationUtility::translate('tbeStyles', 'lowlevel'),
-                8 => LocalizationUtility::translate('beUser', 'lowlevel'),
-                9 => LocalizationUtility::translate('usersettings', 'lowlevel'),
-                10 => LocalizationUtility::translate('pagesTypes', 'lowlevel'),
-                11 => LocalizationUtility::translate('routes', 'lowlevel'),
-            ],
-            'regexsearch' => '',
-            'fixedLgd' => ''
-        ];
-        // CLEANSE SETTINGS
-        $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, GeneralUtility::_GP('SET'), $this->moduleName);
-
-        $moduleTemplate = GeneralUtility::makeInstance(ModuleTemplate::class);
-        $moduleTemplate->getPageRenderer()->loadRequireJsModule('TYPO3/CMS/Lowlevel/ConfigurationView');
-
-        /** @var ArrayBrowser $arrayBrowser */
-        $arrayBrowser = GeneralUtility::makeInstance(ArrayBrowser::class);
-        $label = $this->MOD_MENU['function'][$this->MOD_SETTINGS['function']];
-        $search_field = GeneralUtility::_GP('search_field');
-
-        $templatePathAndFilename = GeneralUtility::getFileAbsFileName('EXT:lowlevel/Resources/Private/Templates/Backend/Configuration.html');
-        $view->setTemplatePathAndFilename($templatePathAndFilename);
-        $view->assign('label', $label);
-        $view->assign('search_field', $search_field);
-        $view->assign('checkbox_checkRegexsearch', BackendUtility::getFuncCheck(0, 'SET[regexsearch]', $this->MOD_SETTINGS['regexsearch'], '', '', 'id="checkRegexsearch"'));
-
-        switch ($this->MOD_SETTINGS['function']) {
-            case 0:
-                $theVar = $GLOBALS['TYPO3_CONF_VARS'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$TYPO3_CONF_VARS';
-                break;
-            case 1:
-                $theVar = $GLOBALS['TCA'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$TCA';
-                break;
-            case 2:
-                $theVar = $GLOBALS['TCA_DESCR'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$TCA_DESCR';
-                break;
-            case 3:
-                $theVar = $GLOBALS['TYPO3_LOADED_EXT'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$TYPO3_LOADED_EXT';
-                break;
-            case 4:
-                $theVar = $GLOBALS['T3_SERVICES'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$T3_SERVICES';
-                break;
-            case 5:
-                $theVar = $GLOBALS['TBE_MODULES'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$TBE_MODULES';
-                break;
-            case 6:
-                $theVar = $GLOBALS['TBE_MODULES_EXT'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$TBE_MODULES_EXT';
-                break;
-            case 7:
-                $theVar = $GLOBALS['TBE_STYLES'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$TBE_STYLES';
-                break;
-            case 8:
-                $theVar = $GLOBALS['BE_USER']->uc;
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$BE_USER->uc';
-                break;
-            case 9:
-                $theVar = $GLOBALS['TYPO3_USER_SETTINGS'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$TYPO3_USER_SETTINGS';
-                break;
-            case 10:
-                $theVar = $GLOBALS['PAGES_TYPES'];
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = '$PAGES_TYPES';
-                break;
-            case 11:
-                $router = GeneralUtility::makeInstance(Router::class);
-                $routes = $router->getRoutes();
-                $theVar = [];
-                foreach ($routes as $identifier => $route) {
-                    $theVar[$identifier] = [
-                        'path' => $route->getPath(),
-                        'options' => $route->getOptions()
-                    ];
-                }
-                ArrayUtility::naturalKeySortRecursive($theVar);
-                $arrayBrowser->varName = 'BackendRoutes';
-                break;
-            default:
-                $theVar = [];
-        }
-        // Update node:
-        $update = 0;
-        $node = GeneralUtility::_GET('node');
-        // If any plus-signs were clicked, it's registered.
-        if (is_array($node)) {
-            $this->MOD_SETTINGS['node_' . $this->MOD_SETTINGS['function']] = $arrayBrowser->depthKeys($node, $this->MOD_SETTINGS['node_' . $this->MOD_SETTINGS['function']]);
-            $update = 1;
-        }
-        if ($update) {
-            $this->getBackendUser()->pushModuleData($this->moduleName, $this->MOD_SETTINGS);
-        }
-        $arrayBrowser->dontLinkVar = true;
-        $arrayBrowser->depthKeys = $this->MOD_SETTINGS['node_' . $this->MOD_SETTINGS['function']];
-        $arrayBrowser->regexMode = $this->MOD_SETTINGS['regexsearch'];
-        $arrayBrowser->fixedLgd = $this->MOD_SETTINGS['fixedLgd'];
-        $arrayBrowser->searchKeysToo = true;
-
-        // If any POST-vars are send, update the condition array
-        if (GeneralUtility::_POST('search') && trim($search_field)) {
-            $arrayBrowser->depthKeys = $arrayBrowser->getSearchKeys($theVar, '', $search_field, []);
-        }
-
-        // mask sensitive information
-        $varName = trim($arrayBrowser->varName, '$');
-        if (isset($this->blindedConfigurationOptions[$varName])) {
-            ArrayUtility::mergeRecursiveWithOverrule($theVar, ArrayUtility::intersectRecursive($this->blindedConfigurationOptions[$varName], $theVar));
-        }
-        $tree = $arrayBrowser->tree($theVar, '');
-        $view->assign('tree', $tree);
-
-        // Setting up the shortcut button for docheader
-        $buttonBar = $moduleTemplate->getDocHeaderComponent()->getButtonBar();
-        // Shortcut
-        $shortcutButton = $buttonBar->makeShortcutButton()
-            ->setModuleName($this->moduleName)
-            ->setDisplayName($this->MOD_MENU['function'][$this->MOD_SETTINGS['function']])
-            ->setSetVariables(['function']);
-        $buttonBar->addButton($shortcutButton);
-
-        $menu = $moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
-        $menu->setIdentifier('ConfigurationJumpMenu');
-
-        foreach ($this->MOD_MENU['function'] as $controller => $title) {
-            $item = $menu
-                ->makeMenuItem()
-                ->setHref(
-                    BackendUtility::getModuleUrl(
-                        $this->moduleName,
-                        [
-                            'id' => 0,
-                            'SET' => [
-                                'function' => $controller
-                            ]
-                        ]
-                    )
-                )
-                ->setTitle($title);
-            if ($controller === (int)$this->MOD_SETTINGS['function']) {
-                $item->setActive(true);
-            }
-            $menu->addMenuItem($item);
-        }
-        $moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
-
-        $content = '<form action="" id="ConfigurationView" method="post">';
-        $content .= $view->render();
-        $content .= '</form>';
-
-        $moduleTemplate->setContent($content);
-        $response->getBody()->write($moduleTemplate->renderContent());
-        return $response;
-    }
-
-    /**
-     * Returns the Backend User
-     * @return BackendUserAuthentication
-     */
-    protected function getBackendUser()
-    {
-        return $GLOBALS['BE_USER'];
-    }
-}
diff --git a/typo3/sysext/lowlevel/Classes/View/DatabaseIntegrityView.php b/typo3/sysext/lowlevel/Classes/View/DatabaseIntegrityView.php
deleted file mode 100644 (file)
index fe5c6fc..0000000
+++ /dev/null
@@ -1,494 +0,0 @@
-<?php
-namespace TYPO3\CMS\Lowlevel\View;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use TYPO3\CMS\Backend\Template\Components\ButtonBar;
-use TYPO3\CMS\Backend\Template\ModuleTemplate;
-use TYPO3\CMS\Backend\Utility\BackendUtility;
-use TYPO3\CMS\Core\Database\QueryView;
-use TYPO3\CMS\Core\Database\ReferenceIndex;
-use TYPO3\CMS\Core\Imaging\Icon;
-use TYPO3\CMS\Core\Imaging\IconFactory;
-use TYPO3\CMS\Core\Integrity\DatabaseIntegrityCheck;
-use TYPO3\CMS\Core\Localization\LanguageService;
-use TYPO3\CMS\Core\Page\PageRenderer;
-use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\PathUtility;
-use TYPO3\CMS\Fluid\View\StandaloneView;
-
-/**
- * Script class for the DB int module
- */
-class DatabaseIntegrityView
-{
-    /**
-     * @var string
-     */
-    protected $formName = 'queryform';
-
-    /**
-     * The name of the module
-     *
-     * @var string
-     */
-    protected $moduleName = 'system_dbint';
-
-    /**
-     * @var StandaloneView
-     */
-    protected $view;
-
-    /**
-     * @var string
-     */
-    protected $templatePath = 'EXT:lowlevel/Resources/Private/Templates/Backend/';
-
-    /**
-     * @var IconFactory
-     */
-    protected $iconFactory;
-
-    /**
-     * ModuleTemplate Container
-     *
-     * @var ModuleTemplate
-     */
-    protected $moduleTemplate;
-
-    /**
-     * Loaded with the global array $MCONF which holds some module configuration from the conf.php file of backend modules.
-     *
-     * @see init()
-     * @var array
-     */
-    protected $MCONF = [
-        'name' => 'system_dbint',
-    ];
-
-    /**
-     * The module menu items array. Each key represents a key for which values can range between the items in the array of that key.
-     *
-     * @see init()
-     * @var array
-     */
-    protected $MOD_MENU = [
-        'function' => []
-    ];
-
-    /**
-     * Current settings for the keys of the MOD_MENU array
-     *
-     * @see $MOD_MENU
-     * @var array
-     */
-    protected $MOD_SETTINGS = [];
-
-    /**
-     * Injects the request object for the current request or subrequest
-     * Simply calls main() and init() and outputs the content
-     *
-     * @param ServerRequestInterface $request the current request
-     * @param ResponseInterface $response
-     * @return ResponseInterface the response with the content
-     */
-    public function mainAction(ServerRequestInterface $request, ResponseInterface $response)
-    {
-        $this->getLanguageService()->includeLLFile('EXT:lowlevel/Resources/Private/Language/locallang.xlf');
-        $this->iconFactory = GeneralUtility::makeInstance(IconFactory::class);
-        $this->view = GeneralUtility::makeInstance(StandaloneView::class);
-        $this->view->getRequest()->setControllerExtensionName('lowlevel');
-
-        $this->menuConfig();
-        $this->moduleTemplate = GeneralUtility::makeInstance(ModuleTemplate::class);
-        $this->moduleTemplate->addJavaScriptCode(
-            'jumpToUrl',
-            '
-            function jumpToUrl(URL) {
-                window.location.href = URL;
-                return false;
-            }
-            '
-        );
-
-        switch ($this->MOD_SETTINGS['function']) {
-            case 'search':
-                $templateFilename = 'CustomSearch.html';
-                $this->func_search();
-                break;
-            case 'records':
-                $templateFilename = 'RecordStatistics.html';
-                $this->func_records();
-                break;
-            case 'relations':
-                $templateFilename = 'Relations.html';
-                $this->func_relations();
-                break;
-            case 'refindex':
-                $templateFilename = 'ReferenceIndex.html';
-                $this->func_refindex();
-                break;
-            default:
-                $templateFilename = 'IntegrityOverview.html';
-                $this->func_default();
-        }
-        $this->view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($this->templatePath . $templateFilename));
-        $content = '<form action="" method="post" id="DatabaseIntegrityView" name="' . $this->formName . '">';
-        $content .= $this->view->render();
-        $content .= '</form>';
-
-        // Setting up the shortcut button for docheader
-        $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
-        // Shortcut
-        $shortCutButton = $buttonBar->makeShortcutButton()
-            ->setModuleName($this->moduleName)
-            ->setDisplayName($this->MOD_MENU['function'][$this->MOD_SETTINGS['function']])
-            ->setSetVariables(['function', 'search', 'search_query_makeQuery']);
-        $buttonBar->addButton($shortCutButton, ButtonBar::BUTTON_POSITION_RIGHT, 2);
-
-        $this->getModuleMenu();
-
-        $this->moduleTemplate->setContent($content);
-        $response->getBody()->write($this->moduleTemplate->renderContent());
-        return $response;
-    }
-
-    /**
-     * Configure menu
-     */
-    protected function menuConfig()
-    {
-        $lang = $this->getLanguageService();
-        // MENU-ITEMS:
-        // If array, then it's a selector box menu
-        // If empty string it's just a variable, that'll be saved.
-        // Values NOT in this array will not be saved in the settings-array for the module.
-        $this->MOD_MENU = [
-            'function' => [
-                0 => htmlspecialchars($lang->getLL('menuTitle')),
-                'records' => htmlspecialchars($lang->getLL('recordStatistics')),
-                'relations' => htmlspecialchars($lang->getLL('databaseRelations')),
-                'search' => htmlspecialchars($lang->getLL('fullSearch')),
-                'refindex' => htmlspecialchars($lang->getLL('manageRefIndex'))
-            ],
-            'search' => [
-                'raw' => htmlspecialchars($lang->getLL('rawSearch')),
-                'query' => htmlspecialchars($lang->getLL('advancedQuery'))
-            ],
-            'search_query_smallparts' => '',
-            'search_result_labels' => '',
-            'labels_noprefix' => '',
-            'options_sortlabel' => '',
-            'show_deleted' => '',
-            'queryConfig' => '',
-            // Current query
-            'queryTable' => '',
-            // Current table
-            'queryFields' => '',
-            // Current tableFields
-            'queryLimit' => '',
-            // Current limit
-            'queryOrder' => '',
-            // Current Order field
-            'queryOrderDesc' => '',
-            // Current Order field descending flag
-            'queryOrder2' => '',
-            // Current Order2 field
-            'queryOrder2Desc' => '',
-            // Current Order2 field descending flag
-            'queryGroup' => '',
-            // Current Group field
-            'storeArray' => '',
-            // Used to store the available Query config memory banks
-            'storeQueryConfigs' => '',
-            // Used to store the available Query configs in memory
-            'search_query_makeQuery' => [
-                'all' => htmlspecialchars($lang->getLL('selectRecords')),
-                'count' => htmlspecialchars($lang->getLL('countResults')),
-                'explain' => htmlspecialchars($lang->getLL('explainQuery')),
-                'csv' => htmlspecialchars($lang->getLL('csvExport'))
-            ],
-            'sword' => ''
-        ];
-        // CLEAN SETTINGS
-        $OLD_MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, '', $this->moduleName, 'ses');
-        $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, GeneralUtility::_GP('SET'), $this->moduleName, 'ses');
-        if (GeneralUtility::_GP('queryConfig')) {
-            $qA = GeneralUtility::_GP('queryConfig');
-            $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, ['queryConfig' => serialize($qA)], $this->moduleName, 'ses');
-        }
-        $addConditionCheck = GeneralUtility::_GP('qG_ins');
-        $setLimitToStart = false;
-        foreach ($OLD_MOD_SETTINGS as $key => $val) {
-            if (substr($key, 0, 5) === 'query' && $this->MOD_SETTINGS[$key] != $val && $key !== 'queryLimit' && $key !== 'use_listview') {
-                $setLimitToStart = true;
-                if ($key === 'queryTable' && !$addConditionCheck) {
-                    $this->MOD_SETTINGS['queryConfig'] = '';
-                }
-            }
-            if ($key === 'queryTable' && $this->MOD_SETTINGS[$key] != $val) {
-                $this->MOD_SETTINGS['queryFields'] = '';
-            }
-        }
-        if ($setLimitToStart) {
-            $currentLimit = explode(',', $this->MOD_SETTINGS['queryLimit']);
-            if ($currentLimit[1]) {
-                $this->MOD_SETTINGS['queryLimit'] = '0,' . $currentLimit[1];
-            } else {
-                $this->MOD_SETTINGS['queryLimit'] = '0';
-            }
-            $this->MOD_SETTINGS = BackendUtility::getModuleData($this->MOD_MENU, $this->MOD_SETTINGS, $this->moduleName, 'ses');
-        }
-    }
-
-    /**
-     * Generates the action menu
-     */
-    protected function getModuleMenu()
-    {
-        $menu = $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->makeMenu();
-        $menu->setIdentifier('DatabaseJumpMenu');
-
-        foreach ($this->MOD_MENU['function'] as $controller => $title) {
-            $item = $menu
-                ->makeMenuItem()
-                ->setHref(
-                    BackendUtility::getModuleUrl(
-                        $this->moduleName,
-                        [
-                            'id' => 0,
-                            'SET' => [
-                                'function' => $controller
-                            ]
-                        ]
-                    )
-                )
-                ->setTitle($title);
-            if ($controller === $this->MOD_SETTINGS['function']) {
-                $item->setActive(true);
-            }
-            $menu->addMenuItem($item);
-        }
-        $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu);
-    }
-
-    /**
-     * Creates the overview menu.
-     */
-    protected function func_default()
-    {
-        $modules = [];
-        $availableModFuncs = ['records', 'relations', 'search', 'refindex'];
-        foreach ($availableModFuncs as $modFunc) {
-            $modules[$modFunc] = BackendUtility::getModuleUrl('system_dbint') . '&SET[function]=' . $modFunc;
-        }
-        $this->view->assign('availableFunctions', $modules);
-    }
-
-    /****************************
-     *
-     * Functionality implementation
-     *
-     ****************************/
-    /**
-     * Check and update reference index!
-     */
-    protected function func_refindex()
-    {
-        $readmeLocation = ExtensionManagementUtility::extPath('lowlevel', 'README.rst');
-        $this->view->assign('ReadmeLink', PathUtility::getAbsoluteWebPath($readmeLocation));
-        $this->view->assign('ReadmeLocation', $readmeLocation);
-        $this->view->assign('binaryPath', ExtensionManagementUtility::extPath('core', 'bin/typo3'));
-
-        if (GeneralUtility::_GP('_update') || GeneralUtility::_GP('_check')) {
-            $testOnly = (bool)GeneralUtility::_GP('_check');
-            // Call the functionality
-            $refIndexObj = GeneralUtility::makeInstance(ReferenceIndex::class);
-            list(, $bodyContent) = $refIndexObj->updateIndex($testOnly);
-            $this->view->assign('content', str_replace('##LF##', '<br />', $bodyContent));
-        }
-    }
-
-    /**
-     * Search (Full / Advanced)
-     */
-    protected function func_search()
-    {
-        $lang = $this->getLanguageService();
-        $searchMode = $this->MOD_SETTINGS['search'];
-        $fullsearch = GeneralUtility::makeInstance(QueryView::class);
-        $fullsearch->setFormName($this->formName);
-        $submenu = '<div class="form-inline form-inline-spaced">';
-        $submenu .= BackendUtility::getDropdownMenu(0, 'SET[search]', $searchMode, $this->MOD_MENU['search']);
-        if ($this->MOD_SETTINGS['search'] === 'query') {
-            $submenu .= BackendUtility::getDropdownMenu(0, 'SET[search_query_makeQuery]', $this->MOD_SETTINGS['search_query_makeQuery'], $this->MOD_MENU['search_query_makeQuery']) . '<br />';
-        }
-        $submenu .= '</div>';
-        if ($this->MOD_SETTINGS['search'] === 'query') {
-            $submenu .= '<div class="checkbox"><label for="checkSearch_query_smallparts">' . BackendUtility::getFuncCheck(0, 'SET[search_query_smallparts]', $this->MOD_SETTINGS['search_query_smallparts'], '', '', 'id="checkSearch_query_smallparts"') . $lang->getLL('showSQL') . '</label></div>';
-            $submenu .= '<div class="checkbox"><label for="checkSearch_result_labels">' . BackendUtility::getFuncCheck(0, 'SET[search_result_labels]', $this->MOD_SETTINGS['search_result_labels'], '', '', 'id="checkSearch_result_labels"') . $lang->getLL('useFormattedStrings') . '</label></div>';
-            $submenu .= '<div class="checkbox"><label for="checkLabels_noprefix">' . BackendUtility::getFuncCheck(0, 'SET[labels_noprefix]', $this->MOD_SETTINGS['labels_noprefix'], '', '', 'id="checkLabels_noprefix"') . $lang->getLL('dontUseOrigValues') . '</label></div>';
-            $submenu .= '<div class="checkbox"><label for="checkOptions_sortlabel">' . BackendUtility::getFuncCheck(0, 'SET[options_sortlabel]', $this->MOD_SETTINGS['options_sortlabel'], '', '', 'id="checkOptions_sortlabel"') . $lang->getLL('sortOptions') . '</label></div>';
-            $submenu .= '<div class="checkbox"><label for="checkShow_deleted">' . BackendUtility::getFuncCheck(0, 'SET[show_deleted]', $this->MOD_SETTINGS['show_deleted'], '', '', 'id="checkShow_deleted"') . $lang->getLL('showDeleted') . '</label></div>';
-        }
-        $this->view->assign('submenu', $submenu);
-        $this->view->assign('searchMode', $searchMode);
-        switch ($searchMode) {
-            case 'query':
-                $this->getPageRenderer()->loadRequireJsModule('TYPO3/CMS/Lowlevel/QueryGenerator');
-                $this->view->assign('queryMaker', $fullsearch->queryMaker());
-                break;
-            case 'raw':
-            default:
-                $this->view->assign('searchOptions', $fullsearch->form());
-                $this->view->assign('results', $fullsearch->search());
-        }
-    }
-
-    /**
-     * Records overview
-     */
-    protected function func_records()
-    {
-        /** @var $admin DatabaseIntegrityCheck */
-        $admin = GeneralUtility::makeInstance(DatabaseIntegrityCheck::class);
-        $admin->genTree(0);
-
-        // Pages stat
-        $pageStatistic = [
-            'total_pages' => [
-                'icon' => $this->iconFactory->getIconForRecord('pages', [], Icon::SIZE_SMALL)->render(),
-                'count' => count($admin->page_idArray)
-            ],
-            'hidden_pages' => [
-                'icon' => $this->iconFactory->getIconForRecord('pages', ['hidden' => 1], Icon::SIZE_SMALL)->render(),
-                'count' => $admin->recStats['hidden']
-            ],
-            'deleted_pages' => [
-                'icon' => $this->iconFactory->getIconForRecord('pages', ['deleted' => 1], Icon::SIZE_SMALL)->render(),
-                'count' => count($admin->recStats['deleted']['pages'])
-            ]
-        ];
-
-        $lang = $this->getLanguageService();
-
-        // Doktype
-        $doktypes = [];
-        $doktype = $GLOBALS['TCA']['pages']['columns']['doktype']['config']['items'];
-        if (is_array($doktype)) {
-            foreach ($doktype as $setup) {
-                if ($setup[1] !== '--div--') {
-                    $doktypes[] = [
-                        'icon' => $this->iconFactory->getIconForRecord('pages', ['doktype' => $setup[1]], Icon::SIZE_SMALL)->render(),
-                        'title' => $lang->sL($setup[0]) . ' (' . $setup[1] . ')',
-                        'count' => (int)$admin->recStats['doktype'][$setup[1]]
-                    ];
-                }
-            }
-        }
-
-        // Tables and lost records
-        $id_list = '-1,0,' . implode(',', array_keys($admin->page_idArray));
-        $id_list = rtrim($id_list, ',');
-        $admin->lostRecords($id_list);
-        if ($admin->fixLostRecord(GeneralUtility::_GET('fixLostRecords_table'), GeneralUtility::_GET('fixLostRecords_uid'))) {
-            $admin = GeneralUtility::makeInstance(DatabaseIntegrityCheck::class);
-            $admin->genTree(0);
-            $id_list = '-1,0,' . implode(',', array_keys($admin->page_idArray));
-            $id_list = rtrim($id_list, ',');
-            $admin->lostRecords($id_list);
-        }
-        $tableStatistic = [];
-        $countArr = $admin->countRecords($id_list);
-        if (is_array($GLOBALS['TCA'])) {
-            foreach ($GLOBALS['TCA'] as $t => $value) {
-                if ($GLOBALS['TCA'][$t]['ctrl']['hideTable']) {
-                    continue;
-                }
-                if ($t === 'pages' && $admin->lostPagesList !== '') {
-                    $lostRecordCount = count(explode(',', $admin->lostPagesList));
-                } else {
-                    $lostRecordCount = count($admin->lRecords[$t]);
-                }
-                if ($countArr['all'][$t]) {
-                    $theNumberOfRe = (int)$countArr['non_deleted'][$t] . '/' . $lostRecordCount;
-                } else {
-                    $theNumberOfRe = '';
-                }
-                $lr = '';
-                if (is_array($admin->lRecords[$t])) {
-                    foreach ($admin->lRecords[$t] as $data) {
-                        if (!GeneralUtility::inList($admin->lostPagesList, $data['pid'])) {
-                            $lr .= '<div class="record"><a href="' . htmlspecialchars((BackendUtility::getModuleUrl('system_dbint') . '&SET[function]=records&fixLostRecords_table=' . $t . '&fixLostRecords_uid=' . $data['uid'])) . '" title="' . htmlspecialchars($lang->getLL('fixLostRecord')) . '">' . $this->iconFactory->getIcon('status-dialog-error', Icon::SIZE_SMALL)->render() . '</a>uid:' . $data['uid'] . ', pid:' . $data['pid'] . ', ' . htmlspecialchars(GeneralUtility::fixed_lgd_cs(strip_tags($data['title']), 20)) . '</div>';
-                        } else {
-                            $lr .= '<div class="record-noicon">uid:' . $data['uid'] . ', pid:' . $data['pid'] . ', ' . htmlspecialchars(GeneralUtility::fixed_lgd_cs(strip_tags($data['title']), 20)) . '</div>';
-                        }
-                    }
-                }
-                $tableStatistic[$t] = [
-                    'icon' => $this->iconFactory->getIconForRecord($t, [], Icon::SIZE_SMALL)->render(),
-                    'title' => $lang->sL($GLOBALS['TCA'][$t]['ctrl']['title']),
-                    'count' => $theNumberOfRe,
-                    'lostRecords' => $lr
-                ];
-            }
-        }
-
-        $this->view->assignMultiple([
-            'pages' => $pageStatistic,
-            'doktypes' => $doktypes,
-            'tables' => $tableStatistic
-        ]);
-    }
-
-    /**
-     * Show list references
-     */
-    protected function func_relations()
-    {
-        $admin = GeneralUtility::makeInstance(DatabaseIntegrityCheck::class);
-        $fkey_arrays = $admin->getGroupFields('');
-        $admin->selectNonEmptyRecordsWithFkeys($fkey_arrays);
-        $fileTest = $admin->testFileRefs();
-
-        if (is_array($fileTest['noFile'])) {
-            ksort($fileTest['noFile']);
-        }
-        $this->view->assignMultiple([
-            'files' =>  $fileTest,
-            'select_db' => $admin->testDBRefs($admin->checkSelectDBRefs),
-            'group_db' => $admin->testDBRefs($admin->checkGroupDBRefs)
-        ]);
-    }
-
-    /**
-     * Returns the Language Service
-     * @return LanguageService
-     */
-    protected function getLanguageService()
-    {
-        return $GLOBALS['LANG'];
-    }
-
-    /**
-     * @return PageRenderer
-     */
-    protected function getPageRenderer()
-    {
-        return GeneralUtility::makeInstance(PageRenderer::class);
-    }
-}
diff --git a/typo3/sysext/lowlevel/Migrations/Code/ClassAliasMap.php b/typo3/sysext/lowlevel/Migrations/Code/ClassAliasMap.php
new file mode 100644 (file)
index 0000000..783d9d9
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+return [
+    'TYPO3\\CMS\\Lowlevel\\View\\ConfigurationView' => \TYPO3\CMS\Lowlevel\Controller\ConfigurationController::class,
+    'TYPO3\\CMS\\Lowlevel\\View\\DatabaseIntegrityView' => \TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController::class,
+];
index 5d93062..6696554 100644 (file)
                                "partOfFactoryDefault": true
                        },
                        "extension-key": "lowlevel"
+               },
+               "typo3/class-alias-loader": {
+                       "class-alias-maps": [
+                               "Migrations/Code/ClassAliasMap.php"
+                       ]
                }
        },
        "autoload": {
index 61868fc..7d22cb6 100644 (file)
@@ -8,7 +8,7 @@ if (TYPO3_MODE === 'BE') {
         '',
         '',
         [
-            'routeTarget' => \TYPO3\CMS\Lowlevel\View\DatabaseIntegrityView::class . '::mainAction',
+            'routeTarget' => \TYPO3\CMS\Lowlevel\Controller\DatabaseIntegrityController::class . '::mainAction',
             'access' => 'admin',
             'name' => 'system_dbint',
             'workspaces' => 'online',
@@ -22,7 +22,7 @@ if (TYPO3_MODE === 'BE') {
         '',
         '',
         [
-            'routeTarget' => \TYPO3\CMS\Lowlevel\View\ConfigurationView::class . '::mainAction',
+            'routeTarget' => \TYPO3\CMS\Lowlevel\Controller\ConfigurationController::class . '::mainAction',
             'access' => 'admin',
             'name' => 'system_config',
             'workspaces' => 'online',