You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
4.4 KiB
193 lines
4.4 KiB
<?php |
|
/** |
|
* Page-related settings |
|
*/ |
|
|
|
declare(strict_types=1); |
|
|
|
namespace PhpMyAdmin\Config; |
|
|
|
use PhpMyAdmin\Config\Forms\Page\PageFormList; |
|
use PhpMyAdmin\Core; |
|
use PhpMyAdmin\Message; |
|
use PhpMyAdmin\ResponseRenderer; |
|
use PhpMyAdmin\UserPreferences; |
|
|
|
use function __; |
|
|
|
/** |
|
* Page-related settings |
|
*/ |
|
class PageSettings |
|
{ |
|
/** |
|
* Contains id of the form element |
|
* |
|
* @var string |
|
*/ |
|
private $elemId = 'page_settings_modal'; |
|
|
|
/** |
|
* Name of the group to show |
|
* |
|
* @var string |
|
*/ |
|
private $groupName = ''; |
|
|
|
/** |
|
* Contains HTML of errors |
|
* |
|
* @var string |
|
*/ |
|
private $errorHTML = ''; |
|
|
|
/** |
|
* Contains HTML of settings |
|
* |
|
* @var string |
|
*/ |
|
private $HTML = ''; |
|
|
|
/** @var UserPreferences */ |
|
private $userPreferences; |
|
|
|
/** |
|
* @param string $formGroupName The name of config form group to display |
|
* @param string $elemId Id of the div containing settings |
|
*/ |
|
public function __construct($formGroupName, $elemId = null) |
|
{ |
|
$this->userPreferences = new UserPreferences(); |
|
|
|
$formClass = PageFormList::get($formGroupName); |
|
if ($formClass === null) { |
|
return; |
|
} |
|
|
|
if (isset($_REQUEST['printview']) && $_REQUEST['printview'] == '1') { |
|
return; |
|
} |
|
|
|
if (! empty($elemId)) { |
|
$this->elemId = $elemId; |
|
} |
|
|
|
$this->groupName = $formGroupName; |
|
|
|
$cf = new ConfigFile($GLOBALS['config']->baseSettings); |
|
$this->userPreferences->pageInit($cf); |
|
|
|
$formDisplay = new $formClass($cf); |
|
|
|
// Process form |
|
$error = null; |
|
if (isset($_POST['submit_save']) && $_POST['submit_save'] == $formGroupName) { |
|
$this->processPageSettings($formDisplay, $cf, $error); |
|
} |
|
|
|
// Display forms |
|
$this->HTML = $this->getPageSettingsDisplay($formDisplay, $error); |
|
} |
|
|
|
/** |
|
* Process response to form |
|
* |
|
* @param FormDisplay $formDisplay Form |
|
* @param ConfigFile $cf Configuration file |
|
* @param Message|null $error Error message |
|
*/ |
|
private function processPageSettings(&$formDisplay, &$cf, &$error): void |
|
{ |
|
if (! $formDisplay->process(false) || $formDisplay->hasErrors()) { |
|
return; |
|
} |
|
|
|
// save settings |
|
$result = $this->userPreferences->save($cf->getConfigArray()); |
|
if ($result === true) { |
|
// reload page |
|
$response = ResponseRenderer::getInstance(); |
|
Core::sendHeaderLocation( |
|
$response->getFooter()->getSelfUrl() |
|
); |
|
exit; |
|
} |
|
|
|
$error = $result; |
|
} |
|
|
|
/** |
|
* Store errors in _errorHTML |
|
* |
|
* @param FormDisplay $formDisplay Form |
|
* @param Message|null $error Error message |
|
*/ |
|
private function storeError(&$formDisplay, &$error): void |
|
{ |
|
$retval = ''; |
|
if ($error) { |
|
$retval .= $error->getDisplay(); |
|
} |
|
|
|
if ($formDisplay->hasErrors()) { |
|
// form has errors |
|
$retval .= '<div class="alert alert-danger config-form" role="alert">' |
|
. '<b>' . __('Cannot save settings, submitted configuration form contains errors!') . '</b>' |
|
. $formDisplay->displayErrors() |
|
. '</div>'; |
|
} |
|
|
|
$this->errorHTML = $retval; |
|
} |
|
|
|
/** |
|
* Display page-related settings |
|
* |
|
* @param FormDisplay $formDisplay Form |
|
* @param Message $error Error message |
|
* |
|
* @return string |
|
*/ |
|
private function getPageSettingsDisplay(&$formDisplay, &$error) |
|
{ |
|
$response = ResponseRenderer::getInstance(); |
|
|
|
$retval = ''; |
|
|
|
$this->storeError($formDisplay, $error); |
|
|
|
$retval .= '<div id="' . $this->elemId . '">'; |
|
$retval .= '<div class="page_settings">'; |
|
$retval .= $formDisplay->getDisplay( |
|
false, |
|
$response->getFooter()->getSelfUrl(), |
|
[ |
|
'submit_save' => $this->groupName, |
|
] |
|
); |
|
$retval .= '</div>'; |
|
$retval .= '</div>'; |
|
|
|
return $retval; |
|
} |
|
|
|
/** |
|
* Get HTML output |
|
* |
|
* @return string |
|
*/ |
|
public function getHTML() |
|
{ |
|
return $this->HTML; |
|
} |
|
|
|
/** |
|
* Get error HTML output |
|
* |
|
* @return string |
|
*/ |
|
public function getErrorHTML() |
|
{ |
|
return $this->errorHTML; |
|
} |
|
}
|
|
|