<?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");
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.
 * 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'export des alias virtuels utilisateur en CSV : ".$e->getMessage());
		}
	}
}


?>