Ajout de la fonctionnalité de gestion des utilisateurs + déplacement du fichier Javascript gérant le filtrage des entrées dans le pied de page + correction de fautes de frappe dans les textes français + affichage de l'adresse de courriel en message de bienvenue si aucun nom complet n'existe pour l'utilisateur + déconnexion automatique d'un utilisateur désactivé par un administrateur + réorganisation visuel légère du code de certaines page + ajout du support des erreurs personnalisées lors de la déconnexion d'un utilisateur (seul une erreur générique était supporté)

This commit is contained in:
ycharbi
2023-03-11 18:37:27 +01:00
parent d3baa6166c
commit 3bd350e761
18 changed files with 569 additions and 33 deletions
+136 -2
View File
@@ -7,11 +7,12 @@
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");
/**
* Fonction listant les utilisateurs.
* Fonction listant tous les utilisateurs.
*/
function listeUtilisateursPostfix($pdo) {
try {
$req = 'SELECT utilisateur FROM postfix_utilisateurs';
$req = 'SELECT * FROM postfix_utilisateurs';
$sql=$pdo->prepare($req);
$sql->execute();
@@ -23,6 +24,71 @@ function listeUtilisateursPostfix($pdo) {
}
}
/**
* Fonction listant un utilisateur en particulier.
*/
function listeUtilisateurBdd($pdo,$id_utilisateur) {
try {
$req = 'SELECT * FROM postfix_utilisateurs WHERE id=:id_utilisateur';
$sql=$pdo->prepare($req);
$sql->bindValue(':id_utilisateur',$id_utilisateur);
$sql->execute();
$infos_utilisateur = $sql->fetchAll(PDO::FETCH_ASSOC);
return $infos_utilisateur;
}
catch (\Exception $e) {
die ("Erreur de requête de selection des utilisateurs : ".$e->getMessage());
}
}
/**
* Fonction d'ajout d'un utilisateur.
*/
function ajoutUtilisateurBdd($pdo,$prefixe_utilisateur,$nom_utilisateur,$choix_domaine_utilisateur,$mot_de_passe_utilisateur,$nom_complet_utilisateur,$choix_privilege_utilisateur) {
try {
// Insertion du nouvelutilisateur entré par l'administrateur. le mot de passe "motdepasse" est mis par défaut et changé juste après par la fonction idoine afin de ne pas dupliquer de code
$req='INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,rep_perso,uid,gid,privilege,prefixe,active) VALUES (:nom_utilisateur,"{SHA512-CRYPT}$6$SAeCKr.vyiMjMMVa$okHL4IbTkVJO2an.mdFo8EizAxC0pfP6EV4xhO78C.OvMsirM9BD5TYhNaGPcfReQZ6ilc9feaETTvN6c.h6Z0",:nom_complet_utilisateur,:rep_perso,3000,3000,:choix_privilege_utilisateur,:prefixe_utilisateur,1);';
$sql=$pdo->prepare($req);
$sql->bindValue(':nom_utilisateur',substr(htmlspecialchars($nom_utilisateur."@".$choix_domaine_utilisateur),0,100));
$sql->bindValue(':nom_complet_utilisateur',substr(htmlspecialchars($nom_complet_utilisateur),0,100));
$sql->bindValue(':rep_perso',substr(htmlspecialchars($choix_domaine_utilisateur."/".$nom_utilisateur."/"),0,100));
$sql->bindValue(':choix_privilege_utilisateur',substr(htmlspecialchars($choix_privilege_utilisateur),0,100));
$sql->bindValue(':prefixe_utilisateur',substr(htmlspecialchars($prefixe_utilisateur),0,100));
$sql->execute();
if ($sql->rowCount() == 1){
return true;
}
else {
return false;
}
}
catch (\Exception $e) {
// Récupération du code de retour de la commande SQLite
$code_retour=$sql->errorInfo();
if ($code_retour[0]=="23000") {
// Code de retour envoyé par le pilote PDO SQLite signifiant que la contrainte "UNIQUE" du champ "utilisateur" de la table "postfix_utilisateurs" est violée. Le nom d'utilisateur envoyé via le formulaire par l'administrateur a déjà été renseigné dans la base
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=25");
die();
}
elseif ($code_retour[0]=="HY000") {
// Code de retour envoyé par le pilote PDO SQLite lorsque la base de données n'est accessible qu'en lecture seule à www-data
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=4");
die();
}
else {
// En cas d'erreur non gérée, le script s'arrête avec un message d'erreur à destination de l'administrateur du serveur
die ("Erreur de requête d'ajout d'alias virtuel : ".$e->getMessage());
}
}
}
/**
* Fonction vérifiant le mot de passe actuel d'un utilisateur.
*/
@@ -161,5 +227,73 @@ function verifUtilisateursExiste($pdo,$utilisateur) {
}
}
/**
* Fonction de suppression d'un utilisateur.
*/
function supprUtilisateursBdd($pdo,$suppr_utilisateur) {
try {
$req='DELETE FROM postfix_utilisateurs WHERE id=:id_utilisateur AND utilisateur!=:pseudo_connexion_utilisateur';
$sql=$pdo->prepare($req);
$sql->bindValue(':id_utilisateur',$suppr_utilisateur);
$sql->bindValue(':pseudo_connexion_utilisateur',$_SESSION['pseudo_connexion_utilisateur']);
$sql->execute();
if($sql->rowCount() == 1){
return true;
}
else {
return false;
}
}
catch (\Exception $e) {
// Récupération du code de retour de la commande SQLite
$code_retour=$sql->errorInfo();
if ($code_retour[0]=="HY000") {
// Code de retour envoyé par le pilote PDO SQLite lorsque la base est accessible en lecture seule à www-data
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=4");
die();
}
else {
// En cas d'erreur non gérée, le script s'arrête avec un message d'erreur à destination de l'administrateur du serveur
die ("Erreur de requête de suppression d'un utilisateur : ".$e->getMessage());
}
}
}
/**
* Fonction de modification des informations des utilisateurs.
* Suite à une soumission du formulaire dédié, cette fonction va traiter l'ensemble des données modifiables des utilisateurs.
* Seul les utilisateurs recevant au moins une modification sont traités.
*/
function modifUtilisateursBdd($pdo,$nouvelles_données_utilisateur) {
try {
$req='UPDATE postfix_utilisateurs SET active=:etat_utilisateur,nom_complet=:nom_complet_utilisateur,privilege=:choix_privilege_utilisateur,prefixe=:prefixe_utilisateur WHERE id=:id_utilisateur AND utilisateur=:pseudo_utilisateur';
$sql=$pdo->prepare($req);
$sql->bindValue(':etat_utilisateur',$nouvelles_données_utilisateur['etat_utilisateur']);
$sql->bindValue(':nom_complet_utilisateur',$nouvelles_données_utilisateur['nom_complet_utilisateur']);
$sql->bindValue(':choix_privilege_utilisateur',$nouvelles_données_utilisateur['choix_privilege_utilisateur']);
$sql->bindValue(':prefixe_utilisateur',$nouvelles_données_utilisateur['prefixe_utilisateur']);
$sql->bindValue(':id_utilisateur',$nouvelles_données_utilisateur['id_utilisateur']);
$sql->bindValue(':pseudo_utilisateur',$nouvelles_données_utilisateur['nom_utilisateur']);
$sql->execute();
}
catch (\Exception $e) {
// Récupération du code de retour de la commande SQLite
$code_retour=$sql->errorInfo();
if ($code_retour[0]=="HY000") {
// Code de retour envoyé par le pilote PDO SQLite lorsque la base est accessible en lecture seule à www-data
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=4");
die();
}
else {
// En cas d'erreur non gérée, le script s'arrête avec un message d'erreur à destination de l'administrateur du serveur
die ("Erreur de requête de modification des données pour l'utilisateur $nouvelles_données_utilisateur[nom_utilisateur] : ".$e->getMessage());
}
}
}
?>