ajouts finaux 1
This commit is contained in:
parent
634e58c507
commit
623e2d249a
11 changed files with 280 additions and 32 deletions
|
|
@ -673,4 +673,26 @@ function deleteGuide($bdd, $id)
|
||||||
$req->bind_param("i", $id);
|
$req->bind_param("i", $id);
|
||||||
$req->execute();
|
$req->execute();
|
||||||
return $req->affected_rows > 0;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -159,6 +159,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="./pratiques.php">
|
||||||
|
Bonnes pratiques
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content mt-4">
|
<div class="tab-content mt-4">
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,6 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="admin.php" class="nav-link">Administration</a>
|
<a href="admin.php" class="nav-link">Administration</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
@ -114,6 +113,11 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||||
Guides
|
Guides
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="./pratiques.php">
|
||||||
|
Bonnes pratiques
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
118
admin/pratiques.php
Normal file
118
admin/pratiques.php
Normal 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
22
admin/save-article.php
Normal 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']);
|
||||||
|
}
|
||||||
|
?>
|
||||||
67
login.php
67
login.php
|
|
@ -5,43 +5,48 @@ $bdd = connectBDD("localhost", $config["BDD_USER"], $config["BDD_PASSWD"], $conf
|
||||||
|
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
if(isset($_POST['user']) && isset($_POST['password']) && isset($_GET['redirect_to'])){
|
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 (validateCSRFToken($_SESSION['csrf'], $_POST['csrf']) && verifyPassword(getHashPwd($bdd, $_POST['user'])["password"], $_POST['password'])) {
|
||||||
$csrf = '';
|
$csrf = '';
|
||||||
$_SESSION['connected'] = true;
|
$_SESSION['connected'] = true;
|
||||||
$_SESSION['site'] = getSite($bdd, $_POST['user']);
|
$_SESSION['site'] = getSite($bdd, $_POST['user']);
|
||||||
$_SESSION['permission'] = getUserPerms($bdd, $_POST['user']);
|
$_SESSION['permission'] = getUserPerms($bdd, $_POST['user']);
|
||||||
$_SESSION['username'] = $_POST['user'];
|
$_SESSION['username'] = $_POST['user'];
|
||||||
header('location: '.$_GET['redirect_to']);
|
header('location: ' . $_GET['redirect_to']);
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
$csrf = bin2hex(random_bytes(32));
|
$csrf = bin2hex(random_bytes(32));
|
||||||
$_SESSION['csrf'] = $csrf;
|
$_SESSION['csrf'] = $csrf;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<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 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/login.css">
|
<link rel="stylesheet" href="./styles-scripts/login.css">
|
||||||
<title>Se connecter !</title>
|
<title>Se connecter !</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<form method="POST">
|
<form method="POST">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="user">Nom d'utilisateur :</label>
|
<label for="user">Nom d'utilisateur :</label>
|
||||||
<input type="text" class="form-control" id="user" name="user" required>
|
<input type="text" class="form-control" id="user" name="user" required>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="password">Password</label>
|
<label for="password">Password</label>
|
||||||
<input type="password" class="form-control" id="password" name="password" required>
|
<input type="password" class="form-control" id="password" name="password" required>
|
||||||
</div>
|
</div>
|
||||||
<input type="hidden" name="csrf" value="<?= $csrf ?>">
|
<div class="form-group">
|
||||||
<button type="submit" class="btn btn-primary">Connexion</button>
|
<input type="hidden" name="csrf" value="<?= $csrf ?>">
|
||||||
</form>
|
<button type="submit" class="btn btn-primary" id="button">Connexion</button>
|
||||||
<a href="./activate.php">Activer mon compte</a>
|
</div>
|
||||||
<h3>En cas d'oubli de votre mot de passe, veuillez contacter Blandine Lemaire au <a href="tel:20117">20117</a></h3>
|
</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>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -11,11 +11,14 @@ $page = "bonnes pratiques";
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>Intranet de l'APEI</title>
|
<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 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">
|
<link rel="shortcut icon" href="./Assets/Icones/APEIMBGE.jpg" type="image/x-icon">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<?php include('./Assets/navbar.php');?>
|
<?php include('./Assets/navbar.php');?>
|
||||||
|
|
||||||
|
<?=html_entity_decode(getPratiques($bdd), ENT_QUOTES, 'UTF-8');?>
|
||||||
|
|
||||||
<!-- footer pas toucher -->
|
<!-- 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>
|
<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>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -171,4 +171,8 @@ li.carousel .carouselContent p {
|
||||||
|
|
||||||
.nav-link{
|
.nav-link{
|
||||||
font-size: larger;
|
font-size: larger;
|
||||||
|
}
|
||||||
|
|
||||||
|
p{
|
||||||
|
font-size: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
body
|
body
|
||||||
{
|
{
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
#button
|
||||||
|
{
|
||||||
|
margin-top: 2px;
|
||||||
}
|
}
|
||||||
4
styles-scripts/pratiques.css
Normal file
4
styles-scripts/pratiques.css
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
p
|
||||||
|
{
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
56
styles-scripts/pratiques.js
Normal file
56
styles-scripts/pratiques.js
Normal 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.");
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Reference in a new issue