Gestion des ajouts; Stockage dans le dossier Photos/ (En cours)

This commit is contained in:
Erwann PHILIPPE 2026-03-04 14:26:06 +01:00
parent 17b62e082c
commit ff9de38dff
9 changed files with 428 additions and 35 deletions

2
.gitignore vendored
View file

@ -1 +1,3 @@
tests/ tests/
uploads/
Photos

View file

@ -1,5 +1,6 @@
{ {
"BDD_USER": "root", "BDD_USER": "root",
"BDD_PASSWD": "root", "BDD_PASSWD": "root",
"BDD_NAME": "intranet" "BDD_NAME": "intranet",
"LOCAL_IMG_PREFIXE": "./Photos/INTRANET/"
} }

View file

@ -210,3 +210,35 @@ function verifyPoids($bdd, $username, $minPoids) {
return false; return false;
} }
function updateEventTitle($bdd, $eventid, $titre){
$stmt = mysqli_prepare(
$bdd,
"UPDATE evenements SET titre = ? WHERE id = ?"
);
mysqli_stmt_bind_param($stmt, "si", $titre, $eventid);
mysqli_stmt_execute($stmt);
$success = mysqli_stmt_affected_rows($stmt) >= 0;
mysqli_stmt_close($stmt);
return $success;
}
function updateEventImage($bdd, $eventId, $newFileName){
$stmt = mysqli_prepare(
$bdd,
"UPDATE evenements SET couverture = ? WHERE id = ?"
);
mysqli_stmt_bind_param($stmt, "si", $newFileName, $eventId);
mysqli_stmt_execute($stmt);
$success = mysqli_stmt_affected_rows($stmt) >= 0;
mysqli_stmt_close($stmt);
return $success;
}

View file

