Ajout de la fonctionnalité permettant l'import des alias virtuels d'un utilisateur + precision du retrour des fonctions de listage des alais virtuels, domaines, listes noires et utilisateurs

pull/7/head
ycharbi 3 years ago
parent 7c8d7a0d32
commit cd42ba8d01

@ -18,7 +18,7 @@ function listeAliasVirtuelsPostfix($pdo) {
$sql->bindValue(':destination',$_SESSION['pseudo_utilisateur']);
$sql->execute();
$liste_alias_virtuels = $sql->fetchAll();
$liste_alias_virtuels = $sql->fetchAll(PDO::FETCH_ASSOC);
return $liste_alias_virtuels;
}
catch (\Exception $e) {

@ -16,7 +16,7 @@ function listeDomainesPostfix($pdo) {
$sql=$pdo->prepare($req);
$sql->execute();
$liste_domaines = $sql->fetchAll();
$liste_domaines = $sql->fetchAll(PDO::FETCH_ASSOC);
return $liste_domaines;
}
catch (\Exception $e) {

@ -124,4 +124,48 @@ function exportDonneesMessagerie($pdo,$types_donnees_a_exporter) {
}
}
/**
* Fonction important un fichier d'export d'alias virtuels utilisateur en CSV vers la base de données.
*/
function importAliasVirtuelsUtilisateur($pdo,$alias_virtuel,$utilisateur,$active) {
try {
// Insertion de l'alias virtuels parcouru dans le fichier CSV soumis pas l'utilisateur
// Les contrôles de données ont étés effectués dans la page de traitement
$req = 'INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES (:alias_virtuel,:destination,:active)';
$sql=$pdo->prepare($req);
$sql->bindValue(':alias_virtuel',htmlspecialchars($alias_virtuel));
$sql->bindValue(':destination',htmlspecialchars($utilisateur));
$sql->bindValue(':active',$active);
$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 "courriel" de la table "postif_alias_virtuels" est violée. Dans la mesure ou un contrôle d'unicité est effectué par la page de traitement, cette erreur signifie qu'un bogue est présent dans celui-ci
header ("Location: /pages/gestion/administration.php?page=alias&erreur=3");
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=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 d'export des alias virtuels utilisateur en CSV : ".$e->getMessage());
}
}
}
?>

@ -17,7 +17,7 @@ function listeEntreeListeNoireDstPostfix($pdo) {
$sql=$pdo->prepare($req);
$sql->execute();
$liste_entree_liste_noire_dst = $sql->fetchAll();
$liste_entree_liste_noire_dst = $sql->fetchAll(PDO::FETCH_ASSOC);
return $liste_entree_liste_noire_dst;
}
catch (\Exception $e) {
@ -35,7 +35,7 @@ function listeEntreeListeNoireExpPostfix($pdo) {
$sql=$pdo->prepare($req);
$sql->execute();
$liste_entree_liste_noire_exp = $sql->fetchAll();
$liste_entree_liste_noire_exp = $sql->fetchAll(PDO::FETCH_ASSOC);
return $liste_entree_liste_noire_exp;
}
catch (\Exception $e) {

@ -15,7 +15,7 @@ function listeUtilisateursPostfix($pdo) {
$sql=$pdo->prepare($req);
$sql->execute();
$liste_utilisateurs = $sql->fetchAll();
$liste_utilisateurs = $sql->fetchAll(PDO::FETCH_ASSOC);
return $liste_utilisateurs;
}
catch (\Exception $e) {

@ -33,7 +33,8 @@ function retourneMessage($type_message,$num_message) {
14 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> L'entrée de liste noire expéditeurs a été supprimée avec succès.</div>",
15 => "<div class=\"alert alert-success\" role=\"alert\"><img src=\"/fichiers/svg/check-circle.svg\"/> Vous avez bien été déconnecté.</div>",
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>"),
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>"),
"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>",
@ -55,7 +56,9 @@ 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 confimation 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>"),
"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>")
);

@ -110,6 +110,16 @@ if ($_SESSION['privilege_utilisateur']=="administrateur") {
_HEREDOC_;
}
echo <<<_HEREDOC_
<p>Restauration</p>
<p>Restauration des alias virtuels de l'utilisateur</p>
<form action="/services/traitements/import_export/importAliasVirtuelsUtilisateur.php" method="post" enctype="multipart/form-data">
<input type="file" name="import_alias_virtuels_csv">
<i>Les doublons seront omis.</i>
<button class="btn btn-primary bouton-ajout" type="submit"><img src="/fichiers/svg/plus.svg"/></button>
</form>
_HEREDOC_;
?>
<script src="/fichiers/js/filtre.js"></script>

@ -0,0 +1,65 @@
<?php
/**
* Page de traitement permettant l'import des alias virtuels d'un utilisateur.
* Elle est appelée par un bouton de la page des paramètres.
*/
session_start();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/sessions/privileges.php");
testPrivileges();
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/import_export.php");
// 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);
// Permet le contrôle des alias virtuels du CSV de l'utilisateur
require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels.php");
$types_donnees_a_exporter=array();
if (isset($_FILES['import_alias_virtuels_csv']) && !empty($_FILES['import_alias_virtuels_csv']['name']) && $_FILES['import_alias_virtuels_csv']['type']=="text/csv" && $_FILES['import_alias_virtuels_csv']['error']===0) {
if ($_FILES['import_alias_virtuels_csv']['size']<2000000) {
if (file_exists($_FILES['import_alias_virtuels_csv']['tmp_name'])) {
echo "Le fichier ".$_FILES['import_alias_virtuels_csv']['tmp_name']." existe.\n";
if (($fichier_csv = fopen($_FILES['import_alias_virtuels_csv']['tmp_name'], "r")) !== FALSE) {
while (($donnees_csv = fgetcsv($fichier_csv, 1000, ":")) !== FALSE) {
// Vérification de la légitimité des alais virtuels importés
// Si un utilisateur modifie le contenu du fichier CSV afin d'ajouter des alias virtuels à un autre utilisateur, aucun traitement pour cet alias virtuel n'est effectué
if ($donnees_csv[2]===$_SESSION['pseudo_utilisateur']) {
// Vérification de l'existence du domaine de l'alias virtuel soumis
$domaine_alias_virtuel_csv=explode('@', $donnees_csv[1]);
if (in_array($domaine_alias_virtuel_csv[1],array_column($liste_domaines,'domaine'))) {
// Vérification de la coé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);
if (!in_array($donnees_csv[1],array_column($liste_alias_virtuels,'courriel'))) {
importAliasVirtuelsUtilisateur($pdo,$donnees_csv[1],$_SESSION['pseudo_utilisateur'],$donnees_csv[3]);
}
// Sinon l'alias virtuel doublon est ignoré
}
// Sinon l'alias virtuel contenant un état d'activation erroné est ignoré
}
// Sinon l'alias virtuel contenant un domaine non existant dans la base est ignoré
}
// Sinon l'alias virtuel pointant sur un autre utilisateur est ignoré
}
fclose($fichier_csv);
header ("Location: /pages/gestion/administration.php?page=parametres&succes=18");
die();
}
}
header ("Location: /pages/gestion/administration.php?page=parametres&succes=18");
die();
}
else {
header ("Location: /pages/gestion/administration.php?page=parametres&erreur=23");
die();
}
}
header ("Location: /pages/gestion/administration.php?page=parametres&erreur=22");
die();
?>
Loading…
Cancel
Save