Add AbstractController::render method
[phpmyadmin.git] / libraries / classes / Controllers / Preferences / SqlController.php
blob64385b61af845c40b4c466fb8df913bba8599252
1 <?php
3 declare(strict_types=1);
5 namespace PhpMyAdmin\Controllers\Preferences;
7 use PhpMyAdmin\Config\ConfigFile;
8 use PhpMyAdmin\Config\Forms\User\SqlForm;
9 use PhpMyAdmin\Controllers\AbstractController;
10 use PhpMyAdmin\Core;
11 use PhpMyAdmin\DatabaseInterface;
12 use PhpMyAdmin\Relation;
13 use PhpMyAdmin\Response;
14 use PhpMyAdmin\Template;
15 use PhpMyAdmin\TwoFactor;
16 use PhpMyAdmin\Url;
17 use PhpMyAdmin\UserPreferences;
18 use PhpMyAdmin\UserPreferencesHeader;
20 class SqlController extends AbstractController
22 /** @var UserPreferences */
23 private $userPreferences;
25 /** @var Relation */
26 private $relation;
28 /**
29 * @param Response $response A Response instance.
30 * @param DatabaseInterface $dbi A DatabaseInterface instance.
31 * @param Template $template A Template instance.
32 * @param UserPreferences $userPreferences A UserPreferences instance.
33 * @param Relation $relation A Relation instance.
35 public function __construct(
36 $response,
37 $dbi,
38 Template $template,
39 UserPreferences $userPreferences,
40 Relation $relation
41 ) {
42 parent::__construct($response, $dbi, $template);
43 $this->userPreferences = $userPreferences;
44 $this->relation = $relation;
47 public function index(): void
49 global $cfg, $cf, $error, $tabHash, $hash;
50 global $server, $PMA_Config, $route;
52 $cf = new ConfigFile($PMA_Config->base_settings);
53 $this->userPreferences->pageInit($cf);
55 $formDisplay = new SqlForm($cf, 1);
57 if (isset($_POST['revert'])) {
58 // revert erroneous fields to their default values
59 $formDisplay->fixErrors();
60 Core::sendHeaderLocation('./index.php?route=/preferences/sql');
61 return;
64 $error = null;
65 if ($formDisplay->process(false) && ! $formDisplay->hasErrors()) {
66 // Load 2FA settings
67 $twoFactor = new TwoFactor($cfg['Server']['user']);
68 // save settings
69 $result = $this->userPreferences->save($cf->getConfigArray());
70 // save back the 2FA setting only
71 $twoFactor->save();
72 if ($result === true) {
73 // reload config
74 $PMA_Config->loadUserPreferences();
75 $tabHash = $_POST['tab_hash'] ?? null;
76 $hash = ltrim($tabHash, '#');
77 $this->userPreferences->redirect(
78 'index.php?route=/preferences/sql',
79 null,
80 $hash
82 return;
83 } else {
84 $error = $result;
88 // display forms
89 $header = $this->response->getHeader();
90 $scripts = $header->getScripts();
91 $scripts->addFile('config.js');
93 $cfgRelation = $this->relation->getRelationsParam();
95 $this->render('preferences/header', [
96 'route' => $route,
97 'is_saved' => ! empty($_GET['saved']),
98 'has_config_storage' => $cfgRelation['userconfigwork'],
99 ]);
101 if ($formDisplay->hasErrors()) {
102 $formErrors = $formDisplay->displayErrors();
105 $this->render('preferences/forms/main', [
106 'error' => $error ? $error->getDisplay() : '',
107 'has_errors' => $formDisplay->hasErrors(),
108 'errors' => $formErrors ?? null,
109 'form' => $formDisplay->getDisplay(
110 true,
111 true,
112 true,
113 Url::getFromRoute('/preferences/sql'),
114 ['server' => $server]
118 if ($this->response->isAjax()) {
119 $this->response->addJSON('disableNaviSettings', true);
120 } else {
121 define('PMA_DISABLE_NAVI_SETTINGS', true);