117 lines
4.5 KiB
PHP
117 lines
4.5 KiB
PHP
<?php
|
|
// On démarre la session
|
|
require_once(__DIR__ . '/../functions/security.php');
|
|
// On ajoute la DB
|
|
require_once('../functions/databaseConnection.php');
|
|
// On ajoute les logs Discord
|
|
require_once('../functions/sendLogs.php');
|
|
require_once('../functions/pdfUpload.php');
|
|
|
|
// Si l'utilisateur n'est pas admin il ne peut pas executer le reste du script
|
|
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
|
|
header('Location: ../pages/home.php');
|
|
exit;
|
|
}
|
|
|
|
// Vérification du jeton CSRF : bloque les requêtes forgées depuis un autre site
|
|
requireCsrfToken();
|
|
|
|
// Le fichier envoyé dépasse post_max_size : $_POST/$_FILES sont vides, on le détecte
|
|
// tout de suite (sinon le script redirige silencieusement vers admin.php sans explication)
|
|
if (postDepasseLimite()) {
|
|
die(messageDepassementPost());
|
|
}
|
|
|
|
// Si le formulaire à un champ vide
|
|
if (
|
|
!isset($_POST['id']) || !is_numeric($_POST['id']) ||
|
|
empty($_POST['title']) ||
|
|
empty($_POST['xptype']) ||
|
|
empty($_POST['description']) ||
|
|
empty($_POST['duration']) ||
|
|
empty($_POST['imageurl'])
|
|
) { // On renvoie sur admin.php
|
|
header('Location: ../pages/admin.php');
|
|
exit;
|
|
}
|
|
|
|
//On récupère les données pour les mettres en variables locales
|
|
$id = (int) $_POST['id'];
|
|
$title = trim($_POST['title']);
|
|
$status = trim($_POST['status'] ?? '');
|
|
$xptype = trim($_POST['xptype']);
|
|
$tags = trim($_POST['tags'] ?? '');
|
|
$description = trim($_POST['description']);
|
|
$duration = trim($_POST['duration']);
|
|
$imageurl = trim($_POST['imageurl']);
|
|
$markdown = trim($_POST['markdown'] ?? '');
|
|
$link_url = trim($_POST['linkurl'] ?? '');
|
|
|
|
// Lecture et validation du PDF envoyé (optionnel)
|
|
$pdfResultat = lireUploadPdf('pdf');
|
|
if (is_string($pdfResultat)) {
|
|
echo $pdfResultat;
|
|
exit;
|
|
}
|
|
|
|
// Le PDF n'est mis à jour que si un nouveau fichier est envoyé OU si la case
|
|
// "Supprimer ce PDF" est cochée. Sinon on garde le PDF actuel intact.
|
|
$updatePdf = false;
|
|
$pdfData = null;
|
|
$pdfFilename = null;
|
|
if (is_array($pdfResultat)) {
|
|
$updatePdf = true;
|
|
$pdfData = $pdfResultat['data'];
|
|
$pdfFilename = $pdfResultat['filename'];
|
|
} elseif (isset($_POST['remove_pdf'])) {
|
|
$updatePdf = true;
|
|
}
|
|
|
|
try { // On essaie d'executer une requête qui est préparée
|
|
// Le PDF (pdf_data) n'est plus stocké dans experiences : il vit dans experience_pdfs
|
|
// (table associée, voir migration Juillet 2026 (6)), géré à part juste après
|
|
$stmt = $dbh->prepare('
|
|
UPDATE experiences
|
|
SET title = :title, status = :status, xptype = :xptype, tags = :tags, description = :description, duration = :duration, image_url = :image_url, markdown = :markdown, link_url = :link_url
|
|
WHERE id = :id
|
|
');
|
|
$stmt->bindValue(':title', $title, PDO::PARAM_STR);
|
|
$stmt->bindValue(':status', $status, PDO::PARAM_STR);
|
|
$stmt->bindValue(':xptype', $xptype, PDO::PARAM_STR);
|
|
$stmt->bindValue(':tags', $tags, PDO::PARAM_STR);
|
|
$stmt->bindValue(':description', $description, PDO::PARAM_STR);
|
|
$stmt->bindValue(':duration', $duration, PDO::PARAM_STR);
|
|
$stmt->bindValue(':image_url', $imageurl, PDO::PARAM_STR);
|
|
$stmt->bindValue(':markdown', $markdown, PDO::PARAM_STR);
|
|
$stmt->bindValue(':link_url', $link_url, PDO::PARAM_STR);
|
|
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
|
|
$stmt->execute(); // Sinon on renvoie l'erreur
|
|
|
|
if ($updatePdf) {
|
|
if ($pdfData !== null) {
|
|
// Nouveau PDF envoyé : on remplace l'éventuel PDF existant (clé primaire = experience_id)
|
|
$stmtPdf = $dbh->prepare('
|
|
INSERT INTO experience_pdfs (experience_id, pdf_filename, pdf_data) VALUES (:id, :pdf_filename, :pdf_data)
|
|
ON DUPLICATE KEY UPDATE pdf_filename = VALUES(pdf_filename), pdf_data = VALUES(pdf_data)
|
|
');
|
|
$stmtPdf->bindValue(':id', $id, PDO::PARAM_INT);
|
|
$stmtPdf->bindValue(':pdf_filename', $pdfFilename, PDO::PARAM_STR);
|
|
$stmtPdf->bindValue(':pdf_data', $pdfData, PDO::PARAM_LOB);
|
|
$stmtPdf->execute();
|
|
} else {
|
|
// Case "Supprimer ce PDF" cochée, sans nouveau fichier envoyé
|
|
$stmtPdf = $dbh->prepare('DELETE FROM experience_pdfs WHERE experience_id = :id');
|
|
$stmtPdf->bindValue(':id', $id, PDO::PARAM_INT);
|
|
$stmtPdf->execute();
|
|
}
|
|
}
|
|
} catch (PDOException $e) {
|
|
die("Erreur lors de la modification de l experience :" . $e->getMessage());
|
|
}
|
|
|
|
// Log Discord
|
|
sendLog("Modification de l'expérience : " . $title . " (id " . $id . ")");
|
|
|
|
// On renvoie l'utilisateur sur admin.php
|
|
header('Location: ../pages/admin.php');
|
|
exit; |