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.
177 lines
5.6 KiB
177 lines
5.6 KiB
<?php |
|
/** |
|
* Form templates |
|
*/ |
|
|
|
declare(strict_types=1); |
|
|
|
namespace PhpMyAdmin\Config; |
|
|
|
use PhpMyAdmin\Config; |
|
use PhpMyAdmin\Sanitize; |
|
use PhpMyAdmin\Template; |
|
|
|
use function array_shift; |
|
use function implode; |
|
|
|
/** |
|
* PhpMyAdmin\Config\FormDisplayTemplate class |
|
*/ |
|
class FormDisplayTemplate |
|
{ |
|
/** @var int */ |
|
public $group; |
|
|
|
/** @var Config */ |
|
protected $config; |
|
|
|
/** @var Template */ |
|
public $template; |
|
|
|
/** |
|
* @param Config $config Config instance |
|
*/ |
|
public function __construct(Config $config) |
|
{ |
|
$this->config = $config; |
|
$this->template = new Template(); |
|
} |
|
|
|
/** |
|
* Displays input field |
|
* |
|
* $opts keys: |
|
* o doc - (string) documentation link |
|
* o errors - error array |
|
* o setvalue - (string) shows button allowing to set predefined value |
|
* o show_restore_default - (boolean) whether show "restore default" button |
|
* o userprefs_allow - whether user preferences are enabled for this field |
|
* (null - no support, true/false - enabled/disabled) |
|
* o userprefs_comment - (string) field comment |
|
* o values - key - value pairs for <select> fields |
|
* o values_escaped - (boolean) tells whether values array is already escaped |
|
* (defaults to false) |
|
* o values_disabled - (array)list of disabled values (keys from values) |
|
* o comment - (string) tooltip comment |
|
* o comment_warning - (bool) whether this comments warns about something |
|
* |
|
* @param string $path config option path |
|
* @param string $name config option name |
|
* @param string $type type of config option |
|
* @param mixed $value current value |
|
* @param string $description verbose description |
|
* @param bool $valueIsDefault whether value is default |
|
* @param array|null $opts see above description |
|
*/ |
|
public function displayInput( |
|
$path, |
|
$name, |
|
$type, |
|
$value, |
|
$description = '', |
|
$valueIsDefault = true, |
|
$opts = null |
|
): string { |
|
$isSetupScript = $this->config->get('is_setup'); |
|
$optionIsDisabled = ! $isSetupScript && isset($opts['userprefs_allow']) && ! $opts['userprefs_allow']; |
|
$trClass = $this->group > 0 ? 'group-field group-field-' . $this->group : ''; |
|
if (isset($opts['setvalue']) && $opts['setvalue'] === ':group') { |
|
unset($opts['setvalue']); |
|
$this->group++; |
|
$trClass = 'group-header-field group-header-' . $this->group; |
|
} |
|
|
|
return $this->template->render('config/form_display/input', [ |
|
'is_setup' => $isSetupScript, |
|
'allows_customization' => $opts['userprefs_allow'] ?? null, |
|
'path' => $path, |
|
'has_errors' => isset($opts['errors']) && ! empty($opts['errors']), |
|
'errors' => $opts['errors'] ?? [], |
|
'show_restore_default' => $opts['show_restore_default'] ?? null, |
|
'set_value' => $opts['setvalue'] ?? null, |
|
'tr_class' => $trClass, |
|
'name' => $name, |
|
'doc' => $opts['doc'] ?? '', |
|
'option_is_disabled' => $optionIsDisabled, |
|
'description' => $description, |
|
'comment' => $opts['userprefs_comment'] ?? null, |
|
'type' => $type, |
|
'value' => $value, |
|
'value_is_default' => $valueIsDefault, |
|
'select_values' => $opts['values'] ?? [], |
|
'select_values_disabled' => $opts['values_disabled'] ?? [], |
|
]); |
|
} |
|
|
|
/** |
|
* Display group header |
|
* |
|
* @param string $headerText Text of header |
|
*/ |
|
public function displayGroupHeader(string $headerText): string |
|
{ |
|
$this->group++; |
|
if ($headerText === '') { |
|
return ''; |
|
} |
|
|
|
$colspan = $this->config->get('is_setup') ? 3 : 2; |
|
|
|
return $this->template->render('config/form_display/group_header', [ |
|
'group' => $this->group, |
|
'colspan' => $colspan, |
|
'header_text' => $headerText, |
|
]); |
|
} |
|
|
|
/** |
|
* Display group footer |
|
*/ |
|
public function displayGroupFooter(): void |
|
{ |
|
$this->group--; |
|
} |
|
|
|
/** |
|
* Appends JS validation code to $js_array |
|
* |
|
* @param string $fieldId ID of field to validate |
|
* @param string|array $validators validators callback |
|
* @param array $jsArray will be updated with javascript code |
|
*/ |
|
public function addJsValidate($fieldId, $validators, array &$jsArray): void |
|
{ |
|
foreach ((array) $validators as $validator) { |
|
$validator = (array) $validator; |
|
$vName = array_shift($validator); |
|
$vArgs = []; |
|
foreach ($validator as $arg) { |
|
$vArgs[] = Sanitize::escapeJsString($arg); |
|
} |
|
|
|
$vArgs = $vArgs ? ", ['" . implode("', '", $vArgs) . "']" : ''; |
|
$jsArray[] = "registerFieldValidator('" . $fieldId . "', '" . $vName . "', true" . $vArgs . ')'; |
|
} |
|
} |
|
|
|
/** |
|
* Displays error list |
|
* |
|
* @param string $name Name of item with errors |
|
* @param array $errorList List of errors to show |
|
* |
|
* @return string HTML for errors |
|
*/ |
|
public function displayErrors($name, array $errorList): string |
|
{ |
|
return $this->template->render('config/form_display/errors', [ |
|
'name' => $name, |
|
'error_list' => $errorList, |
|
]); |
|
} |
|
|
|
public function display(array $data): string |
|
{ |
|
return $this->template->render('config/form_display/display', $data); |
|
} |
|
}
|
|
|