Compare commits

...

17 Commits

Author SHA1 Message Date
nmorin 42c09260fa Fusionner 'Version 1.1.0' (#10) de develop dans master
1 year ago
nmorin ac5ca20de6 Merge branch 'master' into develop
1 year ago
ycharbi 6b433361b3 Modification de la septième image en rapport avec l'ajout de la section information du dernier commit
1 year ago
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
1 year ago
ycharbi b2248c3715 Modification des captures d'écran + adaptation du fichier README.md en conséquence
1 year ago
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
2 years ago
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
2 years ago
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
2 years ago
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
2 years ago
ycharbi 2d0186e63d Désactivation de l'interrupteur de changement d'état et du bouton de suppression pour l'administrateur courant + correction d'indentation + correction d'une erreur d'ordonnancement d'affichage des alias virtuels + changement du descriptif de la feuille de style de confirmation + suppression de la bordure du message de survol pour le statut d'un utilisateur
2 years ago
ycharbi d1054cf55e Changement de l'ordre d'affichage des alias virtuels pour décroissant par date de création
2 years ago
ycharbi f92855e126 Travail de l'apparence de la page de gestion des utilisateurs
2 years ago
ycharbi 548c1794fb Correction de la condition validant le privilège administrateur d'un nouvel utilisateur
2 years ago
ycharbi 650af8c94f Actualisation du schéma logique + renommage de quelque fichiers de gestion utilisateurs
2 years ago
ycharbi 14c055d868 Changement du noms des fonctions comportant le mot 'Postfix' par 'Bdd'
2 years ago
ycharbi 3bd350e761 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é)
2 years ago
ycharbi d3baa6166c Correction d'un bogue concernant la non disparition du bouton d'enregistrement de l'activation/désactivation d'un élément de liste + application des bons droits de Courtail dans le conteneur Docker + correction du domaine de l'utilisateur tata pour qu'il corresponde à celui en base de données
2 years ago

@ -11,6 +11,7 @@ COPY . /var/www/html/
RUN mv /var/www/html/outils/conf/php.ini /etc/php/7.4/apache2 && \
mv /var/www/html/outils/conf/apache2.conf /etc/apache2/ && \
chmod +x /var/www/html/outils/genenv.sh && \
/var/www/html/outils/genenv.sh
/var/www/html/outils/genenv.sh && \
chown -R www-data:www-data /var/www/html/
CMD /usr/sbin/apachectl -D FOREGROUND

@ -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
@ -46,7 +46,7 @@ Plusieurs utilisateurs sont créés dans notre exemple :
|---------------|------------|--------------|
|demo@exemple.fr|demo |Administrateur|
|toto@exemple.fr|toto |Administrateur|
|tata@exemple.fr|tata |Utilisateur |
|tata@tata.fr |tata |Utilisateur |
*La définition d'un domaine par défaut dans la section dédiée du site permet l'usage d'identifiants courts (demo = demo@exemple.fr).*
@ -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)

@ -1,4 +1,4 @@
/* Style concernant la confirmation de suppression d'un alias virtuel */
/* Style concernant les menus déroulants d'une pastille */
.confirmation-suppression {
display: none;
color: #fff;
@ -17,20 +17,33 @@
display: inline;
}
/*.input-label-supprimer-valeur {
color: #ffffff;
background: #e23026;
padding: 0.5rem 1rem;
border-radius: 0.5rem;
}*/
.visuellement-cache {
position: absolute;
left: -100vw;
}
.detail-utilisateur {
display: none;
color: #fff;
text-align: center;
text-decoration: none;
}
.input-checkbox-detail-utilisateur:checked ~ .detail-utilisateur {
display: block;
}
/* Sources :
* https://stackoverflow.com/questions/6019845/show-hide-div-on-click-with-css
* 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;
}

@ -113,3 +113,30 @@ body {
.max-hauteur-pastille{
height: calc(100% - 1.5em);
}
.survol{
display: inline-block;
}
.survol:hover .message-survol {
overflow: hidden;
padding: 12px 12px;
height: auto;
width: auto;
opacity: 1;
}
.message-survol {
opacity: 0;
position: absolute;
z-index: 7;
background: #343a40;
color: #FFFFFF;
border: 1px solid transparent;
border-radius: 6px;
height: 0px;
width: 0px;
padding: 0 12px;
overflow: hidden;
/*-webkit-transition: all 500ms;
transition: all 500ms;*/
}

