From 89c1cb24c01a0132c0db48faa3d98d4d3e23392a Mon Sep 17 00:00:00 2001 From: isUnknown Date: Fri, 30 Jan 2026 11:48:53 +0100 Subject: [PATCH] =?UTF-8?q?Fix=20persistance=20et=20format=20des=20projets?= =?UTF-8?q?=20masqu=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Route toggle-hidden-project : utilisation collection Pages avec add/remove puis toArray() + encode YAML (pattern de toggle-favorite) - Controller site.php : ->values() au lieu de ->data pour retourner un vrai tableau au lieu d'un objet Co-Authored-By: Claude Sonnet 4.5 --- .../config/routes/toggle-hidden-project.php | 41 +++++++++---------- public/site/controllers/site.php | 2 +- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/public/site/config/routes/toggle-hidden-project.php b/public/site/config/routes/toggle-hidden-project.php index 9106983..cb023e7 100644 --- a/public/site/config/routes/toggle-hidden-project.php +++ b/public/site/config/routes/toggle-hidden-project.php @@ -11,45 +11,44 @@ return [ $user = kirby()->user(); $projectUuid = $data->projectUuid; - // Récupérer les projets masqués actuels + // Récupérer la collection des projets masqués actuels $hiddenProjects = $user->hiddenProjects()->toPages(); - $hiddenProjectsArray = []; - foreach ($hiddenProjects as $project) { - $hiddenProjectsArray[] = 'page://' . $project->uuid(); + // Trouver le projet à toggle + $projectPage = Find::page($projectUuid); + + if (!$projectPage) { + throw new Exception('Projet introuvable'); } - // Toggle: ajouter ou retirer le projet - $projectPage = Find::page($projectUuid); - $projectRef = 'page://' . $projectPage->uuid(); - - $index = array_search($projectRef, $hiddenProjectsArray); - - if ($index !== false) { - // Projet déjà masqué, on le retire - unset($hiddenProjectsArray[$index]); + // Toggle: ajouter ou retirer le projet de la collection + if ($hiddenProjects->has($projectPage)) { + $hiddenProjects->remove($projectPage); $action = 'shown'; } else { - // Projet non masqué, on l'ajoute - $hiddenProjectsArray[] = $projectRef; + $hiddenProjects->add($projectPage); $action = 'hidden'; } - // Réindexer le tableau - $hiddenProjectsArray = array_values($hiddenProjectsArray); - - // Encoder en YAML pour Kirby - $yaml = Data::encode($hiddenProjectsArray, 'yaml'); + // Convertir la collection en array puis en YAML + $array = $hiddenProjects->toArray(); + $yaml = Data::encode($array, 'yaml'); // Mettre à jour l'utilisateur $user->update([ 'hiddenProjects' => $yaml ]); + // Retourner les UUIDs pour le frontend + $hiddenProjectsUuids = []; + foreach ($hiddenProjects as $project) { + $hiddenProjectsUuids[] = $project->uuid(); + } + return [ 'status' => 'success', 'action' => $action, - 'hiddenProjects' => $hiddenProjectsArray + 'hiddenProjects' => $hiddenProjectsUuids ]; } catch (\Throwable $th) { return [ diff --git a/public/site/controllers/site.php b/public/site/controllers/site.php index a0e7261..ae5d333 100644 --- a/public/site/controllers/site.php +++ b/public/site/controllers/site.php @@ -41,7 +41,7 @@ return function ($page, $kirby, $site) { if ($kirby->user()->hiddenProjects()->exists() && $kirby->user()->hiddenProjects()->isNotEmpty()) { $userData['hiddenProjects'] = $kirby->user()->hiddenProjects()->toPages()->map(function ($project) { return (string) $project->uuid(); - })->data; + })->values(); } else { $userData['hiddenProjects'] = []; }