diff --git a/libraries/classes/Controllers/Preferences/FormsController.php b/libraries/classes/Controllers/Preferences/FormsController.php new file mode 100644 index 000000000000..d9ba75406935 --- /dev/null +++ b/libraries/classes/Controllers/Preferences/FormsController.php @@ -0,0 +1,138 @@ +userPreferences = $userPreferences; + $this->relation = $relation; + } + + /** + * @return void + */ + public function index(): void + { + global $cf, $form_param, $form_class, $form_display, $url_params, $error, $tabHash, $hash; + global $server, $PMA_Config; + + $cf = new ConfigFile($PMA_Config->base_settings); + $this->userPreferences->pageInit($cf); + + // handle form processing + $form_param = $_GET['form'] ?? null; + $form_class = UserFormList::get($form_param); + if ($form_class === null) { + Core::fatalError(__('Incorrect form specified!')); + } + + /** @var BaseForm $form_display */ + $form_display = new $form_class($cf, 1); + + if (isset($_POST['revert'])) { + // revert erroneous fields to their default values + $form_display->fixErrors(); + // redirect + $url_params = ['form' => $form_param]; + Core::sendHeaderLocation( + './index.php?route=/preferences/forms' + . Url::getCommonRaw($url_params, '&') + ); + return; + } + + $error = null; + if ($form_display->process(false) && ! $form_display->hasErrors()) { + // save settings + $result = $this->userPreferences->save($cf->getConfigArray()); + if ($result === true) { + // reload config + $PMA_Config->loadUserPreferences(); + $tabHash = $_POST['tab_hash'] ?? null; + $hash = ltrim($tabHash, '#'); + $this->userPreferences->redirect( + 'index.php?route=/preferences/forms', + ['form' => $form_param], + $hash + ); + return; + } else { + $error = $result; + } + } + + // display forms + $header = $this->response->getHeader(); + $scripts = $header->getScripts(); + $scripts->addFile('config.js'); + + echo UserPreferencesHeader::getContent($this->template, $this->relation); + + if ($form_display->hasErrors()) { + $formErrors = $form_display->displayErrors(); + } + + echo $this->template->render('preferences/forms/main', [ + 'error' => $error ? $error->getDisplay() : '', + 'has_errors' => $form_display->hasErrors(), + 'errors' => $formErrors ?? null, + 'form' => $form_display->getDisplay( + true, + true, + true, + Url::getFromRoute('/preferences/forms', ['form' => $form_param]), + ['server' => $server] + ), + ]); + + if ($this->response->isAjax()) { + $this->response->addJSON('disableNaviSettings', true); + } else { + define('PMA_DISABLE_NAVI_SETTINGS', true); + } + } +} diff --git a/libraries/entry_points/preferences/forms.php b/libraries/entry_points/preferences/forms.php deleted file mode 100644 index 10908ce7e06c..000000000000 --- a/libraries/entry_points/preferences/forms.php +++ /dev/null @@ -1,107 +0,0 @@ -get('template'); -$userPreferences = new UserPreferences(); - -$cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); -$userPreferences->pageInit($cf); - -// handle form processing - -$form_param = $_GET['form'] ?? null; -$form_class = UserFormList::get($form_param); -if ($form_class === null) { - Core::fatalError(__('Incorrect form specified!')); -} - -/** @var BaseForm $form_display */ -$form_display = new $form_class($cf, 1); - -if (isset($_POST['revert'])) { - // revert erroneous fields to their default values - $form_display->fixErrors(); - // redirect - $url_params = ['form' => $form_param]; - Core::sendHeaderLocation( - './index.php?route=/preferences/forms' - . Url::getCommonRaw($url_params, '&') - ); - exit; -} - -$error = null; -if ($form_display->process(false) && ! $form_display->hasErrors()) { - // save settings - $result = $userPreferences->save($cf->getConfigArray()); - if ($result === true) { - // reload config - $GLOBALS['PMA_Config']->loadUserPreferences(); - $tabHash = $_POST['tab_hash'] ?? null; - $hash = ltrim($tabHash, '#'); - $userPreferences->redirect( - 'index.php?route=/preferences/forms', - ['form' => $form_param], - $hash - ); - exit; - } else { - $error = $result; - } -} - -// display forms -$response = Response::getInstance(); -$header = $response->getHeader(); -$scripts = $header->getScripts(); -$scripts->addFile('config.js'); - -/** @var Relation $relation */ -$relation = $containerBuilder->get('relation'); -echo UserPreferencesHeader::getContent($template, $relation); - -if ($form_display->hasErrors()) { - $formErrors = $form_display->displayErrors(); -} - -echo $template->render('preferences/forms/main', [ - 'error' => $error ? $error->getDisplay() : '', - 'has_errors' => $form_display->hasErrors(), - 'errors' => $formErrors ?? null, - 'form' => $form_display->getDisplay( - true, - true, - true, - Url::getFromRoute('/preferences/forms', ['form' => $form_param]), - ['server' => $GLOBALS['server']] - ), -]); - -if ($response->isAjax()) { - $response->addJSON('disableNaviSettings', true); -} else { - define('PMA_DISABLE_NAVI_SETTINGS', true); -} diff --git a/libraries/routes.php b/libraries/routes.php index 2995e33835c4..74ab396ecda0 100644 --- a/libraries/routes.php +++ b/libraries/routes.php @@ -34,6 +34,7 @@ use PhpMyAdmin\Controllers\NavigationController; use PhpMyAdmin\Controllers\NormalizationController; use PhpMyAdmin\Controllers\PhpInfoController; +use PhpMyAdmin\Controllers\Preferences\FormsController; use PhpMyAdmin\Controllers\SchemaExportController; use PhpMyAdmin\Controllers\Server\BinlogController; use PhpMyAdmin\Controllers\Server\CollationsController; @@ -315,9 +316,11 @@ $controller = $containerBuilder->get(PhpInfoController::class); $controller->index(); }); - $routes->addGroup('/preferences', function (RouteCollector $routes) { - $routes->addRoute(['GET', 'POST'], '/forms', function () { - require_once ROOT_PATH . 'libraries/entry_points/preferences/forms.php'; + $routes->addGroup('/preferences', function (RouteCollector $routes) use ($containerBuilder) { + $routes->addRoute(['GET', 'POST'], '/forms', function () use ($containerBuilder) { + /** @var FormsController $controller */ + $controller = $containerBuilder->get(FormsController::class); + $controller->index(); }); $routes->addRoute(['GET', 'POST'], '/manage', function () { require_once ROOT_PATH . 'libraries/entry_points/preferences/manage.php'; diff --git a/services.yml b/services.yml index 15e9eee5b5f5..d9e73012359d 100644 --- a/services.yml +++ b/services.yml @@ -147,6 +147,9 @@ services: class: 'PhpMyAdmin\UserPassword' arguments: ['@server_privileges'] + user_preferences: + class: 'PhpMyAdmin\UserPreferences' + #Aliases PhpMyAdmin\Response: '@response' diff --git a/services_controllers.yml b/services_controllers.yml index fb6ad62c7be4..8e697502ad30 100644 --- a/services_controllers.yml +++ b/services_controllers.yml @@ -245,6 +245,15 @@ services: dbi: '@dbi' template: '@template' + PhpMyAdmin\Controllers\Preferences\FormsController: + class: 'PhpMyAdmin\Controllers\Preferences\FormsController' + arguments: + response: '@response' + dbi: '@dbi' + template: '@template' + userPreferences: '@user_preferences' + relation: '@relation' + PhpMyAdmin\Controllers\SchemaExportController: class: 'PhpMyAdmin\Controllers\SchemaExportController' arguments: