268 lines
8.5 KiB
PHP
268 lines
8.5 KiB
PHP
<?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")
|
|
];
|
|
}
|
|
}
|