@ -22,6 +22,8 @@ if (!verifyPoids($bdd, $_SESSION['username'], $minPoids)) {
header('location: ../index.php'); header('location: ../index.php');
} }
$uploadDir = "../uploads/";
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="fr"> <html lang="fr">
@ -62,7 +64,7 @@ if (!verifyPoids($bdd, $_SESSION['username'], $minPoids)) {
<?php foreach ($events as $event): ?> <?php foreach ($events as $event): ?>
<div class="card" onclick="window.location.href='./modifyEvent.php?id=<?= $event['id'] ?>'"> <div class="card" onclick="window.location.href='./modifyEvent.php?id=<?= $event['id'] ?>'">
<h4><?= $event['titre'] ?></h4> <h4><?= $event['titre'] ?></h4>
<img src="<?= $event['couverture'] ?>" alt="Image de couverture"> <img src="<?= $uploadDir . $event['couverture'] ?>" alt="Image de couverture">
Modifier Modifier
</div> </div>
<?php endforeach ?> <?php endforeach ?>

View file

@ -1,31 +1,66 @@
<?php <?php
include("../Assets/functions.php"); include("../Assets/functions.php");
$config = json_decode(file_get_contents("../Assets/config.json"), true); $config = json_decode(file_get_contents("../Assets/config.json"), true);
$bdd = connectBDD("localhost", $config["BDD_USER"], $config["BDD_PASSWD"], $config["BDD_NAME"]); $bdd = connectBDD("localhost", $config["BDD_USER"], $config["BDD_PASSWD"], $config["BDD_NAME"]);
$page = 'photos'; $page = 'photos';
/* Gestion de la connexion */
session_start(); session_start();
if (!isset($_SESSION['connected']) || $_SESSION['connected'] == false) { if (!isset($_SESSION['connected']) || $_SESSION['connected'] == false) {
header('location: login.php?redirect_to=./admin/'); header('location: login.php?redirect_to=./admin/');
exit;
} }
$events = getEvenements($bdd, $_SESSION['site']);
/* Récupération des infos */
$permissions = $_SESSION['permission'];
$site = $_SESSION['site'];
/* Gestion de l'accès à la page */
$minPoids = 45; $minPoids = 45;
if (!verifyPoids($bdd, $_SESSION['username'], $minPoids)) { if (!verifyPoids($bdd, $_SESSION['username'], $minPoids)) {
header('location: ../index.php'); header('location: ../index.php');
exit;
} }
/* Récupération des infos de l'évènement */ $eventId = $_GET['id'] ?? null;
$titre = getEventName($bdd, $_GET['id']) ?? 'Titre?'; if (!$eventId) {
die("ID évènement manquant.");
}
$titre = getEventName($bdd, $eventId) ?? '';
$couverture = getEventBigImage($bdd, $eventId) ?? '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!empty($_POST['title'])) {
updateEventTitle($bdd, $eventId, trim($_POST['title']));
}
if (!empty($_FILES['couverture']['name'])) {
$uploadDir = "../uploads/";
$fileTmpPath = $_FILES["couverture"]["tmp_name"];
$fileSize = $_FILES["couverture"]["size"];
/* Vérification MIME réelle */
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $fileTmpPath);
finfo_close($finfo);
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (in_array($mime, $allowedTypes) && $fileSize <= 5 * 1024 * 1024) {
$extension = pathinfo($_FILES["couverture"]["name"], PATHINFO_EXTENSION);
$newFileName = "event_" . $eventId . "_" . time() . "." . $extension;
$destination = $uploadDir . $newFileName;
if (move_uploaded_file($fileTmpPath, $destination)) {
if (!empty($couverture) && file_exists($uploadDir . $couverture)) {
unlink($uploadDir . $couverture);
}
updateEventImage($bdd, $eventId, $newFileName);
}
}
}
header("Location: ?id=" . $eventId);
exit;
}
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="fr"> <html lang="fr">
@ -33,18 +68,33 @@ $titre = getEventName($bdd, $_GET['id']) ?? 'Titre?';
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Gestion Intranet</title> <title>Gestion Intranet</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../styles-scripts/index.admin.css">
<style>
.preview-box {
height: 220px;
border: 2px dashed #ddd;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
background: #fafafa;
}
.preview-box img {
max-height: 100%;
max-width: 100%;
}
</style>
</head> </head>
<body> <body class="container py-4">
<h1>Gestion de l'intranet</h1>
<!-- navbar -->
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent"> <h1>Gestion de l'intranet</h1>
<nav class="navbar navbar-expand-lg navbar-light bg-light mb-4">
<div class="collapse navbar-collapse">
<ul class="navbar-nav mr-auto"> <ul class="navbar-nav mr-auto">
<li class="nav-item"> <li class="nav-item">
<a href="./index.php" class="nav-link">Évènements</a> <a href="./index.php" class="nav-link">Évènements</a>
@ -59,10 +109,85 @@ $titre = getEventName($bdd, $_GET['id']) ?? 'Titre?';
</div> </div>
</nav> </nav>
<form action="" method="get"> <ul class="nav nav-tabs mb-3">
<label for="title">Titre de l'évènement</label> <li class="nav-item">
<input type="text" name="title" id="title" <?= ($titre ?? '') ? 'value=\''.$titre.'\'' : '' ?>> <a class="nav-link active"
</form> href="modifyEvent.php?id=<?= $eventId ?>">
Général
</a>
</li>
<li class="nav-item">
<a class="nav-link"
href="modifyGallery.php?id=<?= $eventId ?>">
Galerie
</a>
</li>
</ul>
<div class="card p-4">
<form action="" method="post" enctype="multipart/form-data">
<div class="mb-3">
<label class="form-label">Titre de l'évènement</label>
<input type="text"
name="title"
class="form-control"
value="<?= htmlspecialchars($titre) ?>">
</div>
<div class="mb-3">
<label class="form-label">Image actuelle</label><br>
<?php if (!empty($couverture)) : ?>
<img src="../uploads/<?= htmlspecialchars($couverture) ?>"
style="max-width:300px; margin-bottom:15px;">
<?php else : ?>
<p class="text-muted">Aucune image définie</p>
<?php endif; ?>
</div>
<div class="mb-3">
<label class="form-label">Nouvelle image de couverture</label>
<div id="preview" class="preview-box mb-2">
<span class="text-muted">Aucune image sélectionnée</span>
</div>
<input type="file"
name="couverture"
id="couverture"
class="form-control"
accept="image/*">
</div>
<button type="submit" class="btn btn-primary">
Enregistrer les modifications
</button>
</form>
</div>
<script>
const input = document.getElementById('couverture');
const preview = document.getElementById('preview');
input.addEventListener('change', function() {
const file = this.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
preview.innerHTML =
`<img src="${e.target.result}" alt="Preview">`;
};
reader.readAsDataURL(file);
}
});
</script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body> </body>

223
admin/modifyGallery.php Normal file
View file

