ajouts finaux 1

This commit is contained in:
Erwann PHILIPPE 2026-03-12 16:26:29 +01:00
parent 634e58c507
commit 623e2d249a
11 changed files with 280 additions and 32 deletions

View file

@ -674,3 +674,25 @@ function deleteGuide($bdd, $id)
$req->execute();
return $req->affected_rows > 0;
}
function updatePratiques($contenu, $bdd) {
$content = htmlspecialchars($contenu, ENT_QUOTES, 'UTF-8');
$stmt = $bdd->prepare("UPDATE `pratique` SET `content` = ? WHERE `id` = 1 LIMIT 1");
$stmt->bind_param("s", $content);
if ($stmt->execute()) {
return true;
} else {
return false;
}
}
function getPratiques($bdd){
$results = mysqli_query($bdd, "SELECT * FROM `pratique` WHERE `id`=1");
if ($results && mysqli_num_rows($results) > 0) {
$row = mysqli_fetch_assoc($results);
return $row['content'];
} else {
return null;
}
}

View file

@ -159,6 +159,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./pratiques.php">
Bonnes pratiques
</a>
</li>
</ul>
<div class="tab-content mt-4">

View file

@ -95,7 +95,6 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
<li class="nav-item">
<a href="admin.php" class="nav-link">Administration</a>
</li>
</ul>
</div>
</nav>
@ -114,6 +113,11 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
Guides
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./pratiques.php">
Bonnes pratiques
</a>
</li>
</ul>
</div>

118
admin/pratiques.php Normal file
View file

@ -0,0 +1,118 @@
<?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/pratiques.php');
}
$permission = $_SESSION["permission"];
if ($permission == "admin") {
$evenements = getEvenements($bdd, $_SESSION['site'], true);
} else {
$evenements = getEvenements($bdd, $_SESSION['site']);
}
/* Récupération des infos */
$permissions = $_SESSION['permission'];
$site = $_SESSION['site'];
/* Gestion de l'accès à la page */
$minPoids = 99;
if (!verifyPoids($bdd, $_SESSION['username'], $minPoids)) {
die("Vous n'avez pas l'autorisation");
header('location: ./index.php');
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Modifier les bonnes pratiques</title>
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
#editor-container {
height: 300px;
margin-bottom: 15px;
}
</style>
</head>
<body>
<h1>Gestion de l'intranet</h1>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<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="modifyActuality.php" class="nav-link">Actualités</a>
</li>
<li class="nav-item">
<a href="admin.php" class="nav-link">Administration</a>
</li>
</ul>
</div>
</nav>
<ul class="nav nav-tabs" id="adminTabs" role="tablist">
<li class="nav-item">
<a class="nav-link" href="./admin.php">
Raccourcis / Utilisateurs
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="./gestionGuides.php">
Guides
</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="./pratiques.php">
Bonnes pratiques
</a>
</li>
</ul>
<script>
const initialContent = `<?= html_entity_decode(getPratiques($bdd)) ?>`;
</script>
<!-- Toolbar -->
<div id="toolbar">
<select class="ql-font"></select>
<select class="ql-size"></select>
<button class="ql-bold"></button>
<button class="ql-italic"></button>
<button class="ql-image"></button>
</div>
<!-- Editor -->
<div id="editor-container"></div>
<button id="save-button">Sauvegarder</button>
<script src="https://cdn.quilljs.com/1.3.6/quill.min.js"></script>
<script src="../styles-scripts/pratiques.js"></script>
</body>
</html>

22
admin/save-article.php Normal file
View file

@ -0,0 +1,22 @@
<?php
session_start();
header('Content-Type: application/json'); // Important pour fetch().json()
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"]);
$data = json_decode(file_get_contents('php://input'), true);
if (isset($data['content'])) {
$content = $data['content'];
error_log("Contenu reçu pour mise à jour : " . $content);
$success = updatePratiques($content, $bdd);
error_log('Résultat de updatePratiques: ' . var_export($success, true));
echo json_encode(['success' => $success]);
} else {
echo json_encode(['success' => false, 'message' => 'Contenu manquant']);
}
?>

View file

