diff --git a/phpBB/adm/style/acp_storage.html b/phpBB/adm/style/acp_storage.html
index 39ca5bb012..1aedc50ce1 100644
--- a/phpBB/adm/style/acp_storage.html
+++ b/phpBB/adm/style/acp_storage.html
@@ -74,10 +74,30 @@
{% set input_name = storage.get_name ~ '[' ~ name ~ ']' %}
{% set input_value = attribute(config, 'storage\\' ~ storage.get_name ~ '\\config\\' ~ name) %}
- {% if options['type'] in ['text', 'password', 'email'] %}
- {{ FormsBuildTemplate(options | merge({"name": input_name, "value": input_value})) }}
- {% elseif options['type'] == 'textarea' %}
- {{ FormsBuildTemplate(options | merge({"name": input_name, "content": input_value})) }}
+ {% if options.tag == 'input' %}
+ {{ FormsInput(options | merge({"name": input_name, "value": input_value})) }}
+ {% elseif options.tag == 'textarea' %}
+ {{ FormsTextarea(options | merge({"name": input_name, "content": input_value})) }}
+ {% elseif options.tag == 'radio' %}
+ {% set buttons = [] %}
+
+ {% for button in options.buttons %}
+ {% set checked = button.value == input_value %}
+ {% set new_button = button | merge({"name": input_name, "checked": checked}) %}
+ {% set buttons = buttons | merge([new_button]) %}
+ {% endfor %}
+
+ {{ FormsRadioButtons(options | merge({"buttons": buttons})) }}
+ {% elseif options.tag == 'select' %}
+ {% set select_options = [] %}
+
+ {% for option in options.options %}
+ {% set selected = option.value == input_value %}
+ {% set new_option = option | merge({"selected": selected}) %}
+ {% set select_options = select_options | merge([new_option]) %}
+ {% endfor %}
+
+ {{ FormsSelect(options | merge({"name": input_name, "options": select_options})) }}
{% endif %}
diff --git a/phpBB/includes/acp/acp_storage.php b/phpBB/includes/acp/acp_storage.php
index bd66516a3e..150d711672 100644
--- a/phpBB/includes/acp/acp_storage.php
+++ b/phpBB/includes/acp/acp_storage.php
@@ -458,7 +458,7 @@ class acp_storage
$this->db->sql_freeresult($result);
$total_count = $done_count + $remain_count;
- $percent = $done_count / $total_count;
+ $percent = $total_count > 0 ? $done_count / $total_count : 0;
$steps = $this->state_helper->storage_index() + $this->state_helper->remove_storage_index() + $percent;
$multiplier = $this->state_helper->update_type() === update_type::MOVE ? 2 : 1;
@@ -509,18 +509,15 @@ class acp_storage
$value = $this->request->variable([$storage_name, $definition_key], '');
- switch ($definition_value['type'])
+ switch ($definition_value['tag'])
{
- case 'email':
- if (!filter_var($value, FILTER_VALIDATE_EMAIL))
+ case 'text':
+ if ($definition_value['type'] == 'email' && filter_var($value, FILTER_VALIDATE_EMAIL))
{
$messages[] = $this->lang->lang('STORAGE_FORM_TYPE_EMAIL_INCORRECT_FORMAT', $definition_title, $storage_title);
}
- // no break
- case 'text':
- case 'password':
- $maxlength = isset($definition_value['maxlength']) ? $definition_value['maxlength'] : 255;
+ $maxlength = isset($definition_value['max']) ? $definition_value['max'] : 255;
if (strlen($value) > $maxlength)
{
$messages[] = $this->lang->lang('STORAGE_FORM_TYPE_TEXT_TOO_LONG', $definition_title, $storage_title);
@@ -542,8 +539,34 @@ class acp_storage
break;
case 'radio':
+ $found = false;
+ foreach ($definition_value['buttons'] as $button)
+ {
+ if ($button['value'] == $value)
+ {
+ $found = true;
+ break;
+ }
+ }
+
+ if (!$found)
+ {
+ $messages[] = $this->lang->lang('STORAGE_FORM_TYPE_SELECT_NOT_AVAILABLE', $definition_title, $storage_title);
+ }
+ break;
+
case 'select':
- if (!in_array($value, array_values($definition_value['options'])))
+ $found = false;
+ foreach ($definition_value['options'] as $option)
+ {
+ if ($option['value'] == $value)
+ {
+ $found = true;
+ break;
+ }
+ }
+
+ if (!$found)
{
$messages[] = $this->lang->lang('STORAGE_FORM_TYPE_SELECT_NOT_AVAILABLE', $definition_title, $storage_title);
}