[ticket/17100] Improve support for selects

PHPBB3-17100
This commit is contained in:
Marc Alexander 2022-04-18 21:07:50 +02:00
parent 003b606781
commit 8e05baca87
No known key found for this signature in database
GPG key ID: 50E0D2423696F995
3 changed files with 61 additions and 11 deletions

View file

@ -37,7 +37,7 @@
{% endmacro %} {% endmacro %}
{% macro select(form_data) %} {% macro select(form_data) %}
<select {% if form_data.id %}id="{{ form_data.id }}"{% endif %} name="{{ form_data.name }}"> <select {% if form_data.id %}id="{{ form_data.id }}"{% endif %} name="{{ form_data.name }}"{% if form_data.toggleable %} data-togglable-settings="true"{% endif %}>
{% for option in form_data.options %} {% for option in form_data.options %}
<option value="{{ option.value }}"{% if option.selected %} selected="selected"{% endif %}>{{ option.label }}</option> <option value="{{ option.value }}"{% if option.selected %} selected="selected"{% endif %}>{{ option.label }}</option>
{% endfor %} {% endfor %}
@ -51,6 +51,10 @@
{{ _self.dimension(form_data) }} {{ _self.dimension(form_data) }}
{% elseif form_data.tag == 'radio' %} {% elseif form_data.tag == 'radio' %}
{{ _self.radio_buttons(form_data) }} {{ _self.radio_buttons(form_data) }}
{% elseif form_data.tag == 'select' %}
{{ _self.select(form_data) }}
{% elseif form_data.tag == 'textarea' %}
{{ _self.textarea(form_data) }}
{% elseif form_data[0] %} {% elseif form_data[0] %}
{% for element in form_data %} {% for element in form_data %}
{{ _self.build_template(element) }} {{ _self.build_template(element) }}

View file

@ -64,7 +64,7 @@ class acp_board
'board_index_text' => array('lang' => 'BOARD_INDEX_TEXT', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'board_index_text' => array('lang' => 'BOARD_INDEX_TEXT', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true),
'board_disable' => array('lang' => 'DISABLE_BOARD', 'validate' => 'bool', 'type' => 'custom', 'method' => 'board_disable', 'explain' => true), 'board_disable' => array('lang' => 'DISABLE_BOARD', 'validate' => 'bool', 'type' => 'custom', 'method' => 'board_disable', 'explain' => true),
'board_disable_msg' => false, 'board_disable_msg' => false,
'default_lang' => array('lang' => 'DEFAULT_LANGUAGE', 'validate' => 'lang', 'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false), 'default_lang' => array('lang' => 'DEFAULT_LANGUAGE', 'validate' => 'lang', 'type' => 'select', 'method' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false),
'default_dateformat' => array('lang' => 'DEFAULT_DATE_FORMAT', 'validate' => 'string', 'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true), 'default_dateformat' => array('lang' => 'DEFAULT_DATE_FORMAT', 'validate' => 'string', 'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true),
'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'timezone', 'type' => 'custom', 'method' => 'timezone_select', 'explain' => true), 'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'timezone', 'type' => 'custom', 'method' => 'timezone_select', 'explain' => true),
@ -976,19 +976,52 @@ class acp_board
/** /**
* Select bump interval * Select bump interval
*/ */
function bump_interval($value, $key) public function bump_interval($value, $key): array
{ {
global $user; global $language;
$s_bump_type = ''; $bump_type_options = [];
$types = array('m' => 'MINUTES', 'h' => 'HOURS', 'd' => 'DAYS'); $types = array('m' => 'MINUTES', 'h' => 'HOURS', 'd' => 'DAYS');
foreach ($types as $type => $lang) foreach ($types as $type => $lang)
{ {
$selected = ($this->new_config['bump_type'] == $type) ? ' selected="selected"' : ''; $bump_type_options[] = [
$s_bump_type .= '<option value="' . $type . '"' . $selected . '>' . $user->lang[$lang] . '</option>'; 'value' => $type,
'selected' => $this->new_config['bump_type'] == $type,
'label' => $language->lang($lang),
];
} }
return '<input id="' . $key . '" type="text" size="3" maxlength="4" name="config[bump_interval]" value="' . $value . '" />&nbsp;<select name="config[bump_type]">' . $s_bump_type . '</select>'; return [
[
'tag' => 'input',
'id' => $key,
'type' => 'text',
'size' => 3,
'maxlength' => 4,
'name' => 'config[bump_interval]',
'value' => $value,
],
[
'tag' => 'select',
'name' => 'config[bump_type]',
'options' => $bump_type_options,
],
];
}
/**
* Wrapper function for phpbb_language_select()
*
* @param string $default
* @param array $langdata
*
* @return array
*/
public function language_select(string $default = '', array $langdata = []): array
{
global $db;
return phpbb_language_select($db, $default, $langdata);
} }
/** /**

View file

@ -482,10 +482,23 @@ function build_cfg_template($tpl_type, $key, &$new_ary, $config_key, $vars)
if ($tpl_type[0] == 'select') if ($tpl_type[0] == 'select')
{ {
$size = (isset($tpl_type[1])) ? (int) $tpl_type[1] : 1; if (is_string($return))
$data_toggle = (!empty($tpl_type[2])) ? ' data-togglable-settings="true"' : ''; {
$size = (isset($tpl_type[1])) ? (int)$tpl_type[1] : 1;
$data_toggle = (!empty($tpl_type[2])) ? ' data-togglable-settings="true"' : '';
$tpl = '<select id="' . $key . '" name="' . $name . '"' . (($size > 1) ? ' size="' . $size . '"' : '') . $data_toggle . '>' . $return . '</select>'; $tpl = '<select id="' . $key . '" name="' . $name . '"' . (($size > 1) ? ' size="' . $size . '"' : '') . $data_toggle . '>' . $return . '</select>';
}
else
{
$tpl = [
'tag' => 'select',
'id' => $key,
'name' => $name,
'toggleable' => !empty($tpl_type[2]),
'options' => $return,
];
}
} }
else else
{ {