Skip to content

Commit 3584ef7

Browse files
authored
Merge pull request phpbb#6753 from rubencm/ticket/17361
[ticket/17361] Improve storage
2 parents 2a0f189 + c9ff5a0 commit 3584ef7

37 files changed

+864
-894
lines changed

phpBB/adm/style/acp_storage.html

+18-19
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ <h3>{{ lang('WARNING') }}</h3>
4747
{% for provider in PROVIDERS %}
4848
{% if provider.is_available %}
4949
<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">
50-
{{ lang('STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_NAME') }}
50+
{{ provider.get_title }}
5151
</option>
5252
{% endif %}
5353
{% endfor %}
@@ -59,43 +59,42 @@ <h3>{{ lang('WARNING') }}</h3>
5959
{% for provider in PROVIDERS %}
6060
{% if provider.is_available %}
6161
<fieldset id="{{ storage.get_name }}_{{ provider.get_name }}_settings">
62-
<legend>{{ lang('STORAGE_' ~ storage.get_name | upper ~ '_TITLE') }} - {{ lang('STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_NAME') }}</legend>
62+
<legend>{{ lang('STORAGE_' ~ storage.get_name | upper ~ '_TITLE') }} - {{ provider.get_title }}</legend>
6363
{% for name, options in provider.get_options %}
6464
<dl>
6565
<dt>
66-
{% set title = 'STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_OPTION_' ~ name | upper %}
67-
{% set description = 'STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_OPTION_' ~ name | upper ~ '_EXPLAIN' %}
68-
<label>{{ lang(title) ~ lang('COLON') }}</label>
69-
{% if lang_defined(description) %}
70-
<br /><span>{{ lang(description) }}</span>
66+
<label>{{ options.title ~ lang('COLON') }}</label>
67+
{% if options.description %}
68+
<br /><span>{{ options.description }}</span>
7169
{% endif %}
7270
</dt>
7371
<dd>
7472
{% set input_name = storage.get_name ~ '[' ~ name ~ ']' %}
7573
{% set input_value = attribute(config, 'storage\\' ~ storage.get_name ~ '\\config\\' ~ name) %}
74+
{% set form_macro = options.form_macro %}
7675

77-
{% if options.tag == 'input' %}
78-
{{ FormsInput(options | merge({"name": input_name, "value": input_value})) }}
79-
{% elseif options.tag == 'textarea' %}
80-
{{ FormsTextarea(options | merge({"name": input_name, "content": input_value})) }}
81-
{% elseif options.tag == 'radio' %}
76+
{% if form_macro.tag == 'input' %}
77+
{{ FormsInput(form_macro | merge({"name": input_name, "value": input_value})) }}
78+
{% elseif form_macro.tag == 'textarea' %}
79+
{{ FormsTextarea(form_macro | merge({"name": input_name, "content": input_value})) }}
80+
{% elseif form_macro.tag == 'radio' %}
8281
{% set buttons = [] %}
8382

84-
{% for button in options.buttons %}
83+
{% for button in form_macro.buttons %}
8584
{% set new_button = button | merge({"name": input_name, "checked": button.value == input_value}) %}
8685
{% set buttons = buttons | merge([new_button]) %}
8786
{% endfor %}
8887

89-
{{ FormsRadioButtons(options | merge({"buttons": buttons})) }}
90-
{% elseif options.tag == 'select' %}
88+
{{ FormsRadioButtons(form_macro | merge({"buttons": buttons})) }}
89+
{% elseif form_macro.tag == 'select' %}
9190
{% set select_options = [] %}
9291

93-
{% for option in options.options %}
92+
{% for option in form_macro.options %}
9493
{% set new_option = option | merge({"selected": option.value == input_value}) %}
9594
{% set select_options = select_options | merge([new_option]) %}
9695
{% endfor %}
9796

