auth->exigerConnexion(); $recherche = Helpers::champ("q"); $consoleId = Helpers::champ("console"); $etat = Helpers::champ("etat"); $jeux = $this->jeuService->listerPourUtilisateur( $utilisateur["id"], $recherche !== "" ? $recherche : null, $consoleId !== "" ? $consoleId : null, $etat !== "" ? $etat : null ); $consoles = $this->consoleService->listerPourUtilisateur($utilisateur["id"]); $consolesParId = []; foreach ($consoles as $console) { $consolesParId[$console["id"]] = $console; } View::rendre("jeux/liste", [ "titrePage" => "Mes jeux", "utilisateur" => $utilisateur, "jeux" => $jeux, "consoles" => $consoles, "consolesParId" => $consolesParId, "filtres" => [ "q" => $recherche, "console" => $consoleId, "etat" => $etat ] ]); } public function detail(string $id): void { $utilisateur = $this->auth->exigerConnexion(); $jeu = $this->jeuService->trouverPourUtilisateur($id, $utilisateur["id"]); if ($jeu === null) { Flash::definir("danger", "Jeu introuvable."); Helpers::rediriger("/jeux"); } $console = $this->consoleService->trouverPourUtilisateur( $jeu["consoleId"], $utilisateur["id"] ); View::rendre("jeux/detail", [ "titrePage" => $jeu["titre"], "utilisateur" => $utilisateur, "jeu" => $jeu, "console" => $console ]); } public function creer(): void { $utilisateur = $this->auth->exigerConnexion(); $consoles = $this->consoleService->listerPourUtilisateur($utilisateur["id"]); if ($consoles === []) { Flash::definir("warning", "Ajoutez d'abord une console avant d'enregistrer un jeu."); Helpers::rediriger("/consoles/creer"); } $prefill = $this->construirePrefillDepuisGet(); if (Helpers::estPost()) { Csrf::exiger(); try { $donnees = $this->collecterDonneesFormulaire(); $jeu = $this->jeuService->creer($utilisateur["id"], $donnees); Flash::definir("success", "Jeu ajouté à votre bibliothèque."); Helpers::rediriger("/jeux/" . $jeu["id"]); } catch (InvalidArgumentException $exception) { Flash::definir("danger", $exception->getMessage()); $prefill = array_merge($prefill, $_POST); } } View::rendre("jeux/formulaire", [ "titrePage" => "Ajouter un jeu", "utilisateur" => $utilisateur, "jeu" => $prefill, "consoles" => $consoles, "action" => "/jeux/creer", "apiDisponible" => $this->enrichissementService->estDisponible() ]); } public function modifier(string $id): void { $utilisateur = $this->auth->exigerConnexion(); $jeu = $this->jeuService->trouverPourUtilisateur($id, $utilisateur["id"]); if ($jeu === null) { Flash::definir("danger", "Jeu introuvable."); Helpers::rediriger("/jeux"); } $consoles = $this->consoleService->listerPourUtilisateur($utilisateur["id"]); if (Helpers::estPost()) { Csrf::exiger(); try { $donnees = $this->collecterDonneesFormulaire(); $jeu = $this->jeuService->modifier($id, $utilisateur["id"], $donnees); Flash::definir("success", "Jeu mis à jour."); Helpers::rediriger("/jeux/" . $jeu["id"]); } catch (InvalidArgumentException $exception) { Flash::definir("danger", $exception->getMessage()); $jeu = array_merge($jeu, $_POST); } } View::rendre("jeux/formulaire", [ "titrePage" => "Modifier " . $jeu["titre"], "utilisateur" => $utilisateur, "jeu" => $jeu, "consoles" => $consoles, "action" => "/jeux/" . $id . "/modifier", "apiDisponible" => $this->enrichissementService->estDisponible() ]); } public function supprimer(string $id): void { $utilisateur = $this->auth->exigerConnexion(); Csrf::exiger(); if ($this->jeuService->supprimer($id, $utilisateur["id"])) { Flash::definir("success", "Jeu supprimé."); } else { Flash::definir("danger", "Jeu introuvable."); } Helpers::rediriger("/jeux"); } public function rechercherApi(): void { $this->auth->exigerConnexion(); header("Content-Type: application/json; charset=utf-8"); $titre = Helpers::champ("q"); if ($titre === "") { print json_encode(["resultats" => []]); return; } $resultats = $this->enrichissementService->rechercher($titre); print json_encode(["resultats" => $resultats], JSON_UNESCAPED_UNICODE); } public function appliquerEnrichissement(): void { $utilisateur = $this->auth->exigerConnexion(); Csrf::exiger(); $rawgId = (int) Helpers::champ("rawgId"); $retour = Helpers::champ("retour", "/jeux/creer"); if ($rawgId <= 0) { Flash::definir("danger", "Sélection d'enrichissement invalide."); Helpers::rediriger($retour); } $detail = $this->enrichissementService->detail($rawgId); if ($detail === null) { Flash::definir("warning", "Impossible de récupérer les métadonnées. Saisie manuelle possible."); Helpers::rediriger($retour); } $jaquette = $this->enrichissementService->telechargerJaquette($detail["jaquetteUrl"] ?? null); $query = http_build_query([ "titre" => $detail["titre"] ?? "", "description" => $detail["description"] ?? "", "dateSortie" => $detail["dateSortie"] ?? "", "genres" => implode(", ", $detail["genres"] ?? []), "editeur" => $detail["editeur"] ?? "", "developpeur" => $detail["developpeur"] ?? "", "jaquette" => $jaquette ?? "", "sourceEnrichissement" => "api" ]); $separateur = str_contains($retour, "?") ? "&" : "?"; Helpers::rediriger($retour . $separateur . $query); } private function collecterDonneesFormulaire(): array { return [ "titre" => Helpers::champ("titre"), "consoleId" => Helpers::champ("consoleId"), "etat" => Helpers::champ("etat", "possede"), "jaquette" => Helpers::champ("jaquette"), "description" => Helpers::champ("description"), "dateSortie" => Helpers::champ("dateSortie"), "genres" => Helpers::champ("genres"), "editeur" => Helpers::champ("editeur"), "developpeur" => Helpers::champ("developpeur"), "notes" => Helpers::champ("notes"), "sourceEnrichissement" => Helpers::champ("sourceEnrichissement", "manuel") ]; } private function construirePrefillDepuisGet(): array { $genres = Helpers::champ("genres"); return [ "titre" => Helpers::champ("titre"), "consoleId" => Helpers::champ("consoleId"), "etat" => Helpers::champ("etat", "possede"), "jaquette" => Helpers::champ("jaquette"), "description" => Helpers::champ("description"), "dateSortie" => Helpers::champ("dateSortie"), "genres" => $genres !== "" ? array_map("trim", explode(",", $genres)) : [], "editeur" => Helpers::champ("editeur"), "developpeur" => Helpers::champ("developpeur"), "notes" => Helpers::champ("notes"), "sourceEnrichissement" => Helpers::champ("sourceEnrichissement", "manuel") ]; } }