[ticket/17361] Move language keys to storage adapters

PHPBB-17361
This commit is contained in:
Ruben Calvo 2024-11-30 01:25:17 +01:00
parent be3966c0cb
commit a44295a1ba
No known key found for this signature in database
6 changed files with 118 additions and 24 deletions

View file

@ -47,7 +47,7 @@
{% for provider in PROVIDERS %} {% for provider in PROVIDERS %}
{% if provider.is_available %} {% if provider.is_available %}
<option value="{{ get_class(provider) }}"{{ attribute(config, 'storage\\' ~ storage.get_name ~ '\\provider') == get_class(provider) ? ' selected' : '' }} data-toggle-setting="#{{ storage.get_name }}_{{ provider.get_name }}_settings"> <option value="{{ get_class(provider) }}"{{ attribute(config, 'storage\\' ~ storage.get_name ~ '\\provider') == get_class(provider) ? ' selected' : '' }} data-toggle-setting="#{{ storage.get_name }}_{{ provider.get_name }}_settings">
{{ lang('STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_NAME') }} {{ provider.get_title }}
</option> </option>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
@ -59,43 +59,42 @@
{% for provider in PROVIDERS %} {% for provider in PROVIDERS %}
{% if provider.is_available %} {% if provider.is_available %}
<fieldset id="{{ storage.get_name }}_{{ provider.get_name }}_settings"> <fieldset id="{{ storage.get_name }}_{{ provider.get_name }}_settings">
<legend>{{ lang('STORAGE_' ~ storage.get_name | upper ~ '_TITLE') }} - {{ lang('STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_NAME') }}</legend> <legend>{{ lang('STORAGE_' ~ storage.get_name | upper ~ '_TITLE') }} - {{ provider.get_title }}</legend>
{% for name, options in provider.get_options %} {% for name, options in provider.get_options %}
<dl> <dl>
<dt> <dt>
{% set title = 'STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_OPTION_' ~ name | upper %} <label>{{ options.title ~ lang('COLON') }}</label>
{% set description = 'STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_OPTION_' ~ name | upper ~ '_EXPLAIN' %} {% if options.description %}
<label>{{ lang(title) ~ lang('COLON') }}</label> <br /><span>{{ options.description }}</span>
{% if lang_defined(description) %}
<br /><span>{{ lang(description) }}</span>
{% endif %} {% endif %}
</dt> </dt>
<dd> <dd>
{% set input_name = storage.get_name ~ '[' ~ name ~ ']' %} {% set input_name = storage.get_name ~ '[' ~ name ~ ']' %}
{% set input_value = attribute(config, 'storage\\' ~ storage.get_name ~ '\\config\\' ~ name) %} {% set input_value = attribute(config, 'storage\\' ~ storage.get_name ~ '\\config\\' ~ name) %}
{% set form_macro = options.form_macro %}
{% if options.tag == 'input' %} {% if form_macro.tag == 'input' %}
{{ FormsInput(options | merge({"name": input_name, "value": input_value})) }} {{ FormsInput(form_macro | merge({"name": input_name, "value": input_value})) }}
{% elseif options.tag == 'textarea' %} {% elseif form_macro.tag == 'textarea' %}
{{ FormsTextarea(options | merge({"name": input_name, "content": input_value})) }} {{ FormsTextarea(form_macro | merge({"name": input_name, "content": input_value})) }}
{% elseif options.tag == 'radio' %} {% elseif form_macro.tag == 'radio' %}
{% set buttons = [] %} {% set buttons = [] %}
{% for button in options.buttons %} {% for button in form_macro.buttons %}
{% set new_button = button | merge({"name": input_name, "label": lang(button.label), "checked": button.value == input_value}) %} {% set new_button = button | merge({"name": input_name, "checked": button.value == input_value}) %}
{% set buttons = buttons | merge([new_button]) %} {% set buttons = buttons | merge([new_button]) %}
{% endfor %} {% endfor %}
{{ FormsRadioButtons(options | merge({"buttons": buttons})) }} {{ FormsRadioButtons(form_macro | merge({"buttons": buttons})) }}
{% elseif options.tag == 'select' %} {% elseif form_macro.tag == 'select' %}
{% set select_options = [] %} {% set select_options = [] %}
{% for option in options.options %} {% for option in form_macro.options %}
{% set new_option = option | merge({"selected": option.value == input_value}) %} {% set new_option = option | merge({"selected": option.value == input_value}) %}
{% set select_options = select_options | merge([new_option]) %} {% set select_options = select_options | merge([new_option]) %}
{% endfor %} {% endfor %}
{{ FormsSelect(options | merge({"name": input_name, "options": select_options})) }} {{ FormsSelect(form_macro | merge({"name": input_name, "options": select_options})) }}
{% endif %} {% endif %}
</dd> </dd>
</dl> </dl>
@ -109,9 +108,9 @@
<dl> <dl>
<dt><label for="update_type">{{ lang('STORAGE_UPDATE_TYPE') ~ lang('COLON') }}</label></dt> <dt><label for="update_type">{{ lang('STORAGE_UPDATE_TYPE') ~ lang('COLON') }}</label></dt>
<dd> <dd>
<label><input id="update_type" class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_CONFIG }}" checked="checked" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_CONFIG') }}</label> <label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_CONFIG }}" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_CONFIG') }}</label>
<label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_COPY }}" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_COPY') }}</label> <label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_COPY }}" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_COPY') }}</label>
<label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_MOVE }}" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_MOVE') }}</label> <label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_MOVE }}" type="radio" checked="checked" id="update_type"> {{ lang('STORAGE_UPDATE_TYPE_MOVE') }}</label>
</dd> </dd>
</dl> </dl>
</fieldset> </fieldset>

