prepare($req); $sql->bindValue(':destination',$utilisateur); $sql->execute(); $liste_alias_virtuels = $sql->fetchAll(PDO::FETCH_ASSOC); $nom_fichier_csv="Alias-virtuels_".$utilisateur."_".date('d-m-Y').".csv"; // Entêtes HTTP permettant le téléchargement à la volée du CSV header("Content-Disposition: attachment; filename=\"$nom_fichier_csv\""); header("Content-Type: text/csv"); foreach ($liste_alias_virtuels as $alias_virtuel => $champ_alias_virtuel) { echo implode(":", $champ_alias_virtuel)."\n"; } // Le fait de tuer la page enclenche la demande de téléchargement à l'utilisateur qui ne quitte visuellement jamais la page des paramètres die(); } catch (\Exception $e) { die ("Erreur de requête d'export des alias virtuels utilisateur en CSV : ".$e->getMessage()); } } /** * Fonction générant un fichier CSV avec le contenu de la base Sqlite demandé par un administrateur. * Ce fichier est créé à la volée et se popose à l'administrateur pour téléchargement. */ function exportDonneesMessagerie($pdo,$types_donnees_a_exporter) { try { $nom_fichier_csv="Données_Courtail_".date('d-m-Y').".csv"; // Entêtes HTTP permettant le téléchargement à la volée du CSV header("Content-Disposition: attachment; filename=\"$nom_fichier_csv\""); header("Content-Type: text/csv"); foreach ($types_donnees_a_exporter as $cle_donnees_a_exporter => $type_donnee_a_exporter) { switch ($type_donnee_a_exporter) { case "alias_virtuels": $req = 'SELECT * FROM postfix_alias_virtuels'; $sql=$pdo->prepare($req); $sql->execute(); $liste_alias_virtuels = $sql->fetchAll(PDO::FETCH_ASSOC); echo "#~// Alias_vituels\n"; foreach ($liste_alias_virtuels as $alias_virtuel => $champ_alias_virtuel) { echo implode(":", $champ_alias_virtuel)."\n"; } break; case "domaines": $req = 'SELECT * FROM postfix_domaines'; $sql=$pdo->prepare($req); $sql->execute(); $liste_domaines = $sql->fetchAll(PDO::FETCH_ASSOC); echo "#~// Domaines\n"; foreach ($liste_domaines as $domaine => $champ_domaine) { echo implode(":", $champ_domaine)."\n"; } break; case "liste_noire_destinataires": $req = 'SELECT * FROM postfix_liste_noire_destinataires'; $sql=$pdo->prepare($req); $sql->execute(); $liste_liste_noire_destinataires = $sql->fetchAll(PDO::FETCH_ASSOC); 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"; } break; case "liste_noire_expediteurs": $req = 'SELECT * FROM postfix_liste_noire_expediteurs'; $sql=$pdo->prepare($req); $sql->execute(); $liste_liste_noire_expediteurs = $sql->fetchAll(PDO::FETCH_ASSOC); 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"; } break; case "utilisateurs": $req = 'SELECT * FROM postfix_utilisateurs'; $sql=$pdo->prepare($req); $sql->execute(); $liste_utilisateurs = $sql->fetchAll(PDO::FETCH_ASSOC); echo "#~// Utilisateurs\n"; foreach ($liste_utilisateurs as $liste_utilisateur => $champ_utilisateur) { echo implode(":", $champ_utilisateur)."\n"; } break; } } // Le fait de tuer la page enclenche la demande de téléchargement à l'utilisateur qui ne quitte visuellement jamais la page des paramètres die(); } catch (\Exception $e) { die ("Erreur de requête d'export des données de la base en CSV : ".$e->getMessage()); } } /** * 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'import des alias virtuels utilisateur en CSV : ".$e->getMessage()); } } } /** * 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'import 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()); } } ?>