@ -5,8 +5,9 @@
/*
* Fonction permettant d'afficher et de masquer le bouton d'enregistrement d'un changement d'état pour les alias virtuels, domaines et entrées de liste noire d'un utilisateur.
**/
const listedesentrees = [];
function activationBoutonFlotant(lui) {
const listedesentrees = [];
if (listedesentrees.find(function(valeur) {return valeur == lui.name;})) {
for( var i = 0; i < listedesentrees.length; i++){
if ( listedesentrees[i] === lui.name) {
@ -16,7 +17,7 @@ function activationBoutonFlotant(lui) {
}
} else {
listedesentrees.push(lui.name);
};
}
if (listedesentrees.length > 0){
document.getElementById("enregistrer-interrupteur").classList.remove("desactiver");

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-up"><polyline points="17 11 12 6 7 11"></polyline><polyline points="17 18 12 13 7 18"></polyline></svg>

After

Width:  |  Height:  |  Size: 311 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-help-circle"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>

After

Width:  |  Height:  |  Size: 357 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg>

After

Width:  |  Height:  |  Size: 338 B

@ -22,14 +22,15 @@ if (isset($_GET['page']) && !empty($_GET['page'])) {
<a class="nav-link <?php if ($_GET['page'] == 'domaines') {echo 'active';} ?>" href="/pages/gestion/administration.php?page=domaines">Domaines</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle <?php if ($_GET['sousPage'] == 'destinataires' || $_GET['sousPage'] == 'expediteurs') {echo 'active';} ?>" href="/pages/gestion/administration.php?page=listes_noires&sousPage=destinataires" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Listes noires
</a>
<a class="nav-link dropdown-toggle <?php if ($_GET['sousPage'] == 'destinataires' || $_GET['sousPage'] == 'expediteurs') {echo 'active';} ?>" href="/pages/gestion/administration.php?page=listes_noires&sousPage=destinataires" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">Listes noires</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="/pages/gestion/administration.php?page=listes_noires&sousPage=destinataires">Destinataires</a></li>
<li><a class="dropdown-item" href="/pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs">Expéditeurs</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link <?php if ($_GET['page'] == 'utilisateurs' || $_GET['page'] == 'utilisateurs') {echo 'active';} ?>" href="/pages/gestion/administration.php?page=utilisateurs">Utilisateurs</a>
</li>
<?php } ?>
</ul>
</div>

@ -1,4 +1,5 @@
<script src="/fichiers/js/bootstrap.bundle.min.js"></script>
<script src="/fichiers/js/formulaire.js"></script>
<script src="/fichiers/js/filtre.js"></script>
</body>
</html>

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

@ -3,11 +3,11 @@
<svg
width="507.84598mm"
height="802.86371mm"
viewBox="0 0 507.84598 802.86371"
height="853.52264mm"
viewBox="0 0 507.84598 853.52265"
version="1.1"
id="svg5"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="Courtail-schéma.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
@ -23,13 +23,13 @@
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.0758952"
inkscape:cx="1702.768"
inkscape:cy="2869.2385"
inkscape:window-width="1600"
inkscape:window-height="831"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:zoom="1.3120131"
inkscape:cx="1946.6269"
inkscape:cy="3186.3249"
inkscape:window-width="1920"
inkscape:window-height="1140"
inkscape:window-x="1920"
inkscape:window-y="32"
inkscape:window-maximized="1"
inkscape:current-layer="layer3"
fit-margin-top="0"
@ -347,17 +347,17 @@
style="display:inline">
<path
style="fill:none;stroke:#999999;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
d="m 271.26397,152.21039 0,749.37222"
d="M 271.26397,152.21039 V 952.41414"
id="path64248"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#999999;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
d="m 467.75642,152.21038 0,749.37223"
d="M 467.75642,152.21038 V 952.41414"
id="path64658"
sodipodi:nodetypes="cc" />
<g
id="g79069"
transform="matrix(0.48244297,0,0,0.48244297,565.72772,872.99852)">
transform="matrix(0.48244297,0,0,0.48244297,565.72772,923.89869)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect79063"
@ -376,7 +376,7 @@
id="tspan79065"
style="font-size:7.05556px;stroke-width:0.264583"
x="12.840136"
y="56.334156">commit 0b5db50d5d</tspan></text>
y="56.334156">commit 14c055d868</tspan></text>
</g>
<path
style="fill:none;stroke:#999999;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
@ -425,7 +425,7 @@
</g>
<path
style="display:inline;fill:none;stroke:#0080ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="M -8.4318206,-89.432823 V 708.80623"
d="m -8.4318206,-89.432823 0,848.695013"
id="path129737"
sodipodi:nodetypes="cc"
transform="translate(124.41568,188.32432)" />
@ -590,7 +590,7 @@
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Flêches"
transform="translate(20.813414,89.432822)">
transform="translate(20.813412,89.432822)">
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="M 37.772337,34.457624 V 58.890442"
@ -643,12 +643,12 @@
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker175132)"
d="M 28.193253,286.46067 H 6.9490543 V 95.445509 h 8.5100897"
d="M 28.193253,303.28541 H 6.9490543 V 95.445509 h 8.5100897"
id="path175128"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker101675);marker-end:url(#marker180768)"
d="m 99.310886,235.1757 h 72.531144 v 110.9505 h 16.85451"
d="m 99.310886,235.1757 h 72.531144 v 110.48684 h 16.85451"
id="path180703"
sodipodi:nodetypes="cccc" />
<path
@ -663,52 +663,52 @@
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker101675);marker-end:url(#marker186632)"
d="m 86.355431,252.00685 h 81.919579 v 190.37749 h 42.26823"
d="m 86.355431,252.00685 h 81.919579 v 241.66274 h 42.26823"
id="path186551"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker186632)"
d="m 168.4423,425.3584 h 42.91671"
d="m 168.4423,476.73688 h 42.91671"
id="path186605"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker186632)"
d="m 168.4423,408.7458 h 43.23445"
d="m 168.4423,460.12428 h 43.23445"
id="path186607"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker186632)"
d="m 168.4423,392.1332 h 42.70594"
d="m 168.4423,443.51168 h 42.70594"
id="path186609"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker101675);marker-end:url(#marker195364)"
d="M 96.114809,269.68922 H 164.77638 V 603.7381 h 29.91519"
d="m 96.114809,269.68922 h 68.661571 l 0.23374,384.41142 h 29.91519"
id="path192396"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker195364)"
d="m 164.86598,586.92587 h 29.56165"
d="m 164.86598,637.2995 h 29.56165"
id="path192796"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker195364)"
d="m 164.86598,569.43903 h 29.56165"
d="m 164.86598,619.81266 h 29.56165"
id="path192798"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker195364)"
d="m 164.86598,523.65294 h 29.56165"
d="m 164.86598,575.44334 h 29.56165"
id="path192800"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker195364)"
d="m 164.86598,505.13711 h 29.56165"
d="m 164.86598,556.92751 h 29.56165"
id="path192802"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker195364)"
d="m 164.86598,488.5903 h 29.56165"
d="m 164.86598,540.3807 h 29.56165"
id="path192804"
sodipodi:nodetypes="cc" />
<path
@ -723,19 +723,19 @@
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="m 365.39982,218.98347 h -28.80494 v 414.1129 h -14.76054"
d="M 365.39982,218.98347 H 336.59488 V 683.53009 H 321.83434"
id="path65277"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="M 336.67172,472.11312 H 321.83434"
d="M 336.67172,522.42526 H 321.83434"
id="path65279"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="M 336.55811,375.27147 H 321.83434"
d="m 336.59488,427.83526 h -3.6272 v -1.95102 h -11.13334"
id="path65281"
sodipodi:nodetypes="cc" />
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="M 336.61441,297.02788 H 321.83434"
@ -753,17 +753,17 @@
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="m 389.78836,376.97047 h -50.88372 v 1.81264 h -17.0703"
d="m 389.78836,376.97047 h -51.78918 v 52.42541 h -16.16484"
id="path109859"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker150781)"
d="m 389.78836,409.59106 h -47.50562 v 66.26451 h -20.4484"
d="m 389.78836,409.59106 h -47.50562 v 116.57665 h -20.4484"
id="path112731"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="m 342.28274,445.96589 v 109.59405 h -20.4484"
d="M 342.28274,445.96589 V 606.2672 h -20.4484"
id="path112733"
sodipodi:nodetypes="ccc" />
<path
@ -798,45 +798,75 @@
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker101675);marker-end:url(#marker195364)"
d="m 96.114809,286.20221 h 65.136631 v 414.42902 h 27.46387"
d="M 96.114809,303.21735 H 161.25144 V 751.0645 h 27.46387"
id="path4481"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker180768)"
d="M 161.22338,350.33023 H 188.6919"
d="M 161.22338,349.86657 H 188.6919"
id="path5533"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="M 336.67172,551.88875 H 321.83434"
d="M 336.67172,602.59601 H 321.83434"
id="path8649"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker150781)"
d="M 389.78836,392.91504 H 339.44968 V 636.81969 H 321.83434"
d="M 389.78836,392.91504 H 339.44968 V 687.25341 H 321.83434"
id="path9765"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker195364)"
d="m 161.21144,683.95211 h 27.50387"
d="m 161.21144,734.5181 h 27.50387"
id="path10505"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker195364)"
d="m 161.21144,667.36263 h 27.50387"
d="m 161.21144,717.92862 h 27.50387"
id="path10521"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker195364)"
d="m 161.21144,650.88733 h 27.50387"
d="m 161.21144,701.45332 h 27.50387"
id="path10523"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 28.193253,285.6955 H 6.9406721"
id="path2020"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker180768)"
d="M 161.22338,330.81919 H 188.6919"
id="path7851"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker180768)"
d="M 161.22338,314.04119 H 188.6919"
id="path7853"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker101675);marker-end:url(#marker180768)"
d="m 99.319036,285.93165 h 75.850324 v 112.08774 h 13.53058"
id="path8235"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker180768)"
d="M 175.16936,381.22375 H 188.6919"
id="path8237"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0080ff;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker180768)"
d="M 175.16936,364.42811 H 188.6919"
id="path8239"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:label="Étiquettes"
inkscape:groupmode="layer"
id="layer1"
transform="translate(20.813414,89.432822)"
transform="translate(20.813412,89.432822)"
style="display:inline">
<g
id="g31324"
@ -1139,7 +1169,7 @@
</g>
<g
id="g47879"
transform="translate(151.16522,173.78546)">
transform="translate(151.16522,224.4444)">
<g
id="g24930"
transform="translate(53.238806,165.44248)">
@ -1266,7 +1296,7 @@
</g>
<g
id="g47923"
transform="translate(151.16522,270.46341)">
transform="translate(151.16522,321.12235)">
<g
id="g47887"
transform="translate(35.779051,165.44249)">
@ -1370,7 +1400,7 @@
</g>
<g
id="g71566"
transform="translate(151.16522,350.58107)">
transform="translate(151.16522,401.24001)">
<g
id="g71538"
transform="translate(35.779051,165.44249)">
@ -1622,135 +1652,9 @@
y="55.650307">inclusions.php</tspan></text>
</g>
</g>
<g
id="g1500">
<g
id="g74388"
transform="translate(19.726358,181.61251)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect74382"
width="68.349136"
height="10.80508"
x="9.6936798"
y="48.399471"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.001895"
y="55.650307"
id="text74386"><tspan
sodipodi:role="line"
id="tspan74384"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.001895"
y="55.650307">alias_virtuels.php</tspan></text>
</g>
<g
id="g77655"
transform="translate(19.18882,198.54975)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect77649"
width="55.657185"
height="10.80508"
x="10.231222"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.001895"
y="55.650307"
id="text77653"><tspan
sodipodi:role="line"
id="tspan77651"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.001895"
y="55.650307">domaines.php</tspan></text>
</g>
<g
id="g80126"
transform="translate(19.37483,215.2906)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect80120"
width="65.282738"
height="10.80508"
x="10.045211"
y="48.399471"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.001895"
y="55.650307"
id="text80124"><tspan
sodipodi:role="line"
id="tspan80122"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.001895"
y="55.650307">listes_noires.php</tspan></text>
</g>
<rect
style="fill:none;stroke:#666666;stroke-width:1;stroke-opacity:1"
id="rect5361"
width="91.798279"
height="83.531204"
x="17.695467"
y="213.83429"
ry="5.0293026" />
<g
id="g5369"
transform="translate(7.4664,165.533)">
<rect
style="fill:#ffffff;stroke:#666666;stroke-width:1;stroke-opacity:1"
id="rect5363"
width="66.44062"
height="10.80508"
x="10.110152"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.28232"
y="55.650307"
id="text5367"><tspan
sodipodi:role="line"
id="tspan5365"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.28232"
y="55.650307">services/gestion/</tspan></text>
</g>
<g
id="g10093"
transform="translate(19.490107,232.2932)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect10087"
width="62.380848"
height="10.80508"
x="9.9299335"
y="48.301285"
ry="4.8241234" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="12.77237"
y="55.650307"
id="text10091"><tspan
sodipodi:role="line"
id="tspan10089"
style="font-size:7.05556px;stroke-width:0.264583"
x="12.77237"
y="55.650307">parametres.php</tspan></text>
</g>
</g>
<g
id="g771"
transform="translate(151.16522,431.37562)">
transform="translate(151.16522,482.03456)">
<g
id="g735"
transform="translate(31.109508,165.44248)">
@ -1875,109 +1779,6 @@
y="55.650307">importDonneesBdd.php</tspan></text>
</g>
</g>
<g
id="g9022">
<g
id="g91365"
transform="translate(180.50947,293.81661)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect91359"
width="82.683273"
height="10.80508"
x="10.323042"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.02274"
y="55.650307"
id="text91363"><tspan
sodipodi:role="line"
id="tspan91361"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.02274"
y="55.650307">changeUtilisateur.php</tspan></text>
</g>
<rect
style="fill:none;stroke:#666666;stroke-width:1;stroke-opacity:1"
id="rect91367"
width="135.34937"
height="68.879616"
x="184.20288"
y="291.39462"
ry="5.0293026" />
<g
id="g91375"
transform="translate(175.38219,242.73047)">
<rect
style="fill:#ffffff;stroke:#666666;stroke-width:1;stroke-opacity:1"
id="rect91369"
width="124.31111"
height="10.80508"
x="8.9239988"
y="48.399471"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="12.617968"
y="55.650307"
id="text91373"><tspan
sodipodi:role="line"
id="tspan91371"
style="font-size:7.05556px;stroke-width:0.264583"
x="12.617968"
y="55.650307">services/traitements/utilisateurs/</tspan></text>
</g>
<g
id="g1279"
transform="translate(180.50947,277.02097)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect1273"
width="107.38751"
height="10.80508"
x="10.323042"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.02274"
y="55.650307"
id="text1277"><tspan
sodipodi:role="line"
id="tspan1275"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.02274"
y="55.650307">changePrefixeUtilisateur.php</tspan></text>
</g>
<g
id="g1287"
transform="translate(180.50947,260.22533)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect1281"
width="125.47025"
height="10.80508"
x="10.323042"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.02274"
y="55.650307"
id="text1285"><tspan
sodipodi:role="line"
id="tspan1283"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.02274"
y="55.650307">changeMotDePasseUtilisateur.php</tspan></text>
</g>
</g>
<g
id="g11270">
<g
@ -2127,5 +1928,336 @@
y="55.55212">import_export.php</tspan></text>
</g>
</g>
<g
id="g1653">
<g
id="g74388"
transform="translate(19.726358,181.61251)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect74382"
width="68.349136"
height="10.80508"
x="9.6936798"
y="48.399471"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.001895"
y="55.650307"
id="text74386"><tspan
sodipodi:role="line"
id="tspan74384"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.001895"
y="55.650307">alias_virtuels.php</tspan></text>
</g>
<g
id="g77655"
transform="translate(19.18882,198.54975)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect77649"
width="55.657185"
height="10.80508"
x="10.231222"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.001895"
y="55.650307"
id="text77653"><tspan
sodipodi:role="line"
id="tspan77651"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.001895"
y="55.650307">domaines.php</tspan></text>
</g>
<g
id="g80126"
transform="translate(19.37483,215.2906)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect80120"
width="65.282738"
height="10.80508"
x="10.045211"
y="48.399471"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.001895"
y="55.650307"
id="text80124"><tspan
sodipodi:role="line"
id="tspan80122"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.001895"
y="55.650307">listes_noires.php</tspan></text>
</g>
<rect
style="fill:none;stroke:#666666;stroke-width:1;stroke-opacity:1"
id="rect5361"
width="91.798279"
height="101.70321"
x="17.695467"
y="213.83429"
ry="5.0293026" />
<g
id="g5369"
transform="translate(7.4664,165.533)">
<rect
style="fill:#ffffff;stroke:#666666;stroke-width:1;stroke-opacity:1"
id="rect5363"
width="66.44062"
height="10.80508"
x="10.110152"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.28232"
y="55.650307"
id="text5367"><tspan
sodipodi:role="line"
id="tspan5365"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.28232"
y="55.650307">services/gestion/</tspan></text>
</g>
<g
id="g10093"
transform="translate(19.490107,249.06687)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect10087"
width="62.380848"
height="10.80508"
x="9.9299335"
y="48.301285"
ry="4.8241234" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="12.77237"
y="55.650307"
id="text10091"><tspan
sodipodi:role="line"
id="tspan10089"
style="font-size:7.05556px;stroke-width:0.264583"
x="12.77237"
y="55.650307">parametres.php</tspan></text>
</g>
<g
id="g1370"
transform="translate(19.37483,232.12964)">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect1364"
width="65.282738"
height="10.80508"
x="10.045211"
y="48.399471"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.001895"
y="55.650307"
id="text1368"><tspan
sodipodi:role="line"
id="tspan1366"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.001895"
y="55.650307">utilisateurs.php</tspan></text>
</g>
</g>
<g
id="g8653"
style="display:inline"
transform="translate(-20.813414,-89.432822)">
<g
id="g91365"
transform="translate(201.32288,383.24943)"
style="display:inline">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect91359"
width="82.683273"
height="10.80508"
x="10.323042"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.02274"
y="55.650307"
id="text91363"><tspan
sodipodi:role="line"
id="tspan91361"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.02274"
y="55.650307">changeUtilisateur.php</tspan></text>
</g>
<rect
style="display:inline;fill:none;stroke:#666666;stroke-width:1;stroke-opacity:1"
id="rect91367"
width="135.34937"
height="118.62074"
x="184.20288"
y="291.39462"
ry="5.0293026"
transform="translate(20.813414,89.432823)" />
<g
id="g91375"
transform="translate(196.1956,332.16329)"
style="display:inline">
<rect
style="fill:#ffffff;stroke:#666666;stroke-width:1;stroke-opacity:1"
id="rect91369"
width="124.31111"
height="10.80508"
x="8.9239988"
y="48.399471"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="12.617968"
y="55.650307"
id="text91373"><tspan
sodipodi:role="line"
id="tspan91371"
style="font-size:7.05556px;stroke-width:0.264583"
x="12.617968"
y="55.650307">services/traitements/utilisateurs/</tspan></text>
</g>
<g
id="g1279"
transform="translate(201.32288,366.45379)"
style="display:inline">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect1273"
width="107.38751"
height="10.80508"
x="10.323042"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.02274"
y="55.650307"
id="text1277"><tspan
sodipodi:role="line"
id="tspan1275"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.02274"
y="55.650307">changePrefixeUtilisateur.php</tspan></text>
</g>
<g
id="g1287"
transform="translate(201.32288,349.65815)"
style="display:inline">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect1281"
width="125.47025"
height="10.80508"
x="10.323042"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.02274"
y="55.650307"
id="text1285"><tspan
sodipodi:role="line"
id="tspan1283"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.02274"
y="55.650307">changeMotDePasseUtilisateur.php</tspan></text>
</g>
<g
id="g3243"
transform="translate(201.32288,400.04507)"
style="display:inline">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect3237"
width="82.683273"
height="10.80508"
x="10.323042"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.02274"
y="55.650307"
id="text3241"><tspan
sodipodi:role="line"
id="tspan3239"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.02274"
y="55.650307">ajoutUtilisateur.php</tspan></text>
</g>
<g
id="g3251"
transform="translate(201.32288,416.84071)"
style="display:inline">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect3245"
width="82.683273"
height="10.80508"
x="10.323042"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.02274"
y="55.650307"
id="text3249"><tspan
sodipodi:role="line"
id="tspan3247"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.02274"
y="55.650307">editUtilisateur.php</tspan></text>
</g>
<g
id="g3259"
transform="translate(201.32288,433.63635)"
style="display:inline">
<rect
style="fill:#ffffff;stroke:#0080ff;stroke-width:1;stroke-opacity:1"
id="rect3253"
width="82.683273"
height="10.80508"
x="10.323042"
y="48.301285"
ry="5.0293026" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="13.02274"
y="55.650307"
id="text3257"><tspan
sodipodi:role="line"
id="tspan3255"
style="font-size:7.05556px;stroke-width:0.264583"
x="13.02274"
y="55.650307">supprUtilisateur.php</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 88 KiB

