<?php

/**
 * Page de fonctions concernant les entrées de la liste noire des destinataires.
 */

require_once ($_SERVER["DOCUMENT_ROOT"]."/services/fonctions/bdd/connexion.php");


/**
 * Fonction listant les entrées de la liste noire des destinataires.
 */
function listeEntreeListeNoireDstBdd($pdo) {
	try {
		$req = 'SELECT * FROM postfix_liste_noire_destinataires';

		$sql=$pdo->prepare($req);
		$sql->execute();

		$liste_entree_liste_noire_dst = $sql->fetchAll(PDO::FETCH_ASSOC);
		return $liste_entree_liste_noire_dst;
	}
	catch (\Exception $e) {
		die ("Erreur de requête de selection des entrées de liste noire destinataires pour \"$base\" : ".$e->getMessage());
	}
}

/**
 * Fonction listant les entrées de la liste noire des expéditeurs.
 */
function listeEntreeListeNoireExpBdd($pdo) {
	try {
		$req = 'SELECT * FROM postfix_liste_noire_expediteurs';

		$sql=$pdo->prepare($req);
		$sql->execute();

		$liste_entree_liste_noire_exp = $sql->fetchAll(PDO::FETCH_ASSOC);
		return $liste_entree_liste_noire_exp;
	}
	catch (\Exception $e) {
		die ("Erreur de requête de selection des entrées de liste noire expéditeurs : ".$e->getMessage());
	}
}

/**
 * Fonction d'ajout d'une entrée de liste noir destinataire.
 */
function ajoutEntreeListeNoireDstBdd($pdo,$courriel_entree_liste_noire_dst,$action_entree_liste_noire_dst) {
	try {
		// Insertion de l'entrée de liste noire de destinataires renseignée par l'administrateur
		$req='INSERT INTO postfix_liste_noire_destinataires (courriel,action,active) VALUES (:courriel,:action,1)';
		$sql=$pdo->prepare($req);
		$sql->bindValue(':courriel',substr(htmlspecialchars($courriel_entree_liste_noire_dst),0,100));
		$sql->bindValue(':action',$action_entree_liste_noire_dst);
		$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 "postfix_liste_noire_destinataires" est violée. L'adresse de destination envoyé via le formulaire par l'utilisateur a déjà été renseignée dans la base
			header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=destinataires&erreur=12");
			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=listes_noires&sousPage=destinataires&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'ajout de l'entrée de liste noire de destinataires : ".$e->getMessage());
		}
	}
}

/**
 * Fonction d'ajout d'une entrée de liste noir expéditeurs.
 */
function ajoutEntreeListeNoireExpBdd($pdo,$courriel_entree_liste_noire_exp,$code_retour_entree_liste_noire_exp) {
	try {
		// Insertion de l'entrée de liste noire d'expéditeurs renseignée par l'administrateur
		$req='INSERT INTO postfix_liste_noire_expediteurs (courriel,code_retour,message,active) VALUES (:courriel,:code_retour,"Votre message a été rejeté par le serveur car votre adresse est en liste noire.",1)';
		$sql=$pdo->prepare($req);
		$sql->bindValue(':courriel',substr(htmlspecialchars($courriel_entree_liste_noire_exp),0,100));
		$sql->bindValue(':code_retour',$code_retour_entree_liste_noire_exp);
		$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 "postfix_liste_noire_expediteurs" est violée. L'adresse de destination envoyé via le formulaire par l'utilisateur a déjà été renseignée dans la base
			header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs&erreur=16");
			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=listes_noires&sousPage=expediteurs&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'ajout de l'entrée de liste noire d'expéditeurs : ".$e->getMessage());
		}
	}
}

/**
 * Fonction d'activation/désactivation d'une entrée dans la liste noire des destinataires.
 * Suite à une soumission du formulaire dédié, cette fonction va traiter l'ensemble des entrées de la liste noire des destinataires du serveur.
 * Elle occasionnera peut-être des baisses de performance si un très grand d'entrées existent (le traitement n'intervenant pas spécifiquement pour l'entrée modifiée).
 */
