diff --git a/libraries/classes/Controllers/Preferences/FormsController.php b/libraries/classes/Controllers/Preferences/FormsController.php index 7c25dbdbb1..6ee054fd8a 100644 --- a/libraries/classes/Controllers/Preferences/FormsController.php +++ b/libraries/classes/Controllers/Preferences/FormsController.php @@ -8,7 +8,6 @@ use PhpMyAdmin\Config\Forms\User\ExportForm; use PhpMyAdmin\Config\Forms\User\ImportForm; use PhpMyAdmin\Config\Forms\User\MainForm; use PhpMyAdmin\Config\Forms\User\NaviForm; -use PhpMyAdmin\Config\Forms\User\SqlForm; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Core; use PhpMyAdmin\DatabaseInterface; @@ -64,9 +63,6 @@ class FormsController extends AbstractController $formParam = $_GET['form'] ?? null; switch ($formParam) { - case 'Sql': - $formDisplay = new SqlForm($cf, 1); - break; case 'Navi': $formDisplay = new NaviForm($cf, 1); break; diff --git a/libraries/classes/Controllers/Preferences/SqlController.php b/libraries/classes/Controllers/Preferences/SqlController.php new file mode 100644 index 0000000000..03e330602e --- /dev/null +++ b/libraries/classes/Controllers/Preferences/SqlController.php @@ -0,0 +1,118 @@ +userPreferences = $userPreferences; + $this->relation = $relation; + } + + public function index(): void + { + global $cfg, $cf, $error, $tabHash, $hash; + global $server, $PMA_Config; + + $cf = new ConfigFile($PMA_Config->base_settings); + $this->userPreferences->pageInit($cf); + + $formDisplay = new SqlForm($cf, 1); + + if (isset($_POST['revert'])) { + // revert erroneous fields to their default values + $formDisplay->fixErrors(); + Core::sendHeaderLocation('./index.php?route=/preferences/sql'); + return; + } + + $error = null; + if ($formDisplay->process(false) && ! $formDisplay->hasErrors()) { + // Load 2FA settings + $twoFactor = new TwoFactor($cfg['Server']['user']); + // save settings + $result = $this->userPreferences->save($cf->getConfigArray()); + // save back the 2FA setting only + $twoFactor->save(); + if ($result === true) { + // reload config + $PMA_Config->loadUserPreferences(); + $tabHash = $_POST['tab_hash'] ?? null; + $hash = ltrim($tabHash, '#'); + $this->userPreferences->redirect( + 'index.php?route=/preferences/sql', + null, + $hash + ); + return; + } else { + $error = $result; + } + } + + // display forms + $header = $this->response->getHeader(); + $scripts = $header->getScripts(); + $scripts->addFile('config.js'); + + $this->response->addHTML(UserPreferencesHeader::getContent($this->template, $this->relation)); + + if ($formDisplay->hasErrors()) { + $formErrors = $formDisplay->displayErrors(); + } + + $this->response->addHTML($this->template->render('preferences/forms/main', [ + 'error' => $error ? $error->getDisplay() : '', + 'has_errors' => $formDisplay->hasErrors(), + 'errors' => $formErrors ?? null, + 'form' => $formDisplay->getDisplay( + true, + true, + true, + Url::getFromRoute('/preferences/sql'), + ['server' => $server] + ), + ])); + + if ($this->response->isAjax()) { + $this->response->addJSON('disableNaviSettings', true); + } else { + define('PMA_DISABLE_NAVI_SETTINGS', true); + } + } +} diff --git a/libraries/classes/Menu.php b/libraries/classes/Menu.php index 7237309e0a..84c83e632f 100644 --- a/libraries/classes/Menu.php +++ b/libraries/classes/Menu.php @@ -568,6 +568,7 @@ class Menu '/preferences/features', '/preferences/forms', '/preferences/manage', + '/preferences/sql', '/preferences/two-factor', ]); diff --git a/libraries/classes/UserPreferencesHeader.php b/libraries/classes/UserPreferencesHeader.php index d16655f2a0..cad337a2d6 100644 --- a/libraries/classes/UserPreferencesHeader.php +++ b/libraries/classes/UserPreferencesHeader.php @@ -75,6 +75,15 @@ class UserPreferencesHeader ] ) . "\n"; + $content .= Generator::getHtmlTab( + [ + 'link' => 'index.php?route=/preferences/sql', + 'text' => __('SQL queries'), + 'icon' => 'b_sql', + 'active' => $route === '/preferences/sql', + ] + ) . "\n"; + $content .= self::displayTabsWithIcon(); return '