@ -0,0 +1,223 @@
<?php
include("../Assets/functions.php");
$config = json_decode(file_get_contents("../Assets/config.json"), true);
$bdd = connectBDD("localhost", $config["BDD_USER"], $config["BDD_PASSWD"], $config["BDD_NAME"]);
session_start();
if (!isset($_SESSION['connected']) || $_SESSION['connected'] == false) {
header('location: login.php?redirect_to=./admin/');
exit;
}
$minPoids = 45;
if (!verifyPoids($bdd, $_SESSION['username'], $minPoids)) {
header('location: ../index.php');
exit;
}
$eventId = $_GET['id'] ?? null;
if (!$eventId) {
die("ID évènement manquant.");
}
$uploadDir = "../Photos/gallerie/";
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!empty($_FILES['images']['name'][0])) {
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
foreach ($_FILES['images']['tmp_name'] as $key => $tmpName) {
$fileSize = $_FILES['images']['size'][$key];
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $tmpName);
finfo_close($finfo);
if (in_array($mime, $allowedTypes) && $fileSize <= 5 * 1024 * 1024) {
$extension = pathinfo($_FILES['images']['name'][$key], PATHINFO_EXTENSION);
$newFileName = "gallery_" . $eventId . "_" . time() . "_" . $key . "." . $extension;
if (move_uploaded_file($tmpName, $uploadDir . $newFileName)) {
mysqli_query(
$bdd,
"INSERT INTO gallerie (event_id, chemin, texte)
VALUES ('$eventId','$newFileName','')"
);
}
}
}
}
header("Location: ?id=" . $eventId);
exit;
}
if (isset($_GET['delete'])) {
$file = basename($_GET['delete']);
mysqli_query(
$bdd,
"DELETE FROM gallerie
WHERE event_id='$eventId'
AND chemin='$file'"
);
if (file_exists($uploadDir . $file)) {
unlink($uploadDir . $file);
}
header("Location: ?id=" . $eventId);
exit;
}
$result = mysqli_query(
$bdd,
"SELECT chemin FROM gallerie WHERE event_id='$eventId'"
);
$images = [];
while ($row = mysqli_fetch_assoc($result)) {
$images[] = $row;
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Galerie évènement</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
.gallery-img {
height: 180px;
object-fit: cover;
}
</style>
</head>
<body class="container py-4">
<h1>Gestion de l'intranet</h1>
<nav class="navbar navbar-expand-lg navbar-light bg-light mb-4">
<div class="collapse navbar-collapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a href="./index.php" class="nav-link">Évènements</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Actualités</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link disabled">Administration</a>
</li>
</ul>
</div>
</nav>
<ul class="nav nav-tabs mb-4">
<li class="nav-item">
<a class="nav-link"
href="modifyEvent.php?id=<?= $eventId ?>">
Général
</a>
</li>
<li class="nav-item">
<a class="nav-link active">
Galerie
</a>
</li>
</ul>
<div class="card p-4 mb-4">
<form method="post" enctype="multipart/form-data">
<label class="form-label">Ajouter des images</label>
<input type="file"
name="images[]"
class="form-control mb-3"
multiple
accept="image/*">
<button class="btn btn-primary">
Uploader
</button>
</form>
</div>
<div class="row">
<?php foreach ($images as $img): ?>
<div class="col-md-3 mb-4">
<div class="card">
<img src="../Photos/gallerie/<?= htmlspecialchars($img['chemin']) ?>"
class="card-img-top gallery-img">
<div class="card-body text-center">
<a href="?id=<?= $eventId ?>&delete=<?= urlencode($img['chemin']) ?>"
class="btn btn-danger btn-sm"
onclick="return confirm('Supprimer cette image ?')">
Supprimer
</a>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

View file

@ -8,6 +8,8 @@ session_start();
if(!isset($_SESSION['connected']) || !isset($_SESSION['site']) || !$_SESSION['connected']){ if(!isset($_SESSION['connected']) || !isset($_SESSION['site']) || !$_SESSION['connected']){
header('location: ./event.php'); header('location: ./event.php');
} }
$prefixe = $config["LOCAL_IMG_PREFIXE"]."gallerie/";
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -29,7 +31,7 @@ if(!isset($_SESSION['connected']) || !isset($_SESSION['site']) || !$_SESSION['co
$images = getEventImages($bdd, $_GET['event']); $images = getEventImages($bdd, $_GET['event']);
foreach($images as $image): ?> foreach($images as $image): ?>
<div class="slide fade"> <div class="slide fade">
<img src="<?php echo $image["chemin"]; ?>" alt="Diapo"> <img src="<?php echo $prefixe.$image["chemin"]; ?>" alt="Diapo">
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>

View file

@ -15,6 +15,7 @@ if (!isset($_SESSION['connected']) || $_SESSION['connected'] == false) {
$titre = getEventName($bdd, $_GET['event']); $titre = getEventName($bdd, $_GET['event']);
$images = getEventImages($bdd, $_GET['event']); $images = getEventImages($bdd, $_GET['event']);
$couvertureImg = getEventBigImage($bdd, $_GET['event']); $couvertureImg = getEventBigImage($bdd, $_GET['event']);
$prefixe = $config["LOCAL_IMG_PREFIXE"]."gallerie/";
?> ?>
<!doctype html> <!doctype html>
@ -77,7 +78,7 @@ $couvertureImg = getEventBigImage($bdd, $_GET['event']);
<div class="custom-grid-container"> <div class="custom-grid-container">
<?php <?php
$nbColumns = 4; $nbColumns = 4;
$rowsPerColumn = 5; $rowsPerColumn = count($images)/3;
$columns = []; $columns = [];
/** /**
@ -116,7 +117,7 @@ $couvertureImg = getEventBigImage($bdd, $_GET['event']);
$placed = false; $placed = false;
foreach ($images as $img) { foreach ($images as $img) {
if (canPlace($columns, $col, $row, $img['chemin'])) { if (canPlace($columns, $col, $row, $prefixe . $img['chemin'])) {
$columns[$col][$row] = $img['chemin']; $columns[$col][$row] = $img['chemin'];
$placed = true; $placed = true;
break; break;
@ -124,7 +125,7 @@ $couvertureImg = getEventBigImage($bdd, $_GET['event']);
} }
if (!$placed && !empty($images)) { if (!$placed && !empty($images)) {
$columns[$col][$row] = $images[0]['chemin']; $columns[$col][$row] = $prefixe.$images[0]['chemin'];
} }
} }
} }
@ -133,7 +134,7 @@ $couvertureImg = getEventBigImage($bdd, $_GET['event']);
for ($col = 0; $col < $nbColumns; $col++): ?> for ($col = 0; $col < $nbColumns; $col++): ?>
<div class="custom-column"> <div class="custom-column">
<?php foreach ($columns[$col] as $imgPath): ?> <?php foreach ($columns[$col] as $imgPath): ?>
<img src="<?= $imgPath ?>" alt="Image évènement"> <img src="<?= $prefixe.$imgPath ?>" alt="Image évènement">
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>
<?php endfor; ?> <?php endfor; ?>

View file

@ -12,6 +12,7 @@ if(!isset($_SESSION['connected']) || $_SESSION['connected'] == false){
/* Récupération des évènements */ /* Récupération des évènements */
$evenements = getEvenements($bdd, $_SESSION['site']); $evenements = getEvenements($bdd, $_SESSION['site']);
$prefixe = $config['LOCAL_IMG_PREFIXE']
?> ?>
<!doctype html> <!doctype html>
@ -31,32 +32,36 @@ $evenements = getEvenements($bdd, $_SESSION['site']);
<div class="parent"> <div class="parent">
<div class="div1"> <div class="div1">
<?php $debut = str_starts_with($evenements[0]["couverture"], "http") ? '' : $prefixe; ?>
<a href="./event.php?event=<?= $evenements[0]["id"] ?>"> <a href="./event.php?event=<?= $evenements[0]["id"] ?>">
<img src="<?= $evenements[0]["couverture"] ?>" alt=""> <img src="<?= $debut . $evenements[0]["couverture"] ?>" alt="">
<div class="overlay"> <div class="overlay">
<p><?= $evenements[0]["titre"] ?></p> <p><?= $evenements[0]["titre"] ?></p>
</div> </div>
</a> </a>
</div> </div>
<div class="div2"> <div class="div2">
<?php $debut = str_starts_with($evenements[1]["couverture"], "http") ? '' : $prefixe; ?>
<a href="./event.php?event=<?= $evenements[1]["id"] ?>"> <a href="./event.php?event=<?= $evenements[1]["id"] ?>">
<img src="<?= $evenements[1]["couverture"] ?>" alt=""> <img src="<?= $debut . $evenements[1]["couverture"] ?>" alt="">
<div class="overlay"> <div class="overlay">
<p><?= $evenements[1]["titre"] ?></p> <p><?= $evenements[1]["titre"] ?></p>
</div> </div>
</a> </a>
</div> </div>
<div class="div3"> <div class="div3">
<?php $debut = str_starts_with($evenements[2]["couverture"], "http") ? '' : $prefixe; ?>
<a href="./event.php?event=<?= $evenements[2]["id"] ?>"> <a href="./event.php?event=<?= $evenements[2]["id"] ?>">
<img src="<?= $evenements[2]["couverture"] ?>" alt=""> <img src="<?= $debut . $evenements[2]["couverture"] ?>" alt="">
<div class="overlay"> <div class="overlay">
<p><?= $evenements[2]["titre"] ?></p> <p><?= $evenements[2]["titre"] ?></p>
</div> </div>
</a> </a>
</div> </div>
<div class="div4"> <div class="div4">
<?php $debut = str_starts_with($evenements[3]["couverture"], "http") ? '' : $prefixe; ?>
<a href="./event.php?event=<?= $evenements[3]["id"] ?>"> <a href="./event.php?event=<?= $evenements[3]["id"] ?>">
<img src="<?= $evenements[3]["couverture"] ?>" alt=""> <img src="<?= $debut . $evenements[3]["couverture"] ?>" alt="">
<div class="overlay"> <div class="overlay">
<p><?= $evenements[3]["titre"] ?></p> <p><?= $evenements[3]["titre"] ?></p>
</div> </div>