You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							322 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							322 lines
						
					
					
						
							11 KiB
						
					
					
				| <?php
 | |
| 
 | |
| /**
 | |
|  * Page de fonctions permettant la la sauvegarde et la restauration des données de la base de la messagerie.
 | |
|  */
 | |
| 
 | |
| require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");
 | |
| 
 | |
| /**
 | |
|  * Fonction générant un fichier CSV avec le contenu des alias virtuels d'un utilisateur.
 | |
|  * Ce fichier est créé à la volée et se popose à l'utilisateur pour téléchargement.
 | |
|  */
 | |
| function exportAliasVirtuelsUtilisateur($pdo,$utilisateur) {
 | |
| 	try {
 | |
| 		// Filtre des alias virtuels de l'utilisateur courant
 | |
| 		$req = 'SELECT * FROM postfix_alias_virtuels WHERE destination=:destination';
 | |
| 		$sql=$pdo->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());
 | |
| 	}
 | |
| }
 | |
| 
 | |
| ?>
 |