Compare commits
2
Commits
3235bc50c7
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dcd315489a | ||
|
|
36efa036a5 |
No files matched your search
@@ -342,7 +342,8 @@ a:hover
|
|||||||
{
|
{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
aspect-ratio: 3 / 4;
|
aspect-ratio: 3 / 4;
|
||||||
object-fit: cover;
|
object-fit: contain;
|
||||||
|
object-position: center;
|
||||||
background: var(--bg-elevated);
|
background: var(--bg-elevated);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -685,7 +686,8 @@ 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: cover;
|
object-fit: contain;
|
||||||
|
object-position: center;
|
||||||
background: var(--bg-elevated);
|
background: var(--bg-elevated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,12 +5,69 @@ 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();
|
||||||
@@ -84,6 +141,7 @@ document.addEventListener("DOMContentLoaded", () =>
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
collecterChampsFormulaire();
|
||||||
champRawgId.value = String(jeu.rawgId);
|
champRawgId.value = String(jeu.rawgId);
|
||||||
formAppliquer.submit();
|
formAppliquer.submit();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ 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.");
|
||||||
@@ -140,6 +141,7 @@ 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.");
|
||||||
@@ -151,9 +153,13 @@ 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"],
|
"titrePage" => "Modifier " . ($jeu["titre"] ?? "jeu"),
|
||||||
"utilisateur" => $utilisateur,
|
"utilisateur" => $utilisateur,
|
||||||
"jeu" => $jeu,
|
"jeu" => $jeu,
|
||||||
"consoles" => $consoles,
|
"consoles" => $consoles,
|
||||||
@@ -219,21 +225,77 @@ final class JeuController
|
|||||||
Helpers::rediriger($retour);
|
Helpers::rediriger($retour);
|
||||||
}
|
}
|
||||||
|
|
||||||
$jaquette = $this->enrichissementService->telechargerJaquette($detail["jaquetteUrl"] ?? null);
|
$existants = [
|
||||||
|
"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" => $detail["titre"] ?? "",
|
"titre" => $fusion["titre"],
|
||||||
"description" => $detail["description"] ?? "",
|
"description" => $fusion["description"],
|
||||||
"dateSortie" => $detail["dateSortie"] ?? "",
|
"dateSortie" => $fusion["dateSortie"],
|
||||||
"genres" => implode(", ", $detail["genres"] ?? []),
|
"genres" => $fusion["genres"],
|
||||||
"editeur" => $detail["editeur"] ?? "",
|
"editeur" => $fusion["editeur"],
|
||||||
"developpeur" => $detail["developpeur"] ?? "",
|
"developpeur" => $fusion["developpeur"],
|
||||||
"jaquette" => $jaquette ?? "",
|
"jaquette" => $fusion["jaquette"],
|
||||||
"sourceEnrichissement" => "api"
|
"consoleId" => $fusion["consoleId"],
|
||||||
|
"etat" => $fusion["etat"],
|
||||||
|
"notes" => $fusion["notes"],
|
||||||
|
"formats" => $fusion["formats"],
|
||||||
|
"sourceEnrichissement" => $fusion["sourceEnrichissement"]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$separateur = str_contains($retour, "?") ? "&" : "?";
|
$cheminRetour = parse_url($retour, PHP_URL_PATH) ?: "/jeux/creer";
|
||||||
Helpers::rediriger($retour . $separateur . $query);
|
Helpers::rediriger($cheminRetour . "?" . $query);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function recupererJaquette(string $id): void
|
public function recupererJaquette(string $id): void
|
||||||
@@ -280,6 +342,56 @@ 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))
|
||||||
@@ -328,12 +440,18 @@ 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" => [],
|
"formats" => Helpers::normaliserFormats($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"),
|
||||||
@@ -344,4 +462,44 @@ 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -132,6 +132,7 @@ 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();
|
||||||
|
|
||||||
@@ -142,6 +143,47 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ $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"]);
|
||||||
|
|||||||
@@ -43,6 +43,33 @@
|
|||||||
</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>
|
||||||
|
|
||||||
|
|||||||
@@ -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">
|
<form method="post" action="<?php print Helpers::echapper($action); ?>" class="form-panel" id="formJeu" enctype="multipart/form-data">
|
||||||
<?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,6 +54,15 @@ $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">
|
||||||
|
|||||||