function modifEntreeListeNoireDstBdd($pdo,$retour_form) {
	try {
		$compteModifs=0;
		foreach ($retour_form as $id_entree_liste_noire_dst => $etat_entree_liste_noire_dst) {
			$req='UPDATE postfix_liste_noire_destinataires SET active=:etat_entree_liste_noire_dst WHERE id=:id_entree_liste_noire_dst';

			$sql=$pdo->prepare($req);
			$sql->bindValue(':etat_entree_liste_noire_dst',$etat_entree_liste_noire_dst);
			$sql->bindValue(':id_entree_liste_noire_dst',$id_entree_liste_noire_dst);
			$sql->execute();
		}
	}
	catch (\Exception $e) {
		// Récupération du code de retour de la commande SQLite
		$code_retour=$sql->errorInfo();

		if ($code_retour[0]=="HY000") {
			// Code de retour envoyé par le pilote PDO SQLite lorsque la base est accessible en lecture seule à www-data
			header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=destinataires&erreur=10");
			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 de modification d'état pour l'entrée de liste noire de destinataires : ".$e->getMessage());
		}
	}
}

/**
 * Fonction d'activation/désactivation d'une entrée dans la liste noire des expéditeurs.
 * Suite à une soumission du formulaire dédié, cette fonction va traiter l'ensemble des entrées de la liste noire des expéditeurs du serveur.
 * Elle occasionnera peut-être des baisses de performance si un très grand d'entrées existent (le traitement n'intervenant pas spécifiquement pour l'entrée modifiée).
 */
function modifEntreeListeNoireExpBdd($pdo,$retour_form) {
	try {
		$compteModifs=0;
		foreach ($retour_form as $id_entree_liste_noire_exp => $etat_entree_liste_noire_exp) {
			$req='UPDATE postfix_liste_noire_expediteurs SET active=:etat_entree_liste_noire_exp WHERE id=:id_entree_liste_noire_exp';

			$sql=$pdo->prepare($req);
			$sql->bindValue(':etat_entree_liste_noire_exp',$etat_entree_liste_noire_exp);
			$sql->bindValue(':id_entree_liste_noire_exp',$id_entree_liste_noire_exp);
			$sql->execute();
		}
	}
	catch (\Exception $e) {
		// Récupération du code de retour de la commande SQLite
		$code_retour=$sql->errorInfo();

		if ($code_retour[0]=="HY000") {
			// Code de retour envoyé par le pilote PDO SQLite lorsque la base est accessible en lecture seule à www-data
			header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs&erreur=14");
			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 de modification d'état pour l'entrée de liste noire d'expéditeurs : ".$e->getMessage());
		}
	}
}

/**
 * Fonction de suppression d'une entrée de liste noire de destinataires.
 */
function supprEntreeListeNoireDstBdd($pdo) {
	try {
		$req='DELETE FROM postfix_liste_noire_destinataires WHERE id=:id_entree_liste_noire_dst';

		$sql=$pdo->prepare($req);
		$sql->bindValue(':id_entree_liste_noire_dst',$_GET['supprEntreeListeNoireDst']);
		$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]=="HY000") {
			// Code de retour envoyé par le pilote PDO SQLite lorsque la base est accessible en lecture seule à www-data
			header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=destinataires&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 de suppression d'une entrée de liste noire de destinataires : ".$e->getMessage());
		}
	}
}

/**
 * Fonction de suppression d'une entrée de liste noire d'expéditeurs.
 */
function supprEntreeListeNoireExpBdd($pdo) {
	try {
		$req='DELETE FROM postfix_liste_noire_expediteurs WHERE id=:id_entree_liste_noire_exp';

		$sql=$pdo->prepare($req);
		$sql->bindValue(':id_entree_liste_noire_exp',$_GET['supprEntreeListeNoireExp']);
		$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]=="HY000") {
			// Code de retour envoyé par le pilote PDO SQLite lorsque la base est accessible en lecture seule à www-data
			header ("Location: /pages/gestion/administration.php?page=listes_noires&sousPage=expediteurs&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 de suppression d'une entrée de liste noire d'expéditeurs : ".$e->getMessage());
		}
	}
}

?>