@ -48,11 +48,15 @@ if (isset($_GET['page']) && !empty($_GET['page'])) {
case 'listes_noires':
require_once($_SERVER["DOCUMENT_ROOT"]."/services/gestion/listes_noires.php");
break;
case 'utilisateurs':
require_once($_SERVER["DOCUMENT_ROOT"]."/services/gestion/utilisateurs.php");
break;
case 'parametres':
require_once($_SERVER["DOCUMENT_ROOT"]."/services/gestion/parametres.php");
break;
default:
http_response_code(404);
echo "<h1>Cette page n'existe pas.</h1>";
break;
}

@ -5,15 +5,14 @@
*/
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
/**
* Fonction listant les alias virtuels d'un utilisateur.
*/
function listeAliasVirtuelsPostfix($pdo) {
function listeAliasVirtuelsBdd($pdo) {
try {
// Filtre des alias virtuels de l'utilisateur courant
$req = 'SELECT * FROM postfix_alias_virtuels WHERE destination=:destination ORDER BY courriel ASC';
$req = 'SELECT * FROM postfix_alias_virtuels WHERE destination=:destination ORDER BY id DESC';
$sql=$pdo->prepare($req);
$sql->bindValue(':destination',$_SESSION['pseudo_utilisateur']);
$sql->execute();
@ -29,7 +28,7 @@ function listeAliasVirtuelsPostfix($pdo) {
/**
* Fonction listant tous les alias virtuels de la base.
*/
function listeTousAliasVirtuelsPostfix($pdo) {
function listeTousAliasVirtuelsBdd($pdo) {
try {
$req = 'SELECT * FROM postfix_alias_virtuels';
$sql=$pdo->prepare($req);
@ -46,14 +45,14 @@ function listeTousAliasVirtuelsPostfix($pdo) {
/**
* Fonction d'ajout d'un alias virtuel.
*/
function ajoutAliasVirtuelsPostfix($pdo,$nom_alias_virtuel,$choix_domaine_alias_virtuel) {
function ajoutAliasVirtuelsBdd($pdo,$nom_alias_virtuel,$choix_domaine_alias_virtuel) {
try {
// Insertion de l'alias virtuel entré par l'utilisateur et lié avec son adresse
$req='INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES (:alias_virtuel,:courriel,1)';
$sql=$pdo->prepare($req);
$sql->bindValue(':courriel',$_SESSION['pseudo_utilisateur']);
$sql->bindValue(':alias_virtuel',substr(htmlspecialchars(retournePrefixeUtilisateurPostfix($pdo,$_SESSION['pseudo_utilisateur']).$nom_alias_virtuel."@".$choix_domaine_alias_virtuel),0,100));
$sql->bindValue(':alias_virtuel',substr(htmlspecialchars(retournePrefixeUtilisateurBdd($pdo,$_SESSION['pseudo_utilisateur']).$nom_alias_virtuel."@".$choix_domaine_alias_virtuel),0,100));
$sql->execute();
if ($sql->rowCount() == 1){
@ -69,7 +68,7 @@ function ajoutAliasVirtuelsPostfix($pdo,$nom_alias_virtuel,$choix_domaine_alias_
$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 "courriel" de la table "postif_alias_virtuels" est violée. L'alias envoyé via le formulaire par l'utilisateur a déjà été renseigné dans la base
// Code de retour envoyé par le pilote PDO SQLite signifiant que la contrainte "UNIQUE" du champ "courriel" de la table "postfix_alias_virtuels" est violée. L'alias envoyé via le formulaire par l'utilisateur a déjà été renseigné dans la base
header ("Location: /pages/gestion/administration.php?page=alias&erreur=3");
die();
}
@ -90,10 +89,11 @@ function ajoutAliasVirtuelsPostfix($pdo,$nom_alias_virtuel,$choix_domaine_alias_
* Suite à une soumission du formulaire dédié, cette fonction va traiter l'ensemble des alias virtuels d'un utilisateur.
* Elle occasionnera peut-être des baisses de performance si un très grand nombre d'alias virtuels existe pour un utilisateur donné (le traitement n'intervenant pas spécifiquement pour l'entrée modifiée).
*/
function modifEtatAliasVirtuelsPostfix($pdo,$retour_form) {
function modifEtatAliasVirtuelsBdd($pdo,$retour_form) {
try {
$compteModifs=0;
foreach ($retour_form as $id_alias_virtuel => $etat_alias_virtuel) {
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);
@ -103,6 +103,7 @@ function modifEtatAliasVirtuelsPostfix($pdo,$retour_form) {
$sql->execute();
}
}
}
catch (\Exception $e) {
// Récupération du code de retour de la commande SQLite
$code_retour=$sql->errorInfo();
@ -122,7 +123,7 @@ function modifEtatAliasVirtuelsPostfix($pdo,$retour_form) {
/**
* Fonction de suppression d'un alias virtuel.
*/
function supprAliasVirtuelsPostfix($pdo,$suppr_alias_virtuel) {
function supprAliasVirtuelsBdd($pdo,$suppr_alias_virtuel) {
try {
$req='DELETE FROM postfix_alias_virtuels WHERE id=:id_alias_virtuel AND destination=:pseudo_utilisateur';
@ -154,4 +155,40 @@ function supprAliasVirtuelsPostfix($pdo,$suppr_alias_virtuel) {
}
}
/**
* Fonction de suppression de tous les alias virtuels d'un utilisateur (à la suppression de celui-ci).
*/
function supprTousAliasVirtuelsUtilisateurBdd($pdo,$id_utilisateur) {
try {
$req='DELETE FROM postfix_alias_virtuels WHERE destination IN (SELECT utilisateur FROM postfix_utilisateurs WHERE id=:id_utilisateur);';
$sql=$pdo->prepare($req);
$sql->bindValue(':id_utilisateur',$id_utilisateur);
$sql->execute();
$code_retour=$sql->errorInfo();
if ($code_retour[0]=="00000") {
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=alias&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 des alias virtuels de l'utilisateur : ".$e->getMessage());
}
}
}
?>

@ -9,7 +9,7 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php")
/**
* Fonction listant les domaines.
*/
function listeDomainesPostfix($pdo) {
function listeDomainesBdd($pdo) {
try {
$req = 'SELECT * FROM postfix_domaines ORDER BY defaut DESC';
@ -27,7 +27,7 @@ function listeDomainesPostfix($pdo) {
/**
* Fonction affichant le domaine par défaut.
*/
function retourneDomaineDefautPostfix($pdo) {
function retourneDomaineDefautBdd($pdo) {
try {
$req = 'SELECT domaine FROM postfix_domaines WHERE defaut=1 LIMIT 1';
@ -54,7 +54,7 @@ function retourneDomaineDefautPostfix($pdo) {
/**
* Fonction changeant le domaine par défaut.
*/
function changeDomaineDefautPostfix($pdo,$choix_domaine_defaut) {
function changeDomaineDefautBdd($pdo,$choix_domaine_defaut) {
try {
// suppression du status de domaine par défaut sur tous les domaines pour s'assurer de l'unicité de ce paramètre à la requête suivante
$req = 'UPDATE postfix_domaines SET defaut=0';
@ -89,7 +89,7 @@ function changeDomaineDefautPostfix($pdo,$choix_domaine_defaut) {
/**
* Fonction d'ajout d'un domaine.
*/
function ajoutDomainePostfix($pdo,$nom_domaine) {
function ajoutDomaineBdd($pdo,$nom_domaine) {
try {
// Insertion du domaine entré par l'administrateur
$req='INSERT INTO postfix_domaines (domaine,defaut,active) VALUES (:domaine,0,1)';
@ -132,7 +132,7 @@ function ajoutDomainePostfix($pdo,$nom_domaine) {
* Suite à une soumission du formulaire dédié, cette fonction va traiter l'ensemble des domaines d'un utilisateur.
* Elle occasionnera peut-être des baisses de performance si un très grand nombre de domaines existe pour un utilisateur donné (le traitement n'intervenant pas spécifiquement pour l'entrée modifiée).
*/
function modifEtatDomainesPostfix($pdo,$retour_form) {
function modifEtatDomainesBdd($pdo,$retour_form) {
try {
$compteModifs=0;
foreach ($retour_form as $id_domaine => $etat_domaine) {
@ -163,7 +163,7 @@ function modifEtatDomainesPostfix($pdo,$retour_form) {
/**
* Fonction de suppression d'un domaine.
*/
function supprDomainesPostfix($pdo,$suppr_domaine) {
function supprDomainesBdd($pdo,$suppr_domaine) {
try {
$req='DELETE FROM postfix_domaines WHERE id=:id_domaine AND defaut!=1';

@ -5,7 +5,6 @@
*/
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
/**
* Fonction générant un fichier CSV avec le contenu des alias virtuels d'un utilisateur.

@ -10,7 +10,7 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php")
/**
* Fonction listant les entrées de la liste noire des destinataires.
*/
function listeEntreeListeNoireDstPostfix($pdo) {
function listeEntreeListeNoireDstBdd($pdo) {
try {
$req = 'SELECT * FROM postfix_liste_noire_destinataires';
@ -28,7 +28,7 @@ function listeEntreeListeNoireDstPostfix($pdo) {
/**
* Fonction listant les entrées de la liste noire des expéditeurs.
*/
function listeEntreeListeNoireExpPostfix($pdo) {
function listeEntreeListeNoireExpBdd($pdo) {
try {
$req = 'SELECT * FROM postfix_liste_noire_expediteurs';
@ -46,7 +46,7 @@ function listeEntreeListeNoireExpPostfix($pdo) {
/**
* Fonction d'ajout d'une entrée de liste noir destinataire.
*/
function ajoutEntreeListeNoireDstPostfix($pdo,$courriel_entree_liste_noire_dst,$action_entree_liste_noire_dst) {
function ajoutEntreeListeNoireDstBdd($pdo,$courriel_entree_liste_noire_dst,$action_entree_liste_noire_dst) {
try {
// Insertion de l'entrée de liste noire de destinataires renseignée par l'administrateur
$req='INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES (:courriel,:action,1)';
@ -87,7 +87,7 @@ function ajoutEntreeListeNoireDstPostfix($pdo,$courriel_entree_liste_noire_dst,$
/**
* Fonction d'ajout d'une entrée de liste noir expéditeurs.
*/
function ajoutEntreeListeNoireExpPostfix($pdo,$courriel_entree_liste_noire_exp,$code_retour_entree_liste_noire_exp) {
function ajoutEntreeListeNoireExpBdd($pdo,$courriel_entree_liste_noire_exp,$code_retour_entree_liste_noire_exp) {
try {
// Insertion de l'entrée de liste noire d'expéditeurs renseignée par l'administrateur
$req='INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES (:courriel,:code_retour,"Votre message a été rejeté par le serveur car votre adresse est en liste noire.",1)';
@ -129,7 +129,7 @@ function ajoutEntreeListeNoireExpPostfix($pdo,$courriel_entree_liste_noire_exp,$
* Suite à une soumission du formulaire dédié, cette fonction va traiter l'ensemble des entrées de la liste noire des destinataires du serveur.
* Elle occasionnera peut-être des baisses de performance si un très grand d'entrées existent (le traitement n'intervenant pas spécifiquement pour l'entrée modifiée).
*/
function modifEntreeListeNoireDstPostfix($pdo,$retour_form) {
function modifEntreeListeNoireDstBdd($pdo,$retour_form) {
try {
$compteModifs=0;
foreach ($retour_form as $id_entree_liste_noire_dst => $etat_entree_liste_noire_dst) {
@ -162,7 +162,7 @@ function modifEntreeListeNoireDstPostfix($pdo,$retour_form) {
* Suite à une soumission du formulaire dédié, cette fonction va traiter l'ensemble des entrées de la liste noire des expéditeurs du serveur.
* Elle occasionnera peut-être des baisses de performance si un très grand d'entrées existent (le traitement n'intervenant pas spécifiquement pour l'entrée modifiée).
*/
function modifEntreeListeNoireExpPostfix($pdo,$retour_form) {
function modifEntreeListeNoireExpBdd($pdo,$retour_form) {
try {
$compteModifs=0;
foreach ($retour_form as $id_entree_liste_noire_exp => $etat_entree_liste_noire_exp) {
@ -193,7 +193,7 @@ function modifEntreeListeNoireExpPostfix($pdo,$retour_form) {
/**
* Fonction de suppression d'une entrée de liste noire de destinataires.
*/
function supprEntreeListeNoireDstPostfix($pdo) {
function supprEntreeListeNoireDstBdd($pdo) {
try {
$req='DELETE FROM postfix_liste_noire_destinataires WHERE id=:id_entree_liste_noire_dst';
@ -227,7 +227,7 @@ function supprEntreeListeNoireDstPostfix($pdo) {
/**
* Fonction de suppression d'une entrée de liste noire d'expéditeurs.
*/
function supprEntreeListeNoireExpPostfix($pdo) {
function supprEntreeListeNoireExpBdd($pdo) {
try {
$req='DELETE FROM postfix_liste_noire_expediteurs WHERE id=:id_entree_liste_noire_exp';

@ -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) {
function listeTousUtilisateursBdd($pdo) {
try {
$req = 'SELECT utilisateur FROM postfix_utilisateurs';
$req = 'SELECT * FROM postfix_utilisateurs';
$sql=$pdo->prepare($req);
$sql->execute();
@ -23,10 +24,75 @@ 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.
*/
function verificationMotDePasseUtilisateurPostfix($pdo,$identifiant,$mdp) {
function verificationMotDePasseUtilisateurBdd($pdo,$identifiant,$mdp) {
try {
$req = 'SELECT mot_de_passe FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
@ -63,7 +129,7 @@ function verificationMotDePasseUtilisateurPostfix($pdo,$identifiant,$mdp) {
/**
* Fonction changeant le mot de passe d'un utilisateur.
*/
function changeMotDePasseUtilisateurPostfix($pdo,$utilisateur,$nouveau_mdp,$confirmation_mdp) {
function changeMotDePasseUtilisateurBdd($pdo,$utilisateur,$nouveau_mdp,$confirmation_mdp) {
if ($nouveau_mdp===$confirmation_mdp) {
$caracters = '.0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$chaine_aleatoire = '';
@ -97,7 +163,7 @@ function changeMotDePasseUtilisateurPostfix($pdo,$utilisateur,$nouveau_mdp,$conf
/**
* Fonction listant le préfixe de l'utilisateur courant.
*/
function retournePrefixeUtilisateurPostfix($pdo,$utilisateur) {
function retournePrefixeUtilisateurBdd($pdo,$utilisateur) {
try {
$req = 'SELECT prefixe FROM postfix_utilisateurs WHERE utilisateur=:utilisateur';
$sql=$pdo->prepare($req);
@ -122,7 +188,7 @@ function retournePrefixeUtilisateurPostfix($pdo,$utilisateur) {
/**
* Fonction changeant le préfixe d'un utilisateur.
*/
function changePrefixeUtilisateurPostfix($pdo,$utilisateur,$nouveau_prefixe) {
function changePrefixeUtilisateurBdd($pdo,$utilisateur,$nouveau_prefixe) {
try {
$req = 'UPDATE postfix_utilisateurs SET prefixe=:nouveau_prefixe WHERE utilisateur=:utilisateur';
$sql=$pdo->prepare($req);
@ -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());
}
}
}
?>

@ -25,8 +25,8 @@ function retourneMessage($type_message,$num_message) {
6 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Domaine modifiés avec succès.</div>",
7 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Domaine supprimé avec succès.</div>",
8 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Domaine défini par défaut avec succès.</div>",
9 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire destiataires a été créée avec succès.</div>",
10 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'état de l'entrée de liste noire destiataires a été modifié avec succès.</div>",
9 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire destinataires a été créée avec succès.</div>",
10 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'état de l'entrée de liste noire destinataires a été modifié avec succès.</div>",
11 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire destinataires a été supprimée avec succès.</div>",
12 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire expéditeurs a été créée avec succès.</div>",
13 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'état de l'entrée de liste noire expéditeurs a été modifié avec succès.</div>",
@ -35,7 +35,10 @@ function retourneMessage($type_message,$num_message) {
16 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Le mot de passe de $pseudo_utilisateur a bien été changé.</div>",
17 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Le préfixe de $pseudo_utilisateur a bien été changé.</div>",
18 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Vos données ont bien étés importés. Les doublons ainsi que les données erronées ont étés ignorés.</div>",
19 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Vos données ont bien étés importés. Veuillez vous ré-identifier.</div>"),
19 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Vos données ont bien étés importés. Veuillez vous ré-identifier.</div>",
20 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'utilisateur a bien été créé.</div>",
21 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'utilisateur a bien été supprimé.</div>",
22 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Les données utilisateur ont bien étés mises à jour.</div>"),
"erreurs" => array(
1 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun alias virtuel supprimé.</div>",
2 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun alias virtuel créé car une donnée est erronée ou manquante.</div>",
@ -57,10 +60,16 @@ function retourneMessage($type_message,$num_message) {
18 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Vous n'avez pas les privilèges nécessaires.</div>",
19 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Erreur non gérée.</div>",
20 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'ancien mot de passe renseigné est erroné.</div>",
21 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Le mot de passe de confimation n'est pas identique au nouveau mot de passe.</div>",
21 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Le mot de passe de confirmation n'est pas identique au nouveau mot de passe.</div>",
22 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Une erreur s'est produite lors de l'envoi du fichier. Il doit être de type CSV de moins de 2 Mo et avoir été généré par Courtail.</div>",
23 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Votre fichier d'import CSV est plus grand que 2 Mo.</div>",
24 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Auncun type de donnée n'a été spécifié pour l'importation.</div>"),
24 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun type de donnée n'a été spécifié pour l'importation.</div>",
25 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> L'utilisateur est déjà existant.</div>",
26 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Le domaine indiqué n'existe pas.</div>",
27 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Le privilège indiqué n'existe pas.</div>",
28 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Aucun utilisateur supprimé.</div>",
29 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Erreur lors de la suppression des alias virtuels de l'utilisateur. Utilisateur non supprimé.</div>",
30 => "<div class=\"alert alert-danger\" role=\"alert\"><img src=\"/fichiers/svg/alert-triangle.svg\"/> Votre accès a été révoqué par un administrateur suite à la désactivation de votre compte.</div>"),
"messages" => array(
"bienvenue" => "<div class=\"alert alert-primary\" role=\"alert\"><img src=\"/fichiers/svg/info.svg\"/> Bienvenue ".$nom_utilisateur.". Vous êtes authentifié en tant qu'".$privilege_utilisateur.".</div>")
);

@ -18,7 +18,7 @@ function validationIdentifiants($pdo,$identifiant,$mdp) {
$req = 'SELECT * FROM postfix_utilisateurs WHERE utilisateur=:identifiant';
if (!strpos($identifiant, '@')) {
$identifiant.="@".retourneDomaineDefautPostfix($pdo);
$identifiant.="@".retourneDomaineDefautBdd($pdo);
}
$sql = $pdo->prepare($req);
@ -63,7 +63,12 @@ function validationIdentifiants($pdo,$identifiant,$mdp) {
function initValeursSession($result) {
$_SESSION['id_utilisateur'] = $result[0]['id'];
$_SESSION['pseudo_utilisateur'] = $result[0]['utilisateur'];
if (!empty($result[0]['nom_complet'])) {
$_SESSION['nom_utilisateur'] = $result[0]['nom_complet'];
}
else {
$_SESSION['nom_utilisateur'] = $result[0]['utilisateur'];
}
$_SESSION['privilege_utilisateur'] = $result[0]['privilege'];
$_SESSION['pseudo_connexion_utilisateur'] = $result[0]['utilisateur'];
}

@ -4,17 +4,35 @@
* Page de fonctions permettant la vérification des permission d'un utilisateur ou d'un visiteur.
*/
// Importation des fonctions utilisateurs afin de pouvoir en lister les données plus bas (fonction listeUtilisateurBdd).
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
$infos_utilisateur = listeUtilisateurBdd($pdo,$_SESSION['id_utilisateur']);
/**
* Fonction testant le niveau de privilège d'un utilisateur authentifié ou non.
* Elle vérifie le privilège de l'utilisateur connecté et retourne la valeur adéquate.
* Si un visiteur ou un utilisateur ne remplis pas la bonne condition, il est redirigé à la page d'accueil avec un message expllicatif.
* Cette fonction devrait être appelée dans toute page de traitement.
*/
function testPrivileges(){
function testPrivileges() {
// Utilisation d'une fonction listant les données d'un utilisateur afin de savoir s'il est activé ou non. Ceci permet de déconnecter un utilisateur automatiquement à la prochaine page visité si celui-ci a été désactivé par un administrateur.
global $pdo;
$infos_utilisateur = listeUtilisateurBdd($pdo,$_SESSION['id_utilisateur']);
if (isset($_SESSION['id_utilisateur']) && !empty($_SESSION['id_utilisateur']) && $_SESSION['privilege_utilisateur']=="administrateur") {
if (!isset($infos_utilisateur[0]["active"]) || $infos_utilisateur[0]["active"]!=="1") {
header("Location: /services/traitements/utilisateurs/deconnexion.php?erreur=30");
die();
}
return "administrateur";
}
elseif (isset($_SESSION['id_utilisateur']) && !empty($_SESSION['id_utilisateur']) && $_SESSION['privilege_utilisateur']=="utilisateur") {
if (!isset($infos_utilisateur[0]["active"]) || $infos_utilisateur[0]["active"]!=="1") {
header("Location: /services/traitements/utilisateurs/deconnexion.php?erreur=30");
die();
}
return "utilisateur";
}
else {

@ -8,9 +8,9 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels.php");
$liste_utilisateurs = listeUtilisateursPostfix($pdo);
$liste_domaines = listeDomainesPostfix($pdo);
$liste_alias_virtuels = listeAliasVirtuelsPostfix($pdo);
$liste_utilisateurs = listeTousUtilisateursBdd($pdo);
$liste_domaines = listeDomainesBdd($pdo);
$liste_alias_virtuels = listeAliasVirtuelsBdd($pdo);
/**
* Affiche le formulaire de selection d'un utilisateur si celui connecté possède les privilèges administrateur.
@ -50,7 +50,7 @@ _HEREDOC_;
_HEREDOC_;
}
?>
?>
<div class="col-12<?php if ($_SESSION['privilege_utilisateur']==="administrateur") {echo' col-md-6';}?>">
<div class="card mt-4 max-hauteur-pastille">
@ -63,7 +63,7 @@ _HEREDOC_;
/**
* Ajout d'un alias virtuel.
*/
$prefixe_utilisateur=retournePrefixeUtilisateurPostfix($pdo,$_SESSION['pseudo_utilisateur']);
$prefixe_utilisateur=retournePrefixeUtilisateurBdd($pdo,$_SESSION['pseudo_utilisateur']);
if (!empty($prefixe_utilisateur)) {
echo "<span class=\"input-group-text\">$prefixe_utilisateur</span>";
}
@ -85,10 +85,6 @@ _HEREDOC_;
?>
</select>
<!--<select name="choix_domaine_alias" onchange='document.getElementById("domaine_alias").innerHTML = this.options[this.selectedIndex].text'>
<option value=\"".$domaine['domaine']."\">".$domaine['domaine']."</option>
</select>
<p id="domaine_alias"><?php //echo $liste_domaines[0]["domaine"]; ?></p>-->
<button class="btn btn-primary bouton-ajout" type="submit"><img src="/fichiers/svg/plus.svg"/></button>
</div>
</form>
@ -112,7 +108,8 @@ _HEREDOC_;
if (isset($alias_virtuels_valeurs['active']) && $alias_virtuels_valeurs['active']=="1") {
$etat_interrupteur_allumer="checked";
$etat_interrupteur_eteint="";
} else {
}
else {
$etat_interrupteur_eteint="checked";
$etat_interrupteur_allumer="";
}
@ -126,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>

@ -4,18 +4,15 @@
* Page de gestion importé par la page d'administration centrale permettant la gestion des domaines.
*/
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
if (testPrivileges()!=="administrateur") {
header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=18");
die();
}
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
$liste_domaines = listeDomainesPostfix($pdo);
$liste_domaines = listeDomainesBdd($pdo);
?>
<!-- Affichage et changement du domaine par défaut -->
<div class="row">
<div class="col-12 col-md-6">
<div class="card mt-4 max-hauteur-pastille">
@ -23,7 +20,8 @@ $liste_domaines = listeDomainesPostfix($pdo);
<h5 class="card-title">Domaine par défaut</h5>
<?php
$domaine_defaut = retourneDomaineDefautPostfix($pdo);
// Affichage et changement du domaine par défaut
$domaine_defaut = retourneDomaineDefautBdd($pdo);
if (empty($domaine_defaut)) {
echo <<<_HEREDOC_
<div class="alert alert-warning mb-2" role="alert"><img src="/fichiers/svg/alert-triangle-warning.svg"/>
@ -87,7 +85,8 @@ $liste_domaines = listeDomainesPostfix($pdo);
if (isset($liste_domaines_valeurs['active']) && $liste_domaines_valeurs['active']=="1") {
$etat_interrupteur_allumer="checked";
$etat_interrupteur_eteint="";
} else {
}
else {
$etat_interrupteur_eteint="checked";
$etat_interrupteur_allumer="";
}
@ -95,7 +94,8 @@ $liste_domaines = listeDomainesPostfix($pdo);
$etat_bouton="disabled";
$bordure_pastille="border-primary interieur-pastille-bleu";
$post_texte=" <span class=\"text-primary\">(défaut)</span>";
} else {
}
else {
$etat_bouton="";
$bordure_pastille="";
$post_texte="";
@ -110,9 +110,7 @@ $liste_domaines = listeDomainesPostfix($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>

@ -13,8 +13,8 @@ if (testPrivileges()!=="administrateur") {
}
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/listes_noires.php");
$liste_entrees_liste_noires_dst=listeEntreeListeNoireDstPostfix($pdo);
$liste_entrees_liste_noires_exp=listeEntreeListeNoireExpPostfix($pdo);
$liste_entrees_liste_noires_dst=listeEntreeListeNoireDstBdd($pdo);
$liste_entrees_liste_noires_exp=listeEntreeListeNoireExpBdd($pdo);
/**
* Permet d'inclure la page d'administration des listes noires déstinataires ou expéditeurs dédiée.
@ -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>

@ -6,19 +6,18 @@
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
$liste_utilisateurs = listeUtilisateursPostfix($pdo);
$prefixe_utilisateur = retournePrefixeUtilisateurPostfix($pdo,$_SESSION['pseudo_utilisateur']);
$liste_utilisateurs = listeTousUtilisateursBdd($pdo);
$prefixe_utilisateur = retournePrefixeUtilisateurBdd($pdo,$_SESSION['pseudo_utilisateur']);
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>

@ -0,0 +1,173 @@
<?php
/**
* Page de gestion importé par la page d'administration centrale permettant la gestion des utilisateurs.
*/
if (testPrivileges()!=="administrateur") {
header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=18");
die();
}
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
$liste_utilisateurs = listeTousUtilisateursBdd($pdo);
$liste_domaines = listeDomainesBdd($pdo);
/**
* Affiche le formulaire de selection d'un utilisateur si celui connecté possède les privilèges administrateur.
*/
if (testPrivileges()==="administrateur") {
echo <<<_HEREDOC_
<div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Ajout d'un utilisateur</h5>
<form id="form_choix_utilisateur" action="/services/traitements/utilisateurs/ajoutUtilisateur.php" method="post">
<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'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">
_HEREDOC_;
try {
foreach ($liste_domaines as $domaine_bdd => $domaine) {
echo "<option value=\"".$domaine['domaine']."\">".$domaine['domaine']."</option>\n";
}
}
catch (\Exception $e) {
die ("Erreur de requête de selection du domaine pour \"$base\" : ".$e->getMessage());
}
echo <<<_HEREDOC_
</select>
</div>
</div>
<div class="col-xl-2 col-4 pt-2">
<input type="password" class="form-control" name="mot_de_passe_utilisateur" placeholder="mot de passe *" title="Changement du mot de passe de l'utilisateur" required>
</div>
<div class="col-xl-2 col-4 pt-2 ps-0 pe-0">
<input class="form-control" type="text" name="nom_complet_utilisateur" placeholder="nom complet" title="Nom complet de l'utilisateur">
</div>
<div class="col-xl-2 col-4 pt-2">
<div class="input-group">
<select class="form-select" name="choix_privilege_utilisateur" title="Privilège de l'utilisateur" required>
<optgroup label="privilège">
<option value="utilisateur" title="Accès limité aux fonctionnalités">utilisateur</option>
<option value="administrateur" title="Accès complet et gestions des autres utilisateurs">administrateur</option>
</optgroup>
</select>
</div>
</div>
<div class="col-xl-1 col-12 pt-2">
<button class="btn btn-primary bouton-ajout" style="width: 100%;" type="submit">Appliquer</button>
</div>
</div>
</form>
</div>
</div>
_HEREDOC_;
}
?>
<div class="card mt-4">
<div class="card-body">
<h5 class="card-title">Utilisateurs du serveur</h5>
<form class="" action="/services/traitements/utilisateurs/editUtilisateur.php" method="post">
<div class="row" id="liste_pour_filtre">
<?php
/**
* Liste des utilisateurs.
*/
try {
$numero_entree=0;
foreach ($liste_utilisateurs as $utilisateurs_cles => $utilisateurs_valeurs) {
if (isset($utilisateurs_valeurs['active']) && $utilisateurs_valeurs['active']=="1") {
$etat_interrupteur_allumer="checked";
$etat_interrupteur_eteint="";
}
else {
$etat_interrupteur_eteint="checked";
$etat_interrupteur_allumer="";
}
if (isset($utilisateurs_valeurs['utilisateur']) && $utilisateurs_valeurs['utilisateur'] === $_SESSION['pseudo_connexion_utilisateur']) {
$etat_bouton_etat="disabled";
$etat_bouton_suppr="disabled";
}
else {
$etat_bouton_etat="";
$etat_bouton_suppr="";
}
echo <<<_HEREDOC_
<input type="hidden" name="utilisateur[{$numero_entree}][id_utilisateur]" value="{$utilisateurs_valeurs['id']}">
<div class="col-md-6 col-xl-4">
<div class="card contour-pastille">
<div class="d-flex interieur-pastille">
<div class="champ-interrupteur $etat_bouton_etat">
<input type="radio" name="utilisateur[{$numero_entree}][etat_utilisateur]" id="allumer{$utilisateurs_valeurs['id']}" value="1" {$etat_interrupteur_allumer}>
<label for="allumer{$utilisateurs_valeurs['id']}" class="interrupteur-allumer"></label>
<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>
_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>
<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>
<div>
<label class="input-label-supprimer-valeur btn btn-danger btn-sm $etat_bouton_suppr" for="supprimer-valeur-{$utilisateurs_valeurs['id']}"><img src="/fichiers/svg/trash-2.svg"></label>
</div>
</div>
<input type="checkbox" class="input-checkbox-detail-utilisateur visuellement-cache" id="detail-utilisateur-{$utilisateurs_valeurs['id']}">
<div class="detail-utilisateur card-footer">
<input class="form-control mt-2" type="text" name="utilisateur[{$numero_entree}][nom_complet_utilisateur]" value="{$utilisateurs_valeurs['nom_complet']}" placeholder="nom complet" title="Nom complet de l'utilisateur">
<input class="form-control mt-2" type="text" name="utilisateur[{$numero_entree}][prefixe_utilisateur]" value="{$utilisateurs_valeurs['prefixe']}" placeholder="prefixe" title="Texte s'ajoutant devant les alias de l'utilisateur afin de les discriminer de ceux des autres">
<input type="password" class="form-control mt-2" name="utilisateur[{$numero_entree}][mot_de_passe_utilisateur]" placeholder="nouveau mot de passe" title="Changement du mot de passe de l'utilisateur">
<input type="password" class="form-control mt-2" name="utilisateur[{$numero_entree}][confirmation_mot_de_passe_utilisateur]" placeholder="confirmation mot de passe" title="Confirmation du nouveau mot de passe">
<select class="form-select mt-2 mb-2" name="utilisateur[{$numero_entree}][choix_privilege_utilisateur]" title="Privilège de l'utilisateur">
<optgroup label="privilège">
_HEREDOC_;
echo "<option value=\"utilisateur\" title=\"Accès limité aux fonctionnalités\"";
if ($utilisateurs_valeurs['privilege']==="utilisateur") { echo " selected";};
echo ">utilisateur</option>";
echo "<option value=\"administrateur\" title=\"Accès complet et gestions des autres utilisateurs\"";
if ($utilisateurs_valeurs['privilege']==="administrateur") { echo " selected";};
echo ">administrateur</option>";
echo <<<_HEREDOC_
</optgroup>
</select>
</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>
</div>
_HEREDOC_;
$numero_entree++;
}
}
catch (\Exception $e) {
die ("Erreur de requête de selection utilisateurs pour \"$base\" : ".$e->getMessage());
}
?>
</div>
<button id="enregistrer-modifications" class="bouton-flotant" type="submit"><img src="/fichiers/svg/save.svg"/></button>
</form>
</div>
</div>

@ -14,10 +14,10 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.ph
// Permet le contrôle du domaine renseigné par l'utilisateur
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
$liste_domaines = listeDomainesPostfix($pdo);
$liste_domaines = listeDomainesBdd($pdo);
if (isset($_POST['nom_alias_virtuel']) && isset($_POST['choix_domaine_alias_virtuel']) && !empty($_POST['nom_alias_virtuel']) && !empty($_POST['choix_domaine_alias_virtuel']) && in_array($_POST['choix_domaine_alias_virtuel'],array_column($liste_domaines,'domaine'))) {
ajoutAliasVirtuelsPostfix($pdo,$_POST['nom_alias_virtuel'],$_POST['choix_domaine_alias_virtuel']);
ajoutAliasVirtuelsBdd($pdo,$_POST['nom_alias_virtuel'],$_POST['choix_domaine_alias_virtuel']);
header ("Location: /pages/gestion/administration.php?page=alias&succes=1");
die();
}

@ -9,7 +9,8 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges
testPrivileges();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels.php");
modifEtatAliasVirtuelsPostfix($pdo,$_POST);
modifEtatAliasVirtuelsBdd($pdo,$_POST);
header ("Location: /pages/gestion/administration.php?page=alias&succes=2");
die();
?>

@ -9,11 +9,13 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges
testPrivileges();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels.php");
if(isset($_GET['supprAliasVirtuel']) && !empty($_GET['supprAliasVirtuel']) && supprAliasVirtuelsPostfix($pdo,$_GET['supprAliasVirtuel'])) {
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();
}
?>

@ -15,7 +15,7 @@ if (testPrivileges()!="administrateur") {
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
if (isset($_POST['nom_domaine']) && !empty($_POST['nom_domaine'])) {
ajoutDomainePostfix($pdo,$_POST['nom_domaine']);
ajoutDomaineBdd($pdo,$_POST['nom_domaine']);
header ("Location: /pages/gestion/administration.php?page=domaines&succes=5");
die();
}

@ -13,13 +13,13 @@ if (testPrivileges()!="administrateur") {
}
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
$liste_domaines = listeDomainesPostfix($pdo);
$liste_domaines = listeDomainesBdd($pdo);
if (isset($_POST['choix_domaine_defaut']) && !empty($_POST['choix_domaine_defaut'])) {
foreach ($liste_domaines as $domaine_cles => $domaine_valeurs){
// Vérification de l'existance du domaine renseigné par l'utilisateur
if ($_POST['choix_domaine_defaut'] == $domaine_valeurs['domaine']) {
changeDomaineDefautPostfix($pdo,$_POST['choix_domaine_defaut']);
changeDomaineDefautBdd($pdo,$_POST['choix_domaine_defaut']);
header ("Location: /pages/gestion/administration.php?page=domaines&succes=8");
die();
}

@ -12,7 +12,8 @@ if (testPrivileges()!="administrateur") {
}
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
modifEtatDomainesPostfix($pdo,$_POST);
modifEtatDomainesBdd($pdo,$_POST);
header ("Location: /pages/gestion/administration.php?page=domaines&succes=6");
die();
?>

@ -12,11 +12,13 @@ if (testPrivileges()!="administrateur") {
}
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
if(isset($_GET['supprDomaine']) && !empty($_GET['supprDomaine']) && supprDomainesPostfix($pdo,$_GET['supprDomaine'])) {
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();
}
?>

@ -12,7 +12,7 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/import_export.p
// Permet le contrôle du domaine des alias virtuels du CSV de l'utilisateur
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
$liste_domaines = listeDomainesPostfix($pdo);
$liste_domaines = listeDomainesBdd($pdo);
// Permet le contrôle des alias virtuels du CSV de l'utilisateur
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels.php");
@ -31,7 +31,7 @@ if (isset($_FILES['import_alias_virtuels_csv']) && !empty($_FILES['import_alias_
// Vérification de la cohérence de l'état d'activation de l'alias virtuel soumis
if ($donnees_csv[3]==0 || $donnees_csv[3]==1) {
// Omission des doublons
$liste_alias_virtuels = listeAliasVirtuelsPostfix($pdo);
$liste_alias_virtuels = listeAliasVirtuelsBdd($pdo);
if (!in_array($donnees_csv[1],array_column($liste_alias_virtuels,'courriel'))) {
importAliasVirtuelsUtilisateur($pdo,$donnees_csv[1],$_SESSION['pseudo_utilisateur'],$donnees_csv[3]);
}

@ -15,7 +15,7 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/import_export.p
// Permet le contrôle du domaine des alias virtuels du CSV de l'utilisateur
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
$liste_domaines = listeDomainesPostfix($pdo);
$liste_domaines = listeDomainesBdd($pdo);
// Permet le contrôle des alias virtuels du CSV de l'utilisateur
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels.php");
// Permet le contrôle des listes noires du CSV de l'utilisateur
@ -56,7 +56,7 @@ if (isset($_FILES['import_donnees_csv']) && !empty($_FILES['import_donnees_csv']
// Vérification de la cohérence des données de l'alias virtuel soumis
if (!empty($donnees_csv[1]) && !empty($donnees_csv[2]) && ($donnees_csv[3]==="0" || $donnees_csv[3]==="1")) {
// Omission des doublons
$liste_alias_virtuels = listeTousAliasVirtuelsPostfix($pdo);
$liste_alias_virtuels = listeTousAliasVirtuelsBdd($pdo);
if (!in_array($donnees_csv[1],array_column($liste_alias_virtuels,'courriel'))) {
importDonneesMessagerie($pdo,"alias_virtuels",$donnees_csv);
}
@ -72,7 +72,7 @@ if (isset($_FILES['import_donnees_csv']) && !empty($_FILES['import_donnees_csv']
// Vérification de la cohérence des données du domaine soumis
if (!empty($donnees_csv[1]) && ($donnees_csv[2]==="0" || $donnees_csv[2]==="1") && ($donnees_csv[3]==="0" || $donnees_csv[3]==="1")) {
// Omission des doublons
$liste_domaines = listeDomainesPostfix($pdo);
$liste_domaines = listeDomainesBdd($pdo);
if (!in_array($donnees_csv[1],array_column($liste_domaines,'domaine'))) {
importDonneesMessagerie($pdo,"domaines",$donnees_csv);
}
@ -88,7 +88,7 @@ if (isset($_FILES['import_donnees_csv']) && !empty($_FILES['import_donnees_csv']
// Vérification de la cohérence des données de la liste noire destinataire soumise
if (!empty($donnees_csv[1]) && ($donnees_csv[2]==="REJECT" || $donnees_csv[2]==="DEFER") && ($donnees_csv[3]==="0" || $donnees_csv[3]==="1")) {
// Omission des doublons
$liste_entrees_liste_noires_dst=listeEntreeListeNoireDstPostfix($pdo);
$liste_entrees_liste_noires_dst=listeEntreeListeNoireDstBdd($pdo);
if (!in_array($donnees_csv[1],array_column($liste_entrees_liste_noires_dst,'courriel'))) {
importDonneesMessagerie($pdo,"liste_noire_destinataires",$donnees_csv);
}
@ -104,7 +104,7 @@ if (isset($_FILES['import_donnees_csv']) && !empty($_FILES['import_donnees_csv']
// Vérification de la cohérence des données de la liste noire expediteur soumise
if (!empty($donnees_csv[1]) && ($donnees_csv[2]==="554") && !empty($donnees_csv[3]) && ($donnees_csv[4]==="0" || $donnees_csv[4]==="1")) {
// Omission des doublons
$liste_entrees_liste_noires_exp=listeEntreeListeNoireExpPostfix($pdo);
$liste_entrees_liste_noires_exp=listeEntreeListeNoireExpBdd($pdo);
if (!in_array($donnees_csv[1],array_column($liste_entrees_liste_noires_exp,'courriel'))) {
importDonneesMessagerie($pdo,"liste_noire_expediteurs",$donnees_csv);
}
@ -120,7 +120,7 @@ if (isset($_FILES['import_donnees_csv']) && !empty($_FILES['import_donnees_csv']
// Vérification de la cohérence des données de l'utilisateur soumis
if (!empty($donnees_csv[1]) && !empty($donnees_csv[2]) && !empty($donnees_csv[4]) && !empty($donnees_csv[5]) && !empty($donnees_csv[6]) && !empty($donnees_csv[7]) && ($donnees_csv[9]==="0" || $donnees_csv[9]==="1")) {
// Omission des doublons
$liste_utilisateurs=listeUtilisateursPostfix($pdo);
$liste_utilisateurs=listeTousUtilisateursBdd($pdo);
if (!in_array($donnees_csv[1],array_column($liste_utilisateurs,'utilisateur'))) {
importDonneesMessagerie($pdo,"utilisateurs",$donnees_csv);
}

@ -16,7 +16,7 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/listes_noires.p
if (isset($_POST['courriel_entree_liste_noire_dst']) && isset($_POST['choix_action_entree_liste_noire_dst']) && !empty($_POST['courriel_entree_liste_noire_dst']) && !empty($_POST['choix_action_entree_liste_noire_dst'])) {
if ($_POST['choix_action_entree_liste_noire_dst']=="REJECT" || $_POST['choix_action_entree_liste_noire_dst']=="DEFER") {
ajoutEntreeListeNoireDstPostfix($pdo,$_POST['courriel_entree_liste_noire_dst'],$_POST['choix_action_entree_liste_noire_dst']);
ajoutEntreeListeNoireDstBdd($pdo,$_POST['courriel_entree_liste_noire_dst'],$_POST['choix_action_entree_liste_noire_dst']);
header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=destinataires&succes=9");
die();
}

@ -13,7 +13,7 @@ if (testPrivileges()!="administrateur") {
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/listes_noires.php");
if (isset($_POST) && !empty($_POST)) {
modifEntreeListeNoireDstPostfix($pdo,$_POST);
modifEntreeListeNoireDstBdd($pdo,$_POST);
header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=destinataires&succes=10");
die();
}

@ -12,11 +12,13 @@ if (testPrivileges()!="administrateur") {
}
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/listes_noires.php");
if(isset($_GET['supprEntreeListeNoireDst']) && !empty($_GET['supprEntreeListeNoireDst']) && supprEntreeListeNoireDstPostfix($pdo,$_GET['supprEntreeListeNoireDst'])) {
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();
}
?>

@ -16,7 +16,7 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/listes_noires.p
if (isset($_POST['courriel_entree_liste_noire_exp']) && isset($_POST['choix_code_retour_entree_liste_noire_exp']) && !empty($_POST['courriel_entree_liste_noire_exp']) && !empty($_POST['choix_code_retour_entree_liste_noire_exp'])) {
if ($_POST['choix_code_retour_entree_liste_noire_exp']==554) {
ajoutEntreeListeNoireExpPostfix($pdo,$_POST['courriel_entree_liste_noire_exp'],$_POST['choix_code_retour_entree_liste_noire_exp']);
ajoutEntreeListeNoireExpBdd($pdo,$_POST['courriel_entree_liste_noire_exp'],$_POST['choix_code_retour_entree_liste_noire_exp']);
header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs&succes=12");
die();
}

@ -13,7 +13,7 @@ if (testPrivileges()!="administrateur") {
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/listes_noires.php");
if (isset($_POST) && !empty($_POST)) {
modifEntreeListeNoireExpPostfix($pdo,$_POST);
modifEntreeListeNoireExpBdd($pdo,$_POST);
header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs&succes=13");
die();
}

@ -12,11 +12,13 @@ if (testPrivileges()!="administrateur") {
}
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/listes_noires.php");
if(isset($_GET['supprEntreeListeNoireExp']) && !empty($_GET['supprEntreeListeNoireExp']) && supprEntreeListeNoireExpPostfix($pdo,$_GET['supprEntreeListeNoireExp'])) {
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();
}
?>

@ -0,0 +1,45 @@
<?php
/**
* Page de traitement permettant la création d'un utilisateur.
* Elle est appelée par le formulaire d'ajout d'un utilisateur (uniquement possible par un administrateur).
*/
session_start();
require_once($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
if (testPrivileges()!="administrateur") {
header("Location: /pages/visiteurs/formulaire_accueil.php?erreur=18");
die();
}
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/domaines.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");
if (isset($_POST['prefixe_utilisateur']) && isset($_POST['nom_utilisateur']) && !empty($_POST['nom_utilisateur']) && isset($_POST['choix_domaine_utilisateur']) && !empty($_POST['choix_domaine_utilisateur']) && isset($_POST['mot_de_passe_utilisateur']) && !empty($_POST['mot_de_passe_utilisateur']) && isset($_POST['nom_complet_utilisateur']) && isset($_POST['choix_privilege_utilisateur']) && !empty($_POST['choix_privilege_utilisateur'])) {
$liste_domaines = listeDomainesBdd($pdo);
foreach ($liste_domaines as $domaine_cles => $domaine_valeurs){
// Vérification de l'existence du domaine renseigné par l'utilisateur
if ($_POST['choix_domaine_utilisateur'] === $domaine_valeurs['domaine']) {
if ($_POST['choix_privilege_utilisateur'] === 'utilisateur' || $_POST['choix_privilege_utilisateur'] === 'administrateur') {
ajoutUtilisateurBdd($pdo,$_POST['prefixe_utilisateur'],$_POST['nom_utilisateur'],$_POST['choix_domaine_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();
}
}
}
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=26");
die();
}
else {
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=26");
die();
}
?>

@ -12,7 +12,7 @@ testPrivileges();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
if ($_SESSION['privilege_utilisateur']=="administrateur" && isset($_POST['nouveau_mot_de_passe']) && !empty($_POST['nouveau_mot_de_passe']) && isset($_POST['confirmation_mot_de_passe']) && !empty($_POST['confirmation_mot_de_passe'])) {
if (changeMotDePasseUtilisateurPostfix($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['nouveau_mot_de_passe']),trim($_POST['confirmation_mot_de_passe']))) {
if (changeMotDePasseUtilisateurBdd($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['nouveau_mot_de_passe']),trim($_POST['confirmation_mot_de_passe']))) {
header ("Location: /pages/gestion/administration.php?page=parametres&succes=16");
die();
}
@ -22,8 +22,8 @@ if ($_SESSION['privilege_utilisateur']=="administrateur" && isset($_POST['nouvea
}
}
elseif ($_SESSION['privilege_utilisateur']=="utilisateur" && isset($_POST['ancien_mot_de_passe']) && !empty($_POST['ancien_mot_de_passe']) && isset($_POST['nouveau_mot_de_passe']) && !empty($_POST['nouveau_mot_de_passe']) && isset($_POST['confirmation_mot_de_passe']) && !empty($_POST['confirmation_mot_de_passe'])) {
if (verificationMotDePasseUtilisateurPostfix($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['ancien_mot_de_passe']))) {
if (changeMotDePasseUtilisateurPostfix($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['nouveau_mot_de_passe']),trim($_POST['confirmation_mot_de_passe']))) {
if (verificationMotDePasseUtilisateurBdd($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['ancien_mot_de_passe']))) {
if (changeMotDePasseUtilisateurBdd($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['nouveau_mot_de_passe']),trim($_POST['confirmation_mot_de_passe']))) {
header ("Location: /pages/gestion/administration.php?page=parametres&succes=16");
die();
}

@ -15,7 +15,7 @@ if (testPrivileges()!="administrateur") {
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
if ($_SESSION['privilege_utilisateur']=="administrateur" && isset($_POST['nouveau_prefixe'])) {
changePrefixeUtilisateurPostfix($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['nouveau_prefixe']));
changePrefixeUtilisateurBdd($pdo,$_SESSION['pseudo_utilisateur'],trim($_POST['nouveau_prefixe']));
header ("Location: /pages/gestion/administration.php?page=parametres&succes=17");
die();
}

@ -3,7 +3,7 @@
/**
* Page de traitement permettant le changement d'un utilisateur.
* Elle est appelée par le formulaire de changement d'un utilisateur (uniquement possible par un administrateur).
* Elle effectué ce changement en surchargeant la valeur de session relative à l'identité de l'utilisateur connecté.
* Elle effectue ce changement en surchargeant la valeur de session relative à l'identité de l'utilisateur connecté.
*/
session_start();

@ -10,6 +10,9 @@ session_start ();
if (!empty($_GET['succes'])) {
$succes=$_GET['succes'];
}
elseif (!empty($_GET['erreur'])) {
$erreur=$_GET['erreur'];
}
// Destruction des variables de la session
session_unset();
// Destruction de la session
@ -21,7 +24,12 @@ if (!empty($succes)) {
header('location: /pages/visiteurs/formulaire_accueil.php?succes='.$succes);
die();
}
elseif (!empty($erreur)) {
header('location: /pages/visiteurs/formulaire_accueil.php?erreur='.$erreur);
die();
}
// Redirection de l'utilisateur vers la page d'authentifiaction
header('location: /pages/visiteurs/formulaire_accueil.php?succes=15');
die();
?>

@ -0,0 +1,52 @@
<?php
/**
* Page de traitement permettant la modification des informations des utilisateurs.
*/
session_start();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
testPrivileges();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
$liste_utilisateurs = listeTousUtilisateursBdd($pdo);
foreach ($liste_utilisateurs as $enieme_utilisateur_liste => $infos_utilisateur_liste){
// Vérification de la correspondance entre l'ID de l'utilisateur soumis par formulaire avec celui en base de données (évite l'usurpation d'utilisateurs)
if (isset($_POST['utilisateur'][$enieme_utilisateur_liste]['id_utilisateur']) && $_POST['utilisateur'][$enieme_utilisateur_liste]['id_utilisateur'] === $infos_utilisateur_liste['id']) {
if (isset($_POST['utilisateur'][$enieme_utilisateur_liste]['etat_utilisateur']) && isset($_POST['utilisateur'][$enieme_utilisateur_liste]['nom_complet_utilisateur']) && isset($_POST['utilisateur'][$enieme_utilisateur_liste]['prefixe_utilisateur']) && isset($_POST['utilisateur'][$enieme_utilisateur_liste]['choix_privilege_utilisateur']) && isset($_POST['utilisateur'][$enieme_utilisateur_liste]['mot_de_passe_utilisateur']) && isset($_POST['utilisateur'][$enieme_utilisateur_liste]['confirmation_mot_de_passe_utilisateur'])) {
// Vérification de l'existence de changements pour l'utilisateur parcouru. Cette condition évite de réécrire les données inchangées des utilisateurs non modifiés
if ($infos_utilisateur_liste['active'] != $_POST['utilisateur'][$enieme_utilisateur_liste]['etat_utilisateur'] || $infos_utilisateur_liste['nom_complet'] != $_POST['utilisateur'][$enieme_utilisateur_liste]['nom_complet_utilisateur'] || $infos_utilisateur_liste['prefixe'] != $_POST['utilisateur'][$enieme_utilisateur_liste]['prefixe_utilisateur'] || $infos_utilisateur_liste['privilege'] != $_POST['utilisateur'][$enieme_utilisateur_liste]['choix_privilege_utilisateur'] || !empty($_POST['utilisateur'][$enieme_utilisateur_liste]['mot_de_passe_utilisateur'])) {
// Vérification de la validité des informations de privilèges et d'état soumises au formulaire
if (($_POST['utilisateur'][$enieme_utilisateur_liste]['choix_privilege_utilisateur'] === "utilisateur" || $_POST['utilisateur'][$enieme_utilisateur_liste]['choix_privilege_utilisateur'] === "administrateur") && ($_POST['utilisateur'][$enieme_utilisateur_liste]['etat_utilisateur'] === "0" || $_POST['utilisateur'][$enieme_utilisateur_liste]['etat_utilisateur'] === "1")) {
$nouvelles_données_utilisateur=array(
"id_utilisateur" => $_POST['utilisateur'][$enieme_utilisateur_liste]['id_utilisateur'],
"nom_utilisateur" => $infos_utilisateur_liste['utilisateur'],
"etat_utilisateur" => $_POST['utilisateur'][$enieme_utilisateur_liste]['etat_utilisateur'],
"nom_complet_utilisateur" => $_POST['utilisateur'][$enieme_utilisateur_liste]['nom_complet_utilisateur'],
"prefixe_utilisateur" => $_POST['utilisateur'][$enieme_utilisateur_liste]['prefixe_utilisateur'],
"choix_privilege_utilisateur" => $_POST['utilisateur'][$enieme_utilisateur_liste]['choix_privilege_utilisateur'],
);
// Sécurité empêchant l'administrateur connecté de se désactiver lui-même
if ($nouvelles_données_utilisateur['nom_utilisateur'] === $_SESSION['pseudo_connexion_utilisateur']) {
$nouvelles_données_utilisateur['etat_utilisateur'] = "1";
}
modifUtilisateursBdd($pdo,$nouvelles_données_utilisateur);
// Changement du mot de passe de l'utilisateur
if (!empty($_POST['utilisateur'][$enieme_utilisateur_liste]['mot_de_passe_utilisateur']) && !empty($_POST['utilisateur'][$enieme_utilisateur_liste]['confirmation_mot_de_passe_utilisateur']) && $_POST['utilisateur'][$enieme_utilisateur_liste]['mot_de_passe_utilisateur'] === $_POST['utilisateur'][$enieme_utilisateur_liste]['confirmation_mot_de_passe_utilisateur']) {
changeMotDePasseUtilisateurBdd($pdo,$nouvelles_données_utilisateur['nom_utilisateur'],$_POST['utilisateur'][$enieme_utilisateur_liste]['mot_de_passe_utilisateur'],$_POST['utilisateur'][$enieme_utilisateur_liste]['confirmation_mot_de_passe_utilisateur']);
}
}
}
// Si aucun changement sur l'utilisateur parcouru, ne rien faire et passer au suivant
}
}
}
header ("Location: /pages/gestion/administration.php?page=utilisateurs&succes=22");
die();
?>

@ -0,0 +1,35 @@
<?php
/**
* Page de traitement permettant la suppression d'un utilisateur.
*/
session_start();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
testPrivileges();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/utilisateurs.php");
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels.php");
$pseudo_utilisateur_bdd=listeUtilisateurBdd($pdo,$_GET['supprUtilisateur']);
if(isset($_GET['supprUtilisateur']) && !empty($_GET['supprUtilisateur']) && supprTousAliasVirtuelsUtilisateurBdd($pdo,$_GET['supprUtilisateur'])) {
if (supprUtilisateursBdd($pdo,$_GET['supprUtilisateur'])) {
// Si l'utilisateur à modifier a été changé via la liste déroulante dédiée sur celui venant d'être supprimé, ce paramètre est réinitialisé à sa valeur par défaut pour ne plus éditer les valeurs de l'utilisateur n'existant plus
if ($_SESSION['pseudo_utilisateur']===$pseudo_utilisateur_bdd[0]['utilisateur']) {
$_SESSION['pseudo_utilisateur']=$_SESSION['pseudo_connexion_utilisateur'];
}
header ("Location: /pages/gestion/administration.php?page=utilisateurs&succes=21");
die();
}
else {
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=28");
die();
}
}
else {
header ("Location: /pages/gestion/administration.php?page=utilisateurs&erreur=29");
die();
}
?>
Loading…
Cancel
Save