@ -5,22 +5,23 @@ $bdd = connectBDD("localhost", $config["BDD_USER"], $config["BDD_PASSWD"], $conf
session_start();
if(isset($_POST['user']) && isset($_POST['password']) && isset($_GET['redirect_to'])){
if(validateCSRFToken($_SESSION['csrf'], $_POST['csrf']) && verifyPassword(getHashPwd($bdd, $_POST['user'])["password"], $_POST['password'])){
if (isset($_POST['user']) && isset($_POST['password']) && isset($_GET['redirect_to'])) {
if (validateCSRFToken($_SESSION['csrf'], $_POST['csrf']) && verifyPassword(getHashPwd($bdd, $_POST['user'])["password"], $_POST['password'])) {
$csrf = '';
$_SESSION['connected'] = true;
$_SESSION['site'] = getSite($bdd, $_POST['user']);
$_SESSION['permission'] = getUserPerms($bdd, $_POST['user']);
$_SESSION['username'] = $_POST['user'];
header('location: '.$_GET['redirect_to']);
header('location: ' . $_GET['redirect_to']);
}
}else{
} else {
$csrf = bin2hex(random_bytes(32));
$_SESSION['csrf'] = $csrf;
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -28,6 +29,7 @@ if(isset($_POST['user']) && isset($_POST['password']) && isset($_GET['redirect_t
<link rel="stylesheet" href="./styles-scripts/login.css">
<title>Se connecter !</title>
</head>
<body>
<form method="POST">
<div class="form-group">
@ -38,10 +40,13 @@ if(isset($_POST['user']) && isset($_POST['password']) && isset($_GET['redirect_t
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<div class="form-group">
<input type="hidden" name="csrf" value="<?= $csrf ?>">
<button type="submit" class="btn btn-primary">Connexion</button>
</form>
<a href="./activate.php">Activer mon compte</a>
<h3>En cas d'oubli de votre mot de passe, veuillez contacter Blandine Lemaire au <a href="tel:20117">20117</a></h3>
<button type="submit" class="btn btn-primary" id="button">Connexion</button>
</div>
</form>
<a href="./activate.php">Activer mon compte</a>
<h3>En cas d'oubli de votre mot de passe, veuillez contacter Blandine Lemaire au <a href="tel:20117">20117</a></h3>
</body>
</html>

View file

@ -11,11 +11,14 @@ $page = "bonnes pratiques";
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Intranet de l'APEI</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
<link rel="stylesheet" href="./styles-scripts/pratiques.css">
<link rel="shortcut icon" href="./Assets/Icones/APEIMBGE.jpg" type="image/x-icon">
</head>
<body>
<?php include('./Assets/navbar.php');?>
<?=html_entity_decode(getPratiques($bdd), ENT_QUOTES, 'UTF-8');?>
<!-- footer pas toucher -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script>
</body>

View file

@ -172,3 +172,7 @@ li.carousel .carouselContent p {
.nav-link{
font-size: larger;
}
p{
font-size: 1.5rem;
}

View file

@ -2,3 +2,7 @@ body
{
padding: 1rem;
}
#button
{
margin-top: 2px;
}

View file

@ -0,0 +1,4 @@
p
{
font-size: 1.5rem;
}

View file

@ -0,0 +1,56 @@
const quill = new Quill('#editor-container', {
theme: 'snow',
modules: {
toolbar: {
container: '#toolbar',
handlers: {
image: function() {
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/*');
input.click();
input.onchange = () => {
const file = input.files[0];
const reader = new FileReader();
reader.onload = (e) => {
const range = quill.getSelection();
quill.insertEmbed(range.index, 'image', e.target.result);
};
reader.readAsDataURL(file);
};
}
}
}
}
});
// Préremplir le contenu de Quill avec les données de la base de données
quill.root.innerHTML = initialContent;
// Sauvegarder le contenu uniquement lorsque le bouton est cliqué
document.getElementById('save-button').addEventListener('click', () => {
const html = quill.root.innerHTML; // Contenu HTML, y compris les images en base64
console.log("Contenu HTML sauvegardé :", html); // Affiche ce que l'on va envoyer au serveur
// Envoi du contenu au serveur uniquement au clic
fetch('save-article.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ content: html }) // Le contenu de l'éditeur Quill
})
.then(response => response.json())
.then(data => {
if (data.success) {
alert("Données sauvegardées !");
window.location.href = "admin.php"; // Redirection après la sauvegarde
} else {
alert("Erreur lors de la sauvegarde.");
}
})
.catch(error => {
console.error('Erreur:', error);
alert("Une erreur s'est produite.");
});
});