Compare commits

..
0 Commits
7 changed files with 16 additions and 313 deletions

No files matched your search

+2 -4
View File
@@ -342,8 +342,7 @@ a:hover
{ {
width: 100%; width: 100%;
aspect-ratio: 3 / 4; aspect-ratio: 3 / 4;
object-fit: contain; object-fit: cover;
object-position: center;
background: var(--bg-elevated); background: var(--bg-elevated);
} }
@@ -686,8 +685,7 @@ a:hover
border: 1px solid var(--line); border: 1px solid var(--line);
box-shadow: var(--shadow); box-shadow: var(--shadow);
aspect-ratio: 3 / 4; aspect-ratio: 3 / 4;
object-fit: contain; object-fit: cover;
object-position: center;
background: var(--bg-elevated); background: var(--bg-elevated);
} }
-58
View File
@@ -5,69 +5,12 @@ document.addEventListener("DOMContentLoaded", () =>
const zoneResultats = document.getElementById("resultatsApi"); const zoneResultats = document.getElementById("resultatsApi");
const formAppliquer = document.getElementById("formAppliquerApi"); const formAppliquer = document.getElementById("formAppliquerApi");
const champRawgId = document.getElementById("rawgId"); const champRawgId = document.getElementById("rawgId");
const formJeu = document.getElementById("formJeu");
if (!boutonRecherche || !champRecherche || !zoneResultats) if (!boutonRecherche || !champRecherche || !zoneResultats)
{ {
return; return;
} }
const collecterChampsFormulaire = () =>
{
if (!formJeu || !formAppliquer)
{
return;
}
formAppliquer.querySelectorAll("[data-from-form]").forEach((element) =>
{
element.remove();
});
const noms = [
"titre",
"description",
"dateSortie",
"genres",
"editeur",
"developpeur",
"jaquette",
"consoleId",
"etat",
"notes",
"sourceEnrichissement"
];
noms.forEach((nom) =>
{
const champ = formJeu.elements.namedItem(nom);
if (!champ || typeof champ.value !== "string")
{
return;
}
const cache = document.createElement("input");
cache.type = "hidden";
cache.name = nom;
cache.value = champ.value;
cache.setAttribute("data-from-form", "1");
formAppliquer.appendChild(cache);
});
const formats = formJeu.querySelectorAll('input[name="formats[]"]:checked');
formats.forEach((caseCochee) =>
{
const cache = document.createElement("input");
cache.type = "hidden";
cache.name = "formats[]";
cache.value = caseCochee.value;
cache.setAttribute("data-from-form", "1");
formAppliquer.appendChild(cache);
});
};
const lancerRecherche = async () => const lancerRecherche = async () =>
{ {
const terme = champRecherche.value.trim(); const terme = champRecherche.value.trim();
@@ -141,7 +84,6 @@ document.addEventListener("DOMContentLoaded", () =>
return; return;
} }
collecterChampsFormulaire();
champRawgId.value = String(jeu.rawgId); champRawgId.value = String(jeu.rawgId);
formAppliquer.submit(); formAppliquer.submit();
}); });
+13 -171
View File
@@ -98,7 +98,6 @@ final class JeuController
try try
{ {
$donnees = $this->collecterDonneesFormulaire(); $donnees = $this->collecterDonneesFormulaire();
$donnees = $this->appliquerUploadJaquette($donnees);
$donnees = $this->completerJaquetteSiAbsente($donnees); $donnees = $this->completerJaquetteSiAbsente($donnees);
$jeu = $this->jeuService->creer($utilisateur["id"], $donnees); $jeu = $this->jeuService->creer($utilisateur["id"], $donnees);
Flash::definir("success", "Jeu ajouté à votre bibliothèque."); Flash::definir("success", "Jeu ajouté à votre bibliothèque.");
@@ -141,7 +140,6 @@ final class JeuController
try try
{ {
$donnees = $this->collecterDonneesFormulaire(); $donnees = $this->collecterDonneesFormulaire();
$donnees = $this->appliquerUploadJaquette($donnees);
$donnees = $this->completerJaquetteSiAbsente($donnees); $donnees = $this->completerJaquetteSiAbsente($donnees);
$jeu = $this->jeuService->modifier($id, $utilisateur["id"], $donnees); $jeu = $this->jeuService->modifier($id, $utilisateur["id"], $donnees);
Flash::definir("success", "Jeu mis à jour."); Flash::definir("success", "Jeu mis à jour.");
@@ -153,13 +151,9 @@ final class JeuController
$jeu = array_merge($jeu, $_POST); $jeu = array_merge($jeu, $_POST);
} }
} }
else
{
$jeu = $this->appliquerPrefillGetSurJeu($jeu);
}
View::rendre("jeux/formulaire", [ View::rendre("jeux/formulaire", [
"titrePage" => "Modifier " . ($jeu["titre"] ?? "jeu"), "titrePage" => "Modifier " . $jeu["titre"],
"utilisateur" => $utilisateur, "utilisateur" => $utilisateur,
"jeu" => $jeu, "jeu" => $jeu,
"consoles" => $consoles, "consoles" => $consoles,
@@ -225,77 +219,21 @@ final class JeuController
Helpers::rediriger($retour); Helpers::rediriger($retour);
} }
$existants = [ $jaquette = $this->enrichissementService->telechargerJaquette($detail["jaquetteUrl"] ?? null);
"titre" => Helpers::champ("titre"),
"description" => Helpers::champ("description"),
"dateSortie" => Helpers::champ("dateSortie"),
"genres" => Helpers::champ("genres"),
"editeur" => Helpers::champ("editeur"),
"developpeur" => Helpers::champ("developpeur"),
"jaquette" => Helpers::champ("jaquette"),
"consoleId" => Helpers::champ("consoleId"),
"etat" => Helpers::champ("etat"),
"notes" => Helpers::champ("notes"),
"formats" => isset($_POST["formats"]) && is_array($_POST["formats"])
? Helpers::normaliserFormats($_POST["formats"])
: []
];
$depuisApi = [
"titre" => (string) ($detail["titre"] ?? ""),
"description" => (string) ($detail["description"] ?? ""),
"dateSortie" => (string) ($detail["dateSortie"] ?? ""),
"genres" => implode(", ", $detail["genres"] ?? []),
"editeur" => (string) ($detail["editeur"] ?? ""),
"developpeur" => (string) ($detail["developpeur"] ?? "")
];
$fusion = [];
foreach ($depuisApi as $cle => $valeurApi)
{
$valeurActuelle = trim((string) ($existants[$cle] ?? ""));
$fusion[$cle] = $valeurActuelle !== "" ? $valeurActuelle : trim($valeurApi);
}
$fusion["consoleId"] = $existants["consoleId"];
$fusion["etat"] = $existants["etat"] !== "" ? $existants["etat"] : "possede";
$fusion["notes"] = $existants["notes"];
$fusion["formats"] = $existants["formats"];
if (!Helpers::jaquetteAbsente($existants["jaquette"]))
{
$fusion["jaquette"] = $existants["jaquette"];
}
else
{
$jaquette = $this->enrichissementService->telechargerJaquette($detail["jaquetteUrl"] ?? null);
$fusion["jaquette"] = $jaquette ?? "";
}
$fusion["sourceEnrichissement"] = !Helpers::jaquetteAbsente($fusion["jaquette"] ?? null)
|| $fusion["description"] !== ""
|| $fusion["dateSortie"] !== ""
? "api"
: (Helpers::champ("sourceEnrichissement", "manuel"));
$query = http_build_query([ $query = http_build_query([
"titre" => $fusion["titre"], "titre" => $detail["titre"] ?? "",
"description" => $fusion["description"], "description" => $detail["description"] ?? "",
"dateSortie" => $fusion["dateSortie"], "dateSortie" => $detail["dateSortie"] ?? "",
"genres" => $fusion["genres"], "genres" => implode(", ", $detail["genres"] ?? []),
"editeur" => $fusion["editeur"], "editeur" => $detail["editeur"] ?? "",
"developpeur" => $fusion["developpeur"], "developpeur" => $detail["developpeur"] ?? "",
"jaquette" => $fusion["jaquette"], "jaquette" => $jaquette ?? "",
"consoleId" => $fusion["consoleId"], "sourceEnrichissement" => "api"
"etat" => $fusion["etat"],
"notes" => $fusion["notes"],
"formats" => $fusion["formats"],
"sourceEnrichissement" => $fusion["sourceEnrichissement"]
]); ]);
$cheminRetour = parse_url($retour, PHP_URL_PATH) ?: "/jeux/creer"; $separateur = str_contains($retour, "?") ? "&" : "?";
Helpers::rediriger($cheminRetour . "?" . $query); Helpers::rediriger($retour . $separateur . $query);
} }
public function recupererJaquette(string $id): void public function recupererJaquette(string $id): void
@@ -342,56 +280,6 @@ final class JeuController
Helpers::rediriger("/jeux/" . $id); Helpers::rediriger("/jeux/" . $id);
} }
public function envoyerJaquette(string $id): void
{
$utilisateur = $this->auth->exigerConnexion();
Csrf::exiger();
$jeu = $this->jeuService->trouverPourUtilisateur($id, $utilisateur["id"]);
if ($jeu === null)
{
Flash::definir("danger", "Jeu introuvable.");
Helpers::rediriger("/jeux");
}
try
{
$this->jeuService->remplacerJaquette(
$id,
$utilisateur["id"],
$_FILES["jaquetteFichier"] ?? []
);
Flash::definir("success", "Jaquette remplacée.");
}
catch (InvalidArgumentException | RuntimeException $exception)
{
Flash::definir("danger", $exception->getMessage());
}
Helpers::rediriger("/jeux/" . $id);
}
private function appliquerUploadJaquette(array $donnees): array
{
$fichier = $_FILES["jaquetteFichier"] ?? null;
if (!is_array($fichier) || (($fichier["error"] ?? UPLOAD_ERR_NO_FILE) === UPLOAD_ERR_NO_FILE))
{
return $donnees;
}
$nomFichier = ImageUpload::enregistrer(
$fichier,
Config::get("jaquettesPath")
);
$donnees["jaquette"] = $nomFichier;
$donnees["sourceEnrichissement"] = "manuel";
return $donnees;
}
private function completerJaquetteSiAbsente(array $donnees): array private function completerJaquetteSiAbsente(array $donnees): array
{ {
if (!Helpers::jaquetteAbsente($donnees["jaquette"] ?? null)) if (!Helpers::jaquetteAbsente($donnees["jaquette"] ?? null))
@@ -440,18 +328,12 @@ final class JeuController
private function construirePrefillDepuisGet(): array private function construirePrefillDepuisGet(): array
{ {
$genres = Helpers::champ("genres"); $genres = Helpers::champ("genres");
$formats = $_GET["formats"] ?? [];
if (!is_array($formats))
{
$formats = [];
}
return [ return [
"titre" => Helpers::champ("titre"), "titre" => Helpers::champ("titre"),
"consoleId" => Helpers::champ("consoleId"), "consoleId" => Helpers::champ("consoleId"),
"etat" => Helpers::champ("etat", "possede"), "etat" => Helpers::champ("etat", "possede"),
"formats" => Helpers::normaliserFormats($formats), "formats" => [],
"jaquette" => Helpers::champ("jaquette"), "jaquette" => Helpers::champ("jaquette"),
"description" => Helpers::champ("description"), "description" => Helpers::champ("description"),
"dateSortie" => Helpers::champ("dateSortie"), "dateSortie" => Helpers::champ("dateSortie"),
@@ -462,44 +344,4 @@ final class JeuController
"sourceEnrichissement" => Helpers::champ("sourceEnrichissement", "manuel") "sourceEnrichissement" => Helpers::champ("sourceEnrichissement", "manuel")
]; ];
} }
private function appliquerPrefillGetSurJeu(array $jeu): array
{
if (empty($_GET))
{
return $jeu;
}
$prefill = $this->construirePrefillDepuisGet();
foreach ($prefill as $cle => $valeur)
{
if ($cle === "formats")
{
if ($valeur !== [])
{
$jeu[$cle] = $valeur;
}
continue;
}
if ($cle === "genres")
{
if ($valeur !== [])
{
$jeu[$cle] = $valeur;
}
continue;
}
if (is_string($valeur) && trim($valeur) !== "")
{
$jeu[$cle] = $valeur;
}
}
return $jeu;
}
} }
-42
View File
@@ -132,7 +132,6 @@ final class JeuService
throw new RuntimeException("Jeu introuvable."); throw new RuntimeException("Jeu introuvable.");
} }
$ancienneJaquette = $existant["jaquette"] ?? null;
$jeu = $this->preparerDonnees($utilisateurId, $donnees, $existant); $jeu = $this->preparerDonnees($utilisateurId, $donnees, $existant);
$jeu["updatedAt"] = Helpers::maintenant(); $jeu["updatedAt"] = Helpers::maintenant();
@@ -143,47 +142,6 @@ final class JeuService
throw new RuntimeException("Échec de la mise à jour."); throw new RuntimeException("Échec de la mise à jour.");
} }
$nouvelleJaquette = $miseAJour["jaquette"] ?? null;
if (
$ancienneJaquette !== null
&& $ancienneJaquette !== ""
&& $ancienneJaquette !== $nouvelleJaquette
)
{
$this->supprimerJaquetteLocale($ancienneJaquette);
}
return $miseAJour;
}
public function remplacerJaquette(string $id, string $utilisateurId, array $fichier): array
{
$jeu = $this->trouverPourUtilisateur($id, $utilisateurId);
if ($jeu === null)
{
throw new RuntimeException("Jeu introuvable.");
}
$nouvelleJaquette = ImageUpload::enregistrer(
$fichier,
Config::get("jaquettesPath")
);
$this->supprimerJaquetteLocale($jeu["jaquette"] ?? null);
$miseAJour = $this->store->mettreAJour($id, [
"jaquette" => $nouvelleJaquette,
"sourceEnrichissement" => "manuel",
"updatedAt" => Helpers::maintenant()
]);
if ($miseAJour === null)
{
throw new RuntimeException("Échec de la mise à jour de la jaquette.");
}
return $miseAJour; return $miseAJour;
} }
-1
View File
@@ -77,7 +77,6 @@ $router->get("/jeux/{id}", [$jeuController, "detail"]);
$router->get("/jeux/{id}/modifier", [$jeuController, "modifier"]); $router->get("/jeux/{id}/modifier", [$jeuController, "modifier"]);
$router->post("/jeux/{id}/modifier", [$jeuController, "modifier"]); $router->post("/jeux/{id}/modifier", [$jeuController, "modifier"]);
$router->post("/jeux/{id}/jaquette", [$jeuController, "recupererJaquette"]); $router->post("/jeux/{id}/jaquette", [$jeuController, "recupererJaquette"]);
$router->post("/jeux/{id}/jaquette/upload", [$jeuController, "envoyerJaquette"]);
$router->post("/jeux/{id}/supprimer", [$jeuController, "supprimer"]); $router->post("/jeux/{id}/supprimer", [$jeuController, "supprimer"]);
$router->get("/admin/utilisateurs", [$adminController, "index"]); $router->get("/admin/utilisateurs", [$adminController, "index"]);
-27
View File
@@ -43,33 +43,6 @@
</button> </button>
</form> </form>
</div> </div>
<form
method="post"
action="/jeux/<?php print Helpers::echapper($jeu["id"]); ?>/jaquette/upload"
enctype="multipart/form-data"
class="photo-upload-bar mt-4"
>
<?php print Csrf::champCache(); ?>
<label class="form-label" for="jaquetteFichier">
<i class="mdi mdi-image-edit-outline"></i>
<?php print !empty($jaquetteAbsente) ? "Envoyer une jaquette" : "Remplacer la jaquette"; ?>
</label>
<div class="photo-upload-row">
<input
type="file"
class="form-control"
id="jaquetteFichier"
name="jaquetteFichier"
accept="image/jpeg,image/png,image/webp,image/gif,image/*"
required
>
<button type="submit" class="btn btn-neon">
<i class="mdi mdi-upload"></i> Envoyer
</button>
</div>
<div class="form-text">Choisissez une image (JPG, PNG, WebP, GIF — 5 Mo max) pour corriger une jaquette incorrecte.</div>
</form>
</div> </div>
</section> </section>
+1 -10
View File
@@ -40,7 +40,7 @@ $retourEnrichissement = $action;
</div> </div>
<?php endif; ?> <?php endif; ?>
<form method="post" action="<?php print Helpers::echapper($action); ?>" class="form-panel" id="formJeu" enctype="multipart/form-data"> <form method="post" action="<?php print Helpers::echapper($action); ?>" class="form-panel" id="formJeu">
<?php print Csrf::champCache(); ?> <?php print Csrf::champCache(); ?>
<input type="hidden" name="jaquette" id="jaquette" value="<?php print Helpers::echapper($jeu["jaquette"] ?? ""); ?>"> <input type="hidden" name="jaquette" id="jaquette" value="<?php print Helpers::echapper($jeu["jaquette"] ?? ""); ?>">
<input type="hidden" name="sourceEnrichissement" id="sourceEnrichissement" value="<?php print Helpers::echapper($jeu["sourceEnrichissement"] ?? "manuel"); ?>"> <input type="hidden" name="sourceEnrichissement" id="sourceEnrichissement" value="<?php print Helpers::echapper($jeu["sourceEnrichissement"] ?? "manuel"); ?>">
@@ -54,15 +54,6 @@ $retourEnrichissement = $action;
alt="Aperçu de la jaquette" alt="Aperçu de la jaquette"
> >
</div> </div>
<label class="form-label mt-3" for="jaquetteFichier">Remplacer par une image</label>
<input
type="file"
class="form-control"
id="jaquetteFichier"
name="jaquetteFichier"
accept="image/jpeg,image/png,image/webp,image/gif,image/*"
>
<div class="form-text">Optionnel — JPG, PNG, WebP ou GIF (5 Mo max).</div>
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
<div class="row g-3"> <div class="row g-3">
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.