projet par cursor
This commit is contained in:
1 parent
236f75ecdd
commit
b785db1b84
47 files changed
+3902
No files matched your search
@@ -0,0 +1,267 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
final class JeuController
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Auth $auth,
|
||||
private readonly JeuService $jeuService,
|
||||
private readonly ConsoleService $consoleService,
|
||||
private readonly EnrichissementService $enrichissementService
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public function liste(): void
|
||||
{
|
||||
$utilisateur = $this->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")
|
||||
];
|
||||
}
|
||||
}
|
||||