diff options
Diffstat (limited to 'srcs/phpmyadmin/prefs_forms.php')
| -rw-r--r-- | srcs/phpmyadmin/prefs_forms.php | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/prefs_forms.php b/srcs/phpmyadmin/prefs_forms.php new file mode 100644 index 0000000..7ac9261 --- /dev/null +++ b/srcs/phpmyadmin/prefs_forms.php @@ -0,0 +1,112 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * User preferences page + * + * @package PhpMyAdmin + */ +declare(strict_types=1); + +use PhpMyAdmin\Config\ConfigFile; +use PhpMyAdmin\Config\Forms\BaseForm; +use PhpMyAdmin\Config\Forms\User\UserFormList; +use PhpMyAdmin\Core; +use PhpMyAdmin\Relation; +use PhpMyAdmin\Response; +use PhpMyAdmin\Template; +use PhpMyAdmin\TwoFactor; +use PhpMyAdmin\Url; +use PhpMyAdmin\UserPreferences; +use PhpMyAdmin\UserPreferencesHeader; + +if (! defined('ROOT_PATH')) { + define('ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR); +} + +/** + * Gets some core libraries and displays a top message if required + */ +require_once ROOT_PATH . 'libraries/common.inc.php'; + +/** @var Template $template */ +$template = $containerBuilder->get('template'); +$userPreferences = new UserPreferences(); + +$cf = new ConfigFile($GLOBALS['PMA_Config']->base_settings); +$userPreferences->pageInit($cf); + +// handle form processing + +$form_param = isset($_GET['form']) ? $_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( + './prefs_forms.php' + . Url::getCommonRaw($url_params) + ); + exit; +} + +$error = null; +if ($form_display->process(false) && ! $form_display->hasErrors()) { + // Load 2FA settings + $twoFactor = new TwoFactor($GLOBALS['cfg']['Server']['user']); + // save settings + $result = $userPreferences->save($cf->getConfigArray()); + // save back the 2FA setting only + $twoFactor->save(); + if ($result === true) { + // reload config + $GLOBALS['PMA_Config']->loadUserPreferences(); + $tabHash = isset($_POST['tab_hash']) ? $_POST['tab_hash'] : null; + $hash = ltrim($tabHash, '#'); + $userPreferences->redirect( + 'prefs_forms.php', + ['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, 'prefs_forms.php?form=' . $form_param, [ + 'server' => $GLOBALS['server'], + ]), +]); + +if ($response->isAjax()) { + $response->addJSON('disableNaviSettings', true); +} else { + define('PMA_DISABLE_NAVI_SETTINGS', true); +} |