98-
{{ FormsSelect(options | merge({"name": input_name, "options": select_options})) }}
97+
{{ FormsSelect(form_macro | merge({"name": input_name, "options": select_options})) }}
9998
{% endif %}
10099
</dd>
101100
</dl>
@@ -109,9 +108,9 @@ <h3>{{ lang('WARNING') }}</h3>
109108
<dl>
110109
<dt><label for="update_type">{{ lang('STORAGE_UPDATE_TYPE') ~ lang('COLON') }}</label></dt>
111110
<dd>
112-
<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>
111+
<label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_CONFIG }}" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_CONFIG') }}</label>
113112
<label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_COPY }}" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_COPY') }}</label>
114-
<label><input class="radio" name="update_type" value="{{ STORAGE_UPDATE_TYPE_MOVE }}" type="radio"> {{ lang('STORAGE_UPDATE_TYPE_MOVE') }}</label>
113+
<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>
115114
</dd>
116115
</dl>
117116
</fieldset>

phpBB/config/default/container/services_console.yml

+6-3
Original file line numberDiff line numberDiff line change
@@ -284,20 +284,22 @@ services:
284284
console.command.thumbnail.delete:
285285
class: phpbb\console\command\thumbnail\delete
286286
arguments:
287-
- '@config'
288287
- '@user'
289288
- '@dbal.conn'
290-
- '%core.root_path%'
289+
- '@language'
290+
- '@storage.attachment'
291291
tags:
292292
- { name: console.command }
293293

294294
console.command.thumbnail.generate:
295295
class: phpbb\console\command\thumbnail\generate
296296
arguments:
297-
- '@config'
298297
- '@user'
299298
- '@dbal.conn'
300299
- '@cache'
300+
- '@language'
301+
- '@storage.attachment'
302+
- '@filesystem.temp'
301303
- '%core.root_path%'
302304
- '%core.php_ext%'
303305
tags:
@@ -307,6 +309,7 @@ services:
307309
class: phpbb\console\command\thumbnail\recreate
308310
arguments:
309311
- '@user'
312+
- '@language'
310313
tags:
311314
- { name: console.command }
312315

phpBB/config/default/container/services_storage.yml

+12-9
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,27 @@ services:
44
storage.attachment:
55
class: phpbb\storage\storage
66
arguments:
7-
- '@dbal.conn'
8-
- '@cache.driver'
97
- '@storage.adapter.factory'
8+
- '@storage.file_tracker'
109
- 'attachment'
11-
- '%tables.storage%'
1210
tags:
1311
- { name: storage }
1412

1513
storage.avatar:
1614
class: phpbb\storage\storage
1715
arguments:
18-
- '@dbal.conn'
19-
- '@cache.driver'
2016
- '@storage.adapter.factory'
17+
- '@storage.file_tracker'
2118
- 'avatar'
22-
- '%tables.storage%'
2319
tags:
2420
- { name: storage }
2521

2622
storage.backup:
2723
class: phpbb\storage\storage
2824
arguments:
29-
- '@dbal.conn'
30-
- '@cache.driver'
3125
- '@storage.adapter.factory'
26+
- '@storage.file_tracker'
3227
- 'backup'
33-
- '%tables.storage%'
3428
tags:
3529
- { name: storage }
3630

@@ -78,6 +72,7 @@ services:
7872
storage.provider.local:
7973
class: phpbb\storage\provider\local
8074
arguments:
75+
- '@language'
8176
tags:
8277
- { name: storage.provider }
8378

@@ -124,3 +119,11 @@ services:
124119
- '@storage.state_helper'
125120
- '@storage.provider_collection'
126121
- '@storage.adapter_collection'
122+
123+
storage.file_tracker:
124+
class: phpbb\storage\file_tracker
125+
arguments:
126+
- '@cache.driver'
127+
- '@dbal.conn'
128+
- '%tables.storage%'
129+

phpBB/includes/acp/acp_database.php

+2-7
Original file line numberDiff line numberDiff line change
@@ -162,12 +162,7 @@ function main($id, $mode)
162162
throw new \phpbb\exception\runtime_exception('CANNOT_OPEN_FILE');
163163
}
164164

