10 Commits

Author SHA1 Message Date
nmorin 42c09260fa Fusionner 'Version 1.1.0' (#10) de develop dans master
Révision sur: #10
2023-08-02 23:00:26 +02:00
nmorin ac5ca20de6 Merge branch 'master' into develop 2023-08-02 22:38:55 +02:00
ycharbi 6b433361b3 Modification de la septième image en rapport avec l'ajout de la section information du dernier commit 2023-07-09 16:46:03 +02:00
ycharbi f3c057aec2 Ajout d'une section d'information dans les paramètres de l'administrateur + ajout de la version du site dans cette dernière 2023-07-09 16:39:16 +02:00
ycharbi b2248c3715 Modification des captures d'écran + adaptation du fichier README.md en conséquence 2023-07-09 16:23:11 +02:00
ycharbi b4e9654ad1 Suppression des formulaires de changement de mot de passe et de préfixe utilisateur faisant doublons avec la page dédiée aux utilisateurs 2023-06-17 12:44:31 +02:00
ycharbi 561139835b Actualisation du fichier README prenant en compte les nouvelles fonctions autour des utilisateurs + ajout d'un message indiquant que les fichiers de l'utilisateur prochainement supprimé devront l'être manuellement sur le serveur + correction d'une faute de français dans le message au survol d'une modification de préfixe utilisateur 2023-06-17 11:55:45 +02:00
ycharbi d77dcc32db Envoi d'un code HTTP 404 si la page demandée dans l'administration n'existe pas + modification de l'état d'un alias virtuel uniquement si la valeur envoyée est 0 ou 1 + ajout de fonctions die() après chaque redirections header HTTP dans les pages de traitements + nettoyage d'un ancien code commenté dans editUtilisateur.php 2023-06-17 11:54:36 +02:00
ycharbi d67d257947 Correction d'un bogue de sélection via le triple clic sur Firefox qui ajoutait des espaces avant et après l'adresse sélectionnée sur les alias, domaines, utilisateurs et les listes noires 2023-06-09 19:41:25 +02:00
nmorin d597b1a5bf V1.0.0
Première version stable
2022-09-03 22:11:28 +02:00
24 changed files with 75 additions and 87 deletions
+4 -2
View File
@@ -9,7 +9,7 @@ L'objectif de Courtail est de permettre le paramétrage de certaines fonctionnal
* ajout, activation/désactivation, suppression des alias virtuels
* ajout, activation/désactivation, suppression des domaines
* ajout, activation/désactivation, suppression des adresses en liste noire
* changement de mot de passe des utilisateurs
* ajout, activation/désactivation, suppression, changement de préfixe, changement de mot de passe, changement de privilège des utilisateurs
* exportation/importation des alias virtuels d'un utilisateur
* exportation/importation des données (à la carte) du site
@@ -62,4 +62,6 @@ Plusieurs utilisateurs sont créés dans notre exemple :
![Page liste noire des expéditeurs](outils/galerie/courtail-galerie-5.png)
![Page des paramètres](outils/galerie/courtail-galerie-6.png)
![Page des utilisateurs](outils/galerie/courtail-galerie-6.png)
![Page des paramètres](outils/galerie/courtail-galerie-7.png)
+9
View File
@@ -38,3 +38,12 @@
* https://dabblet.com/gist/1506530
* https://css-tricks.com/the-checkbox-hack/
*/
/* Style concernant le message d'avertissement concernant les fichiers d'un utilisateur après sa suppression dans les menus déroulants d'une pastille */
.confirmation-avertissement-info {
display: none;
}
.input-checkbox-supprimer-valeur:checked ~ .confirmation-avertissement-info {
display: inline;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 339 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

+2 -1
View File
@@ -56,7 +56,8 @@ if (isset($_GET['page']) && !empty($_GET['page'])) {
break;
default:
echo "<h1>Cette page n'existe pas.</h1>";
http_response_code(404);
echo "<h1>Cette page n'existe pas.</h1>";
break;
}
}
+9 -7
View File
@@ -93,13 +93,15 @@ function modifEtatAliasVirtuelsBdd($pdo,$retour_form) {
try {
$compteModifs=0;
foreach ($retour_form as $id_alias_virtuel => $etat_alias_virtuel) {
$req='UPDATE postfix_alias_virtuels SET active=:etat_alias_virtuel WHERE id=:id_alias_virtuel AND destination=:pseudo_utilisateur';
$sql=$pdo->prepare($req);
$sql->bindValue(':etat_alias_virtuel',$etat_alias_virtuel);
$sql->bindValue(':id_alias_virtuel',$id_alias_virtuel);
$sql->bindValue(':pseudo_utilisateur',$_SESSION['pseudo_utilisateur']);
$sql->execute();
if ($etat_alias_virtuel==0 || $etat_alias_virtuel==1) {
$req='UPDATE postfix_alias_virtuels SET active=:etat_alias_virtuel WHERE id=:id_alias_virtuel AND destination=:pseudo_utilisateur';
$sql=$pdo->prepare($req);
$sql->bindValue(':etat_alias_virtuel',$etat_alias_virtuel);
$sql->bindValue(':id_alias_virtuel',$id_alias_virtuel);
$sql->bindValue(':pseudo_utilisateur',$_SESSION['pseudo_utilisateur']);
$sql->execute();
}
}
}
catch (\Exception $e) {
+1 -3
View File
@@ -123,9 +123,7 @@ _HEREDOC_;
<input type="radio" name="{$alias_virtuels_valeurs['id']}" id="eteint{$alias_virtuels_valeurs['id']}" onchange="activationBoutonFlotant(this)" value="0" {$etat_interrupteur_eteint}>
<label for="eteint{$alias_virtuels_valeurs['id']}" class="interrupteur-eteint"></label>
</div>
<div class="titre-pastille">
<span>{$alias_virtuels_valeurs['courriel']}</span>
</div>
<div class="titre-pastille"><span>{$alias_virtuels_valeurs['courriel']}</span></div>
<div>
<label class="input-label-supprimer-valeur btn btn-danger btn-sm" for="supprimer-valeur-{$alias_virtuels_valeurs['id']}"><img src="/fichiers/svg/trash-2.svg"></label>
</div>
+1 -3
View File
@@ -110,9 +110,7 @@ $liste_domaines = listeDomainesBdd($pdo);
<input type="radio" name="{$liste_domaines_valeurs['id']}" id="eteint{$liste_domaines_valeurs['id']}" onchange="activationBoutonFlotant(this)" value="0" {$etat_interrupteur_eteint}>
<label for="eteint{$liste_domaines_valeurs['id']}" class="interrupteur-eteint"></label>
</div>
<div class="titre-pastille">
<span>{$liste_domaines_valeurs['domaine']}{$post_texte}</span>
</div>
<div class="titre-pastille"><span>{$liste_domaines_valeurs['domaine']}{$post_texte}</span></div>
<div>
<label class="input-label-supprimer-valeur btn btn-danger btn-sm {$etat_bouton}" for="supprimer-valeur-{$liste_domaines_valeurs['id']}"><img src="/fichiers/svg/trash-2.svg"></label>
</div>
+2 -6
View File
@@ -68,9 +68,7 @@ if (isset($_GET['sousPage']) && !empty($_GET['sousPage'])) {
<input type="radio" name="{$liste_entrees_liste_noires_dst_valeurs['id']}" id="eteint{$liste_entrees_liste_noires_dst_valeurs['id']}" onchange="activationBoutonFlotant(this)" value="0" {$etat_interrupteur_eteint}>
<label for="eteint{$liste_entrees_liste_noires_dst_valeurs['id']}" class="interrupteur-eteint"></label>
</div>
<div class="titre-pastille">
<span>{$liste_entrees_liste_noires_dst_valeurs['courriel']} <img class="chevron-dst" src="/fichiers/svg/chevron-right.svg" /> <span class="badge fond-arc-noire">{$liste_entrees_liste_noires_dst_valeurs['action']}</span></span>
</div>
<div class="titre-pastille"><span>{$liste_entrees_liste_noires_dst_valeurs['courriel']} <img class="chevron-dst" src="/fichiers/svg/chevron-right.svg" /> <span class="badge fond-arc-noire">{$liste_entrees_liste_noires_dst_valeurs['action']}</span></span></div>
<div>
<label class="input-label-supprimer-valeur btn btn-danger btn-sm" for="supprimer-valeur-{$liste_entrees_liste_noires_dst_valeurs['id']}"><img src="/fichiers/svg/trash-2.svg"></label>
</div>
@@ -138,9 +136,7 @@ if (isset($_GET['sousPage']) && !empty($_GET['sousPage'])) {
<input type="radio" name="{$liste_entrees_liste_noires_exp_valeurs['id']}" id="eteint{$liste_entrees_liste_noires_exp_valeurs['id']}" onchange="activationBoutonFlotant(this)" value="0" {$etat_interrupteur_eteint}>
<label for="eteint{$liste_entrees_liste_noires_exp_valeurs['id']}" class="interrupteur-eteint"></label>
</div>
<div class="titre-pastille">
<span><span class="badge fond-arc-noire">{$liste_entrees_liste_noires_exp_valeurs['code_retour']}</span> <img class="chevron-dst" src="/fichiers/svg/chevron-right.svg" /> {$liste_entrees_liste_noires_exp_valeurs['courriel']}</span>
</div>
<div class="titre-pastille"><span><span class="badge fond-arc-noire">{$liste_entrees_liste_noires_exp_valeurs['code_retour']}</span> <img class="chevron-dst" src="/fichiers/svg/chevron-right.svg" /> {$liste_entrees_liste_noires_exp_valeurs['courriel']}</span></div>
<div>
<label class="input-label-supprimer-valeur btn btn-danger btn-sm" for="supprimer-valeur-{$liste_entrees_liste_noires_exp_valeurs['id']}"><img src="/fichiers/svg/trash-2.svg"></label>
</div>
+32 -31
View File
@@ -11,14 +11,13 @@ $prefixe_utilisateur = retournePrefixeUtilisateurBdd($pdo,$_SESSION['pseudo_util
if ($_SESSION['pseudo_connexion_utilisateur'] !== $_SESSION['pseudo_utilisateur']){
$message_alert_utilisateur="<div class=\"alert alert-warning mt-2 mb-2\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle-warning.svg\"/> Vous allez modifier les paramètres d'un autre utilisateur que vous.</div>";
}else{
} else{
$message_alert_utilisateur="";
}
/**
* Affiche le formulaire de selection d'un utilisateur si celui connecté possède les privilèges administrateur.
*/
if (testPrivileges()==="administrateur") {
echo <<<_HEREDOC_
<div class="col-12">
@@ -54,23 +53,19 @@ if (testPrivileges()==="administrateur") {
}
/**
* Changement du mot de passe d'un utilisateur.
* Changement du mot de passe de l'utilisateur courant.
*/
if ($_SESSION['privilege_utilisateur']==="administrateur" && !empty($prefixe_utilisateur)){
$message="<div class=\"mt-2 mb-2 alert alert-primary\" role=\"alert\">Préfixe actuel de ".$_SESSION['pseudo_utilisateur']." : <span class=\"badge bg-primary\">".$prefixe_utilisateur."</span></div>";
}else{
$message="";
}
?>
<div class="row">
<div class="col-12 col-md-12<?php if ($_SESSION['privilege_utilisateur']==="administrateur") {echo ' col-xl-6';}?>">
<div class="col-12 col-md-12">
<?php if ($_SESSION['privilege_utilisateur']==="utilisateur" && !empty($prefixe_utilisateur)){ ?>
<div class="card mt-4 max-hauteur-pastille">
<div class="card-body">
<h5 class="card-title">Modifier le mot de passe<?php if ($_SESSION['privilege_utilisateur']==="administrateur") {echo ' de '.$_SESSION['pseudo_utilisateur'];} ?></h5>
<h5 class="card-title">Modifier le mot de passe</h5>
<?php echo $message_alert_utilisateur; ?>
<form action="/services/traitements/utilisateurs/changeMotDePasseUtilisateur.php" method="post">
<div class="input-group">
<?php if ($_SESSION['privilege_utilisateur']==="utilisateur") { echo '<input type="password" class="form-control" name="ancien_mot_de_passe" placeholder="Ancien mot de passe" required>'; } ?>
<input type="password" class="form-control" name="ancien_mot_de_passe" placeholder="Ancien mot de passe" required>
<input type="password" class="form-control" name="nouveau_mot_de_passe" placeholder="Nouveau mot de passe" required>
<input type="password" class="form-control" name="confirmation_mot_de_passe" placeholder="Confirmation mot de passe" required>
<button class="btn btn-primary bouton-ajout" type="submit">Modifier</button>
@@ -78,29 +73,13 @@ if ($_SESSION['privilege_utilisateur']==="administrateur" && !empty($prefixe_uti
</form>
</div>
</div>
<?php } ?>
</div>
<?php
if ($_SESSION['privilege_utilisateur']==="administrateur") {
echo <<<_HEREDOC_
<div class="col-12 col-md-12 col-xl-6">
<div class="card mt-4 max-hauteur-pastille">
<div class="card-body">
<h5 class="card-title">Modifier le préfixe de {$_SESSION['pseudo_utilisateur']}</h5>
{$message}
{$message_alert_utilisateur}
<form action="/services/traitements/utilisateurs/changePrefixeUtilisateur.php" method="post">
<div class="input-group">
<input class="form-control" type="text" name="nouveau_prefixe" placeholder="Nouveau prefixe">
<button class="btn btn-primary bouton-ajout" type="submit">Appliquer</button>
</div>
</form>
</div>
</div>
</div>
_HEREDOC_;
}
/**
* Sauvegarde des alias virtuels de l'utilisateur sélectionné.
*/
echo <<<_HEREDOC_
<div class="col-12 col-md-12 col-xl-6">
<div class="card mt-4 max-hauteur-pastille">
@@ -114,6 +93,9 @@ if ($_SESSION['privilege_utilisateur']==="administrateur" && !empty($prefixe_uti
</div>
_HEREDOC_;
/**
* Restauration des alias virtuels de l'utilisateur sélectionné.
*/
echo <<<_HEREDOC_
<div class="col-12 col-md-12 col-xl-6">
<div class="card mt-4 max-hauteur-pastille">
@@ -132,6 +114,9 @@ if ($_SESSION['privilege_utilisateur']==="administrateur" && !empty($prefixe_uti
</div>
_HEREDOC_;
/**
* Sauvegarde de la base de données selon la sélection de l'administrateur.
*/
if ($_SESSION['privilege_utilisateur']==="administrateur") {
echo <<<_HEREDOC_
<div class="col-12 col-md-12 col-xl-6">
@@ -169,6 +154,9 @@ if ($_SESSION['privilege_utilisateur']==="administrateur" && !empty($prefixe_uti
_HEREDOC_;
}
/**
* Restauration de la base de données selon la sélection de l'administrateur.
*/
if ($_SESSION['privilege_utilisateur']==="administrateur") {
echo <<<_HEREDOC_
<div class="col-12 col-md-12 col-xl-6">
@@ -210,6 +198,19 @@ if ($_SESSION['privilege_utilisateur']==="administrateur" && !empty($prefixe_uti
_HEREDOC_;
}
if ($_SESSION['privilege_utilisateur']==="administrateur") {
echo <<<_HEREDOC_
<div class="col-12 col-md-12 col-xl-12">
<div class="card mt-4 max-hauteur-pastille">
<div class="card-body">
<h5 class="card-title">Informations du site</h5>
<p class="mb-0">Version de Courtail : <a href="https://gitea.ycharbi.fr/YC-NM/Courtail/releases">v1.1.0</a></p>
</div>
</div>
</div>
_HEREDOC_;
}
?>
</div>
+4 -4
View File
@@ -28,7 +28,7 @@ if (testPrivileges()==="administrateur") {
<div class="row">
<div class="col-xl-5 col-12 pt-2">
<div class="input-group">
<input class="form-control" type="text" name="prefixe_utilisateur" placeholder="prefixe" title="Texte s'ajoutant devant les alias de l'utilisateurs afin de les discriminer de ceux des autres">
<input class="form-control" type="text" name="prefixe_utilisateur" placeholder="prefixe" title="Texte s'ajoutant devant les alias de l'utilisateur afin de les discriminer de ceux des autres">
<input type="text" class="form-control" id="nom_pour_filtre" name="nom_utilisateur" placeholder="nom utilisateur *" onkeyup="filtreValeurs();" title="Identifiant de l'utilisateur" required>
<span class="input-group-text">@</span>
<select class="form-select" name="choix_domaine_utilisateur" title="Choix d'un nom de domaine existant">
@@ -115,14 +115,13 @@ _HEREDOC_;
<input type="radio" name="utilisateur[{$numero_entree}][etat_utilisateur]" id="eteint{$utilisateurs_valeurs['id']}" value="0" {$etat_interrupteur_eteint}>
<label for="eteint{$utilisateurs_valeurs['id']}" class="interrupteur-eteint"></label>
</div>
<div class="titre-pastille">
<span>{$utilisateurs_valeurs['utilisateur']}</span>
<div class="titre-pastille"><span>{$utilisateurs_valeurs['utilisateur']}</span>
_HEREDOC_;
if ($utilisateurs_valeurs['privilege'] === "administrateur") {
echo '<div class="survol"><span style="padding: 0; margin-left: 5px" class="badge fond-arc-noire"><img style="width: 80%" src="/fichiers/svg/chevrons-up.svg"></img></span><div class="message-survol">Cet utilisateur est un administrateur</div></div>';
}
echo '</div>';
echo <<<_HEREDOC_
</div>
<div>
<label class="input-label-detail-utilisateur btn btn-primary btn-sm me-1" for="detail-utilisateur-{$utilisateurs_valeurs['id']}"><img src="/fichiers/svg/menu.svg"></label>
</div>
@@ -153,6 +152,7 @@ _HEREDOC_;
</div>
<input type="checkbox" class="input-checkbox-supprimer-valeur visuellement-cache" id="supprimer-valeur-{$utilisateurs_valeurs['id']}">
<div class="confirmation-avertissement-info alert alert-warning" role="alert"><img src="/fichiers/svg/alert-triangle-warning.svg"/> Les fichiers de l'utilisateur devront être supprimés manuellement du serveur</div>
<a class="confirmation-suppression card-footer" href="/services/traitements/utilisateurs/supprUtilisateur.php?supprUtilisateur={$utilisateurs_valeurs['id']}">Confirmer la suppression</a>
</div>
@@ -11,5 +11,6 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels.
modifEtatAliasVirtuelsBdd($pdo,$_POST);
header ("Location: /pages/gestion/administration.php?page=alias&succes=2");
die();
?>
@@ -11,9 +11,11 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels.
if(isset($_GET['supprAliasVirtuel']) && !empty($_GET['supprAliasVirtuel']) && supprAliasVirtuelsBdd($pdo,$_GET['supprAliasVirtuel'])) {
header ("Location: /pages/gestion/administration.php?page=alias&succes=3");
die();
}
else {
header ("Location: /pages/gestion/administration.php?page=alias&erreur=1");
die();
}
?>
@@ -14,5 +14,6 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
modifEtatDomainesBdd($pdo,$_POST);
header ("Location: /pages/gestion/administration.php?page=domaines&succes=6");
die();
?>
@@ -14,9 +14,11 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
if(isset($_GET['supprDomaine']) && !empty($_GET['supprDomaine']) && supprDomainesBdd($pdo,$_GET['supprDomaine'])) {
header ("Location: /pages/gestion/administration.php?page=domaines&succes=7");
die();
}
else {
header ("Location: /pages/gestion/administration.php?page=domaines&erreur=5");
die();
}
?>
@@ -14,9 +14,11 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/listes_noires.p
if(isset($_GET['supprEntreeListeNoireDst']) && !empty($_GET['supprEntreeListeNoireDst']) && supprEntreeListeNoireDstBdd($pdo,$_GET['supprEntreeListeNoireDst'])) {
header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=destinataires&succes=11");
die();
}
else {
header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=destinataires&erreur=11");
die();
}
?>
@@ -14,9 +14,11 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/listes_noires.p
if(isset($_GET['supprEntreeListeNoireExp']) && !empty($_GET['supprEntreeListeNoireExp']) && supprEntreeListeNoireExpBdd($pdo,$_GET['supprEntreeListeNoireExp'])) {
header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs&succes=14");
die();
}
else {
header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs&erreur=15");
die();
}
?>
@@ -31,4 +31,5 @@ elseif (!empty($erreur)) {
// Redirection de l'utilisateur vers la page d'authentifiaction
header('location: /pages/visiteurs/formulaire_accueil.php?succes=15');
die();
?>
@@ -49,34 +49,4 @@ foreach ($liste_utilisateurs as $enieme_utilisateur_liste => $infos_utilisateur_
header ("Location: /pages/gestion/administration.php?page=utilisateurs&succes=22");
die();
/*$numero_entree=1;
foreach ($_POST as $cle_post => $infos_utilisateur){
$toto=$_POST["id_utilisateur$numero_entree"];
echo $_POST["nom_complet_utilisateur$toto"];/*
// Vérification de l'existance du domaine renseigné par l'utilisateur
/*if ($_POST['choix_domaine_utilisateur'] === $domaine_valeurs['domaine']) {
if ($_POST['choix_privilege_utilisateur'] === 'utilisateur' || $_POST['prefixe_utilisateur'] === 'administrateur') {
modifUtilisateursBdd($pdo,$_POST["nom_complet_utilisateur$id_utilisateur"],$_POST["prefixe_utilisateur$id_utilisateur"],$_POST["choix_privilege_utilisateur$id_utilisateur"],$_POST['mot_de_passe_utilisateur'],$_POST['nom_complet_utilisateur'],$_POST['choix_privilege_utilisateur']);
changeMotDePasseUtilisateurBdd($pdo,substr(htmlspecialchars($_POST['nom_utilisateur']."@".$_POST['choix_domaine_utilisateur']),0,100),trim($_POST['mot_de_passe_utilisateur']),trim($_POST['mot_de_passe_utilisateur']));
header ("Location: /pages/gestion/administration.php?page=utilisateurs&succes=20");
die();
}
else {
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=27");
die();
}
}*/
/*$numero_entree++;
}*/
//echo "$id_utilisateur";
//echo "$infos_utilisateur";
/*die();
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=26");
die();
modifUtilisateursBdd($pdo,$_POST);
header ("Location: /pages/gestion/administration.php?page=utilisateurs&succes=22");*/
?>