From 820512ced724fbee506bef5ac6681febcc48c5b1 Mon Sep 17 00:00:00 2001 From: ycharbi Date: Sat, 22 Jan 2022 19:31:09 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20la=20fonctionnalit=C3=A9=20permett?= =?UTF-8?q?ant=20l'import=20des=20donn=C3=A9es=20de=20la=20base=20pr=C3=A9?= =?UTF-8?q?c=C3=A9demment=20export=C3=A9s=20via=20la=20fonction=20idoine?= =?UTF-8?q?=20+=20correction=20du=20formatage=20des=20utilisateurs=20pr?= =?UTF-8?q?=C3=A9sents=20dans=20le=20fichier=20de=20provision=20SQL=20pour?= =?UTF-8?q?=20Docker=20+=20changement=20de=20formatage=20des=20ent=C3=AAte?= =?UTF-8?q?s=20de=20type=20de=20donn=C3=A9es=20pour=20la=20sauvegarde=20de?= =?UTF-8?q?s=20donn=C3=A9es=20de=20la=20base?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- outils/postfix_données.sql | 6 +- services/fonctions/bdd/import_export.php | 158 +++++++++++++++++- services/fonctions/messages/messages.php | 3 +- services/gestion/parametres.php | 21 +++ .../importAliasVirtuelsUtilisateur.php | 4 +- .../import_export/importDonneesBdd.php | 148 ++++++++++++++++ 6 files changed, 329 insertions(+), 11 deletions(-) diff --git a/outils/postfix_données.sql b/outils/postfix_données.sql index 8b98754..5d00b70 100644 --- a/outils/postfix_données.sql +++ b/outils/postfix_données.sql @@ -28,7 +28,5 @@ INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES ("roland@tata.fr",554,"Parle à ma main, ma tête est malade.",1); -- Listes utilisateurs -INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,rep_perso,uid,gid,privilege,active) VALUES ("toto@exemple.fr","{SHA512-CRYPT}$6$xWfisyC6fLawFcBr$zLm4hfRfs6Pn0RKArnyWcgliBy6lpnRUkDHfHMkvskShfLiv4pRIU6XC5ry0ysd.DeKhoAiZUfnNdmwIai2k50","Toto -Dupont","exemple.fr/toto/",3000,3000,"administrateur",1); -INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,rep_perso,uid,gid,privilege,prefixe,active) VALUES ("tata@exemple.fr","{SHA512-CRYPT}$6$xWfisyC6fLawFcBr$zLm4hfRfs6Pn0RKArnyWcgliBy6lpnRUkDHfHMkvskShfLiv4pRIU6XC5ry0ysd.DeKhoAiZUfnNdmwIai2k50","Toto -Dupont","exemple.fr/tata/",3000,3000,"utilisateur","ta.",1) +INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,rep_perso,uid,gid,privilege,active) VALUES ("toto@exemple.fr","{SHA512-CRYPT}$6$xWfisyC6fLawFcBr$zLm4hfRfs6Pn0RKArnyWcgliBy6lpnRUkDHfHMkvskShfLiv4pRIU6XC5ry0ysd.DeKhoAiZUfnNdmwIai2k50","Toto Dupont","exemple.fr/toto/",3000,3000,"administrateur",1); +INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,rep_perso,uid,gid,privilege,prefixe,active) VALUES ("tata@exemple.fr","{SHA512-CRYPT}$6$xWfisyC6fLawFcBr$zLm4hfRfs6Pn0RKArnyWcgliBy6lpnRUkDHfHMkvskShfLiv4pRIU6XC5ry0ysd.DeKhoAiZUfnNdmwIai2k50","Tata Dupuis","exemple.fr/tata/",3000,3000,"utilisateur","ta.",1); diff --git a/services/fonctions/bdd/import_export.php b/services/fonctions/bdd/import_export.php index 3dce5f2..1c7916c 100644 --- a/services/fonctions/bdd/import_export.php +++ b/services/fonctions/bdd/import_export.php @@ -59,7 +59,7 @@ function exportDonneesMessagerie($pdo,$types_donnees_a_exporter) { $liste_alias_virtuels = $sql->fetchAll(PDO::FETCH_ASSOC); - echo "#~// Alias vituels\n"; + echo "#~// Alias_vituels\n"; foreach ($liste_alias_virtuels as $alias_virtuel => $champ_alias_virtuel) { echo implode(":", $champ_alias_virtuel)."\n"; } @@ -83,7 +83,7 @@ function exportDonneesMessagerie($pdo,$types_donnees_a_exporter) { $liste_liste_noire_destinataires = $sql->fetchAll(PDO::FETCH_ASSOC); - echo "#~// Liste noire destinataires\n"; + echo "#~// Liste_noire_destinataires\n"; foreach ($liste_liste_noire_destinataires as $liste_noire_destinataire => $champ_liste_noire_destinataire) { echo implode(":", $champ_liste_noire_destinataire)."\n"; } @@ -95,7 +95,7 @@ function exportDonneesMessagerie($pdo,$types_donnees_a_exporter) { $liste_liste_noire_expediteurs = $sql->fetchAll(PDO::FETCH_ASSOC); - echo "#~// Liste noire expéditeur\n"; + echo "#~// Liste_noire_expéditeur\n"; foreach ($liste_liste_noire_expediteurs as $liste_noire_expediteur => $champ_liste_noire_expediteur) { echo implode(":", $champ_liste_noire_expediteur)."\n"; } @@ -167,5 +167,157 @@ function importAliasVirtuelsUtilisateur($pdo,$alias_virtuel,$utilisateur,$active } } +/** + * Fonction important les données sauvegardées dans un fichier CSV par un administrateur avec la fonction exportDonneesMessagerie(). + */ +function importDonneesMessagerie($pdo,$type_donnees_csv,$donnees_csv) { + try { + switch ($type_donnees_csv) { + case "alias_virtuels": + $req = 'INSERT INTO postfix_alias_virtuels (courriel,destination,active) VALUES (:alias_virtuel,:destination,:active)'; + $sql=$pdo->prepare($req); + $sql->bindValue(':alias_virtuel',htmlspecialchars($donnees_csv[1])); + $sql->bindValue(':destination',htmlspecialchars($donnees_csv[2])); + $sql->bindValue(':active',$donnees_csv[3]); + $sql->execute(); + + if ($sql->rowCount() == 1){ + return true; + } + + else { + return false; + } + break; + case "domaines": + $req = 'INSERT INTO postfix_domaines (domaine,defaut,active) VALUES (:domaine,:defaut,:active)'; + $sql=$pdo->prepare($req); + $sql->bindValue(':domaine',htmlspecialchars($donnees_csv[1])); + $sql->bindValue(':defaut',htmlspecialchars($donnees_csv[2])); + $sql->bindValue(':active',$donnees_csv[3]); + $sql->execute(); + + if ($sql->rowCount() == 1){ + return true; + } + + else { + return false; + } + break; + case "liste_noire_destinataires": + $req = 'INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES (:courriel,:action,:active)'; + $sql=$pdo->prepare($req); + $sql->bindValue(':courriel',htmlspecialchars($donnees_csv[1])); + $sql->bindValue(':action',htmlspecialchars($donnees_csv[2])); + $sql->bindValue(':active',$donnees_csv[3]); + $sql->execute(); + + if ($sql->rowCount() == 1){ + return true; + } + + else { + return false; + } + break; + case "liste_noire_expediteurs": + $req = 'INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES (:courriel,:code_retour,:message,:active)'; + $sql=$pdo->prepare($req); + $sql->bindValue(':courriel',htmlspecialchars($donnees_csv[1])); + $sql->bindValue(':code_retour',htmlspecialchars($donnees_csv[2])); + $sql->bindValue(':message',htmlspecialchars($donnees_csv[3])); + $sql->bindValue(':active',$donnees_csv[4]); + $sql->execute(); + + if ($sql->rowCount() == 1){ + return true; + } + + else { + return false; + } + break; + case "utilisateurs": + $req = 'INSERT INTO postfix_utilisateurs (utilisateur,mot_de_passe,nom_complet,rep_perso,uid,gid,privilege,prefixe,active) VALUES (:utilisateur,:mot_de_passe,:nom_complet,:rep_perso,:uid,:gid,:privilege,:prefixe,:active)'; + $sql=$pdo->prepare($req); + $sql->bindValue(':utilisateur',htmlspecialchars($donnees_csv[1])); + $sql->bindValue(':mot_de_passe',htmlspecialchars($donnees_csv[2])); + $sql->bindValue(':nom_complet',htmlspecialchars($donnees_csv[3])); + $sql->bindValue(':rep_perso',$donnees_csv[4]); + $sql->bindValue(':uid',$donnees_csv[5]); + $sql->bindValue(':gid',$donnees_csv[6]); + $sql->bindValue(':privilege',$donnees_csv[7]); + $sql->bindValue(':prefixe',$donnees_csv[8]); + $sql->bindValue(':active',$donnees_csv[9]); + $sql->execute(); + + if ($sql->rowCount() == 1){ + return true; + } + + else { + return false; + } + break; + } + } + catch (\Exception $e) { + die ("Erreur de requête d'export des données de la base en CSV : ".$e->getMessage()); + } +} + +/** + * Fonction de purge des tables permettant une importation fidèle des données contenues dans un ficher d'export CSV généré par la fonction exportDonneesMessagerie(). + */ +function purgeTable($pdo,$table) { + try { + switch ($table) { + case "postfix_alias_virtuels": + $sql = $pdo->prepare('DELETE FROM postfix_alias_virtuels'); + $sql->execute(); + $sql = $pdo->prepare('UPDATE sqlite_sequence SET seq = 0 WHERE name = "postfix_alias_virtuels"'); + $sql->execute(); + $sql = $pdo->prepare('VACUUM'); + $sql->execute(); + break; + case "postfix_domaines": + $sql = $pdo->prepare('DELETE FROM postfix_domaines'); + $sql->execute(); + $sql = $pdo->prepare('UPDATE sqlite_sequence SET seq = 0 WHERE name = "postfix_domaines"'); + $sql->execute(); + $sql = $pdo->prepare('VACUUM'); + $sql->execute(); + break; + case "postfix_liste_noire_destinataires": + $sql = $pdo->prepare('DELETE FROM postfix_liste_noire_destinataires'); + $sql->execute(); + $sql = $pdo->prepare('UPDATE sqlite_sequence SET seq = 0 WHERE name = "postfix_liste_noire_destinataires"'); + $sql->execute(); + $sql = $pdo->prepare('VACUUM'); + $sql->execute(); + break; + case "postfix_liste_noire_expediteurs": + $sql = $pdo->prepare('DELETE FROM postfix_liste_noire_expediteurs'); + $sql->execute(); + $sql = $pdo->prepare('UPDATE sqlite_sequence SET seq = 0 WHERE name = "postfix_liste_noire_expediteurs"'); + $sql->execute(); + $sql = $pdo->prepare('VACUUM'); + $sql->execute(); + break; + case "postfix_utilisateurs": + $sql = $pdo->prepare('DELETE FROM postfix_utilisateurs'); + $sql->execute(); + $sql = $pdo->prepare('UPDATE sqlite_sequence SET seq = 0 WHERE name = "postfix_utilisateurs"'); + $sql->execute(); + $sql = $pdo->prepare('VACUUM'); + $sql->execute(); + break; + } + } + catch (\Exception $e) { + die ("Erreur de requête de purge d'une table : ".$e->getMessage()); + } +} ?> \ No newline at end of file diff --git a/services/fonctions/messages/messages.php b/services/fonctions/messages/messages.php index f44bbd7..8e3a998 100644 --- a/services/fonctions/messages/messages.php +++ b/services/fonctions/messages/messages.php @@ -58,7 +58,8 @@ function retourneMessage($type_message,$num_message) { 20 => "
L'ancien mot de passe renseigné est erroné.
", 21 => "
Le mot de passe de confimation n'est pas identique au nouveau mot de passe.
", 22 => "
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.
", - 23 => "
Votre fichier d'import CSV est plus grand que 2 Mo.
"), + 23 => "
Votre fichier d'import CSV est plus grand que 2 Mo.
", + 24 => "
Auncun type de donnée n'a été spécifié pour l'importation.
"), "messages" => array( "bienvenue" => "
Bienvenue ".$nom_utilisateur.". Vous êtes authentifié en tant qu'".$privilege_utilisateur.".
") ); diff --git a/services/gestion/parametres.php b/services/gestion/parametres.php index 6ce31d2..9f1e44e 100644 --- a/services/gestion/parametres.php +++ b/services/gestion/parametres.php @@ -120,6 +120,27 @@ echo <<<_HEREDOC_ _HEREDOC_; +if ($_SESSION['privilege_utilisateur']=="administrateur") { + echo <<<_HEREDOC_ +

Restauration de la base de données

+

Attention, toutes les données non sauvegardés dans chaque section sélectionnée et présente dans votre fichier de restauration seront écrasées !

+
+ + + + + + + + + + + + +
+_HEREDOC_; +} + ?> \ No newline at end of file diff --git a/services/traitements/import_export/importAliasVirtuelsUtilisateur.php b/services/traitements/import_export/importAliasVirtuelsUtilisateur.php index 8c479ed..121162c 100644 --- a/services/traitements/import_export/importAliasVirtuelsUtilisateur.php +++ b/services/traitements/import_export/importAliasVirtuelsUtilisateur.php @@ -19,9 +19,7 @@ require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/alias_virtuels. $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 @@ -30,7 +28,7 @@ if (isset($_FILES['import_alias_virtuels_csv']) && !empty($_FILES['import_alias_ // 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 + // 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); diff --git a/services/traitements/import_export/importDonneesBdd.php b/services/traitements/import_export/importDonneesBdd.php index e69de29..baa05dc 100644 --- a/services/traitements/import_export/importDonneesBdd.php +++ b/services/traitements/import_export/importDonneesBdd.php @@ -0,0 +1,148 @@ + \ No newline at end of file