feat: cache-bust assets, fix XSS and filemtime error handling, clean up users filters

- Add ?ver=<filemtime> cache-busting to CSS/JS assets in app and auth layouts
- Use ?: 0 fallback on filemtime() to prevent E_WARNING when files are missing
- Escape security_information output with $e() to fix XSS vulnerability (show.php:91)
- Wrap product image metadata in __meta container, move storage path into <details>
- Add table--details CSS class and th { white-space: nowrap } rule
- Remove redundant sort, sort_dir, per_page filter dropdowns from users list
- Add 10 as a per-page option in users list
- Clean up completed items from TODO.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-27 21:40:17 +01:00
parent bfff05a61b
commit 1cbbc76a17
7 changed files with 22 additions and 51 deletions

View File

@@ -55,39 +55,6 @@ final class UsersController
'type' => 'text',
'value' => $filters['search'],
],
[
'key' => 'sort',
'label' => $this->translator->get('users.filters.sort'),
'type' => 'select',
'value' => $filters['sort'],
'options' => [
'id' => 'ID',
'name' => $this->translator->get('users.fields.name'),
'email' => $this->translator->get('users.fields.email'),
'created_at' => $this->translator->get('users.fields.created_at'),
],
],
[
'key' => 'sort_dir',
'label' => $this->translator->get('users.filters.direction'),
'type' => 'select',
'value' => $filters['sort_dir'],
'options' => [
'DESC' => 'DESC',
'ASC' => 'ASC',
],
],
[
'key' => 'per_page',
'label' => $this->translator->get('users.filters.per_page'),
'type' => 'select',
'value' => (string) $filters['per_page'],
'options' => [
'20' => '20',
'50' => '50',
'100' => '100',
],
],
],
'columns' => [
['key' => 'id', 'label' => 'ID', 'sortable' => true, 'sort_key' => 'id'],
@@ -102,7 +69,7 @@ final class UsersController
'total' => (int) ($result['total'] ?? 0),
'per_page' => (int) ($result['per_page'] ?? 20),
],
'per_page_options' => [20, 50, 100],
'per_page_options' => [10, 20, 50, 100],
'empty_message' => $this->translator->get('users.empty'),
'show_actions' => false,
],