diff --git a/CHANGELOG.md b/CHANGELOG.md index ae53c83..ca3793b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,13 @@ Format : [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/) — versionnag --- +## [1.6.9] - 2026-05-15 + +### Ajouté +- `/admin/articles` : tri par **Titre** (A→Z / Z→A) et par **Date** (publication) en cliquant les en-têtes de colonne — indicateur ↑ / ↓ sur la colonne active, paramètres `sort` et `dir` préservés lors du filtrage + +--- + ## [1.6.8] - 2026-05-15 ### Corrigé diff --git a/public/index.php b/public/index.php index 183f740..40e6c78 100644 --- a/public/index.php +++ b/public/index.php @@ -2333,7 +2333,6 @@ switch ($action) { $me = currentUserEmail() ?? ''; $allArticles = array_values(array_filter($allArticles, fn ($a) => ($a['author'] ?? '') === $me)); } - usort($allArticles, fn ($a, $b) => strcmp($b['updated_at'] ?? '', $a['updated_at'] ?? '')); $adminData['filter_authors'] = array_values(array_unique(array_filter(array_column($allArticles, 'author')))); $adminData['filter_categories'] = array_values(array_unique(array_filter(array_column($allArticles, 'category')))); @@ -2362,7 +2361,23 @@ switch ($action) { $allArticles = array_values(array_filter($allArticles, fn ($a) => $a['published'] && strtotime((string)($a['published_at'] ?? '')) > $nowTs)); } - $adminData['articles'] = $allArticles; + $sortBy = in_array($_GET['sort'] ?? '', ['title', 'published', 'updated']) ? $_GET['sort'] : 'updated'; + $sortDir = ($_GET['dir'] ?? '') === 'asc' ? 'asc' : 'desc'; + usort($allArticles, function ($a, $b) use ($sortBy, $sortDir) { + $cmp = match ($sortBy) { + 'title' => strcmp($a['title'] ?? '', $b['title'] ?? ''), + 'published' => strcmp( + $a['published_at'] ?? $a['created_at'] ?? '', + $b['published_at'] ?? $b['created_at'] ?? '' + ), + default => strcmp($a['updated_at'] ?? '', $b['updated_at'] ?? ''), + }; + return $sortDir === 'asc' ? $cmp : -$cmp; + }); + + $adminData['articles'] = $allArticles; + $adminData['sort_by'] = $sortBy; + $adminData['sort_dir'] = $sortDir; } if ($tab === 'roles') { diff --git a/public/version.txt b/public/version.txt index d8c5e72..15d45d4 100644 --- a/public/version.txt +++ b/public/version.txt @@ -1 +1 @@ -1.6.8 +1.6.9 diff --git a/templates/admin.php b/templates/admin.php index 8affe38..bc6268f 100644 --- a/templates/admin.php +++ b/templates/admin.php @@ -205,8 +205,30 @@ function adminStatusBadge(array $a, int $now): string + $adminData['filter_author'] ?? '', + 'filter_category' => $adminData['filter_category'] ?? '', + 'filter_status' => $adminData['filter_status'] ?? '', + ], fn ($v) => $v !== ''); + $p['sort'] = $col; + $p['dir'] = $dir; + return '/admin/articles?' . http_build_query($p); + }; + $_sortIcon = function (string $col) use ($_sortBy, $_sortDir): string { + if ($_sortBy !== $col) { return '↕'; } + return '' . ($_sortDir === 'asc' ? '↑' : '↓') . ''; + }; + ?> +