165-
$storage->write_stream($file, $fp);
166-
167-
if (is_resource($fp))
168-
{
169-
fclose($fp);
170-
}
165+
$storage->write($file, $fp);
171166

172167
// Remove file from tmp
173168
@unlink($temp_dir . '/' . $file);
@@ -279,7 +274,7 @@ function main($id, $mode)
279274

280275
try
281276
{
282-
$stream = $storage->read_stream($backup_info['file_name']);
277+
$stream = $storage->read($backup_info['file_name']);
283278
$fp = fopen($temp_file_name, 'w+b');
284279

285280
stream_copy_to_stream($stream, $fp);

phpBB/includes/acp/acp_main.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ function main($id, $mode)
496496
$upload_dir_size = get_formatted_filesize($config['upload_dir_size']);
497497

498498
$storage_avatar = $phpbb_container->get('storage.avatar');
499-
$avatar_dir_size = get_formatted_filesize($storage_avatar->get_size());
499+
$avatar_dir_size = get_formatted_filesize($storage_avatar->total_size());
500500

501501
if ($posts_per_day > $total_posts)
502502
{

phpBB/includes/acp/acp_storage.php

+24-16
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,6 @@ private function get_modified_storages(): array
378378
foreach ($this->storage_collection as $storage)
379379
{
380380
$storage_name = $storage->get_name();
381-
$options = $this->storage_helper->get_provider_options($this->storage_helper->get_current_provider($storage_name));
382381

383382
$modified = false;
384383

@@ -389,6 +388,8 @@ private function get_modified_storages(): array
389388
}
390389
else
391390
{
391+
$options = $this->storage_helper->get_provider_options($this->storage_helper->get_current_provider($storage_name));
392+
392393
// Check if options have been modified
393394
foreach (array_keys($options) as $definition)
394395
{
@@ -431,8 +432,8 @@ protected function storage_stats(): void
431432

432433
$storage_stats[] = [
433434
'name' => $this->lang->lang('STORAGE_' . strtoupper($storage->get_name()) . '_TITLE'),
434-
'files' => $storage->get_num_files(),
435-
'size' => get_formatted_filesize($storage->get_size()),
435+
'files' => $storage->total_files(),
436+
'size' => get_formatted_filesize($storage->total_size()),
436437
'free_space' => $free_space,
437438
];
438439
}
@@ -535,30 +536,29 @@ protected function validate_data(string $storage_name, array &$messages): void
535536
$this->validate_path($storage_name, $messages);
536537

537538
// Check options
538-
$new_options = $this->storage_helper->get_provider_options($this->request->variable([$storage_name, 'provider'], ''));
539+
$new_provider = $this->provider_collection->get_by_class($this->request->variable([$storage_name, 'provider'], ''));
539540

540-
foreach ($new_options as $definition_key => $definition_value)
541+
foreach ($new_provider->get_options() as $definition_key => $definition_value)
541542
{
542-
$provider = $this->provider_collection->get_by_class($this->request->variable([$storage_name, 'provider'], ''));
543-
$definition_title = $this->lang->lang('STORAGE_ADAPTER_' . strtoupper($provider->get_name()) . '_OPTION_' . strtoupper($definition_key));
544543

544+
$definition_title = $definition_value['title'];
545545
$value = $this->request->variable([$storage_name, $definition_key], '');
546546

547-
switch ($definition_value['tag'])
547+
switch ($definition_value['form_macro']['tag'])
548548
{
549549
case 'text':
550-
if ($definition_value['type'] == 'email' && filter_var($value, FILTER_VALIDATE_EMAIL))
550+
if ($definition_value['form_macro']['type'] === 'email' && filter_var($value, FILTER_VALIDATE_EMAIL))
551551
{
552552
$messages[] = $this->lang->lang('STORAGE_FORM_TYPE_EMAIL_INCORRECT_FORMAT', $definition_title, $storage_title);
553553
}
554554

555-
$maxlength = $definition_value['max'] ?? 255;
555+
$maxlength = $definition_value['form_macro']['max'] ?? 255;
556556
if (strlen($value) > $maxlength)
557557
{
558558
$messages[] = $this->lang->lang('STORAGE_FORM_TYPE_TEXT_TOO_LONG', $definition_title, $storage_title);
559559
}
560560

561-
if ($provider->get_name() == 'local' && $definition_key == 'path')
561+
if ($new_provider->get_name() === 'local' && $definition_key === 'path')
562562
{
563563
$path = $value;
564564

@@ -575,7 +575,7 @@ protected function validate_data(string $storage_name, array &$messages): void
575575

576576
case 'radio':
577577
$found = false;
578-
foreach ($definition_value['buttons'] as $button)
578+
foreach ($definition_value['form_macro']['buttons'] as $button)
579579
{
580580
if ($button['value'] == $value)
581581
{
@@ -592,7 +592,7 @@ protected function validate_data(string $storage_name, array &$messages): void
592592

593593
case 'select':
594594
$found = false;
595-
foreach ($definition_value['options'] as $option)
595+
foreach ($definition_value['form_macro']['options'] as $option)
596596
{
597597
if ($option['value'] == $value)
598598
{
@@ -619,10 +619,18 @@ protected function validate_data(string $storage_name, array &$messages): void
619619
*/
620620
protected function validate_path(string $storage_name, array &$messages) : void
621621
{
622-
$current_provider = $this->storage_helper->get_current_provider($storage_name);
623-
$options = $this->storage_helper->get_provider_options($current_provider);
622+
if ($this->request->is_set_post('submit'))
623+
{
624+
$provider = $this->request->variable([$storage_name, 'provider'], '');
625+
}
626+
else
627+
{
628+
$provider = $this->storage_helper->get_current_provider($storage_name);
629+
}
630+
631+
$options = $this->storage_helper->get_provider_options($provider);
624632

625-
if ($this->provider_collection->get_by_class($current_provider)->get_name() == 'local' && isset($options['path']))
633+
if ($this->provider_collection->get_by_class($provider)->get_name() === 'local' && isset($options['path']))
626634
{
627635
$path = $this->request->is_set_post('submit') ? $this->request->variable([$storage_name, 'path'], '') : $this->storage_helper->get_current_definition($storage_name, 'path');
628636

phpBB/includes/functions_user.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -2126,7 +2126,8 @@ function group_correct_avatar($group_id, $old_entry)
21262126

21272127
try
21282128
{
2129-
$storage->rename($old_filename, $new_filename);
2129+
$storage->write($new_filename, $storage->read($old_filename));
2130+
$storage->delete($old_filename);
21302131

21312132
$sql = 'UPDATE ' . GROUPS_TABLE . '
21322133
SET group_avatar = \'' . $db->sql_escape($new_entry) . "'

phpBB/language/en/acp/storage.php

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
// Local adapter
6666
'STORAGE_ADAPTER_LOCAL_NAME' => 'Local',
6767
'STORAGE_ADAPTER_LOCAL_OPTION_PATH' => 'Path',
68+
'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>.',
6869

6970
// Form validation
7071
'STORAGE_UPDATE_SUCCESSFUL' => 'All storage types were successfully updated.',

phpBB/phpbb/attachment/upload.php

+1-6
Original file line numberDiff line numberDiff line change
@@ -245,12 +245,7 @@ protected function create_thumbnail()
245245
// Move the thumbnail from temp folder to the storage
246246
$fp = fopen($destination, 'rb');
247247

248-
$this->storage->write_stream($destination_name, $fp);
249-
250-
if (is_resource($fp))
251-
{
252-
fclose($fp);
253-
}
248+
$this->storage->write($destination_name, $fp);
254249
}
255250
else
256251
{

0 commit comments

Comments
 (0)