View file

@ -72,6 +72,7 @@ services:
storage.provider.local: storage.provider.local:
class: phpbb\storage\provider\local class: phpbb\storage\provider\local
arguments: arguments:
- '@language'
tags: tags:
- { name: storage.provider } - { name: storage.provider }

View file

@ -65,6 +65,7 @@ $lang = array_merge($lang, [
// Local adapter // Local adapter
'STORAGE_ADAPTER_LOCAL_NAME' => 'Local', 'STORAGE_ADAPTER_LOCAL_NAME' => 'Local',
'STORAGE_ADAPTER_LOCAL_OPTION_PATH' => 'Path', 'STORAGE_ADAPTER_LOCAL_OPTION_PATH' => 'Path',
'STORAGE_ADAPTER_LOCAL_OPTION_PATH_EXPLAIN' => 'Storage path for files.<br>For example: <samp>files</samp>, <samp>images/avatars/upload</samp> or <samp>store</samp>.',
// Form validation // Form validation
'STORAGE_UPDATE_SUCCESSFUL' => 'All storage types were successfully updated.', 'STORAGE_UPDATE_SUCCESSFUL' => 'All storage types were successfully updated.',

View file

@ -13,8 +13,25 @@
namespace phpbb\storage\provider; namespace phpbb\storage\provider;
use phpbb\language\language;
class local implements provider_interface class local implements provider_interface
{ {
/**
* @var language
*/
protected $language;
/**
* Constructor
*
* @param language $language
*/
public function __construct(language $language)
{
$this->language = $language;
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -23,6 +40,11 @@ class local implements provider_interface
return 'local'; return 'local';
} }
public function get_title(): string
{
return $this->language->lang('STORAGE_ADAPTER_LOCAL_NAME');
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -38,9 +60,13 @@ class local implements provider_interface
{ {
return [ return [
'path' => [ 'path' => [
'title' => $this->language->lang('STORAGE_ADAPTER_LOCAL_OPTION_PATH'),
'description' => $this->language->lang('STORAGE_ADAPTER_LOCAL_OPTION_PATH_EXPLAIN'),
'form_macro' => [
'tag' => 'input', 'tag' => 'input',
'type' => 'text', 'type' => 'text',
], ],
],
]; ];
} }

View file

@ -22,6 +22,13 @@ interface provider_interface
*/ */
public function get_name(): string; public function get_name(): string;
/**
* Gets adapter title for acp
*
* @return string
*/
public function get_title(): string;
/** /**
* Gets adapter class * Gets adapter class
* *
@ -32,6 +39,66 @@ interface provider_interface
/** /**
* Gets adapter options * Gets adapter options
* *
* Example:
* public function get_options()
* {
* return [
* 'text-test' => [
* 'title' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_TEXT_TEST'),
* 'description' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_TEXT_TEST_EXPLAIN'),
* 'form_macro' => [
* 'tag' => 'input',
* 'type' => 'text',
* ],
* ],
* 'password-test' => [
* 'title' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_PASSWORD_TEST'),
* 'description' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_PASSWORD_TEST_EXPLAIN'),
* 'form_macro' => [
* 'tag' => 'input',
* 'type' => 'password',
* ],
* ],
* 'radio-test' => [
* 'title' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_RADIO_TEST'),
* 'description' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_RADIO_TEST_EXPLAIN'),
* 'form_macro' => [
* 'tag' => 'radio',
* 'buttons' => [
* [
* 'type' => 'radio',
* 'value' => '1',
* 'label' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_RADIO_TEST_LABEL_ONE'),
* ],
* [
* 'type' => 'radio',
* 'value' => '2',
* 'label' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_RADIO_TEST_LABEL_TWO'),
* ],
* ],
* ],
* ],
* 'select-test' => [
* 'title' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_SELECT_TEST'),
* 'description' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_SELECT_TEST_EXPLAIN'),
* 'form_macro' => [
* 'tag' => 'select',
* 'options' => [
* ['value' => 'one', 'label' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_SELECT_TEST_LABEL_ONE')],
* ['value' => 'two', 'label' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_SELECT_TEST_LABEL_TWO')],
* ],
* ],
* ],
* 'textarea-test' => [
* 'title' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_TEXTAREA_TEST'),
* 'description' => $this->language->lang('STORAGE_ADAPTER_DEMO_OPTION_TEXTAREA_TEST_EXPLAIN'),
* 'form_macro' => [
* 'tag' => 'textarea',
* ]
* ],
* ];
* }
*
* @return array Configuration keys * @return array Configuration keys
*/ */
public function get_options(): array; public function get_options(): array;

View file

@ -206,7 +206,7 @@ class forms extends AbstractExtension
{ {
return $environment->render('macros/forms/textarea.twig', [ return $environment->render('macros/forms/textarea.twig', [
'CLASS' => (string) ($form_data['class'] ?? ''), 'CLASS' => (string) ($form_data['class'] ?? ''),
'ID' => (string) $form_data['id'], 'ID' => (string) ($form_data['id'] ?? ''),
'DATA' => $form_data['data'] ?? [], 'DATA' => $form_data['data'] ?? [],
'NAME' => (string) $form_data['name'], 'NAME' => (string) $form_data['name'],
'ROWS' => (int) ($form_data['rows'] ?? ''), 'ROWS' => (int) ($form_data['rows'] ?? ''),