<?php
class GttCtrlActionAdminUtilisateur extends aControlleurAction {

	public function __construct(Registre $Registre)
	{
		$Registre->ajouterEspace('AdminUtilisateur', 'admin_utilisateur');
		$Registre->setTitre('Administrer les utilisateurs');
	}

	public function executer()
    {
    	$aso_admin_utilisateur = array();
		// Ajout du mode
		$aso_admin_utilisateur['mode'] = 'A';// Ajout

		// Récupération des utilisateur
		$Utilisateur = new Utilisateur();

		// Vérification si l'utilisateur est admin
		$aso_admin_utilisateur['bool_mark_admin'] = false;
		if ($Utilisateur->getMarkAdmin() == 1) {
			$aso_admin_utilisateur['bool_mark_admin'] = true;
		}
		// Vérification si l'utilisateur doit apparaître dans le récapitulatif
		$aso_admin_utilisateur['bool_mark_recapitulatif'] = false;
		if ($Utilisateur->getMarkRecapitulatif() == 1) {
			$aso_admin_utilisateur['bool_mark_recapitulatif'] = true;
		}

		// Utilisateur vide par défaut
		$aso_admin_utilisateur['Utilisateur'] = clone $Utilisateur;

		// Recherche des utilisateurs existant
    	$tab_u = $Utilisateur->consulter(Utilisateur::GU_TOUS);
    	foreach ($tab_u as $u) {
    		// Nous récupérons tous les statuts sauf le null (=0)
    		if ($u->getIdUtilisateur() != 0) {
    			$aso_utilisateur['id'] = $u->getIdUtilisateur();
    			$aso_utilisateur['libelle'] = $u->getNom().' '.$u->getPrenom();
    			$aso_admin_utilisateur['utilisateurs'][] = $aso_utilisateur;
    		}
    	}

		// Recherche des statuts des utilisateurs
		$UtilisateurStatut = new UtilisateurStatut();
		$tab_us = $UtilisateurStatut->consulter(UtilisateurStatut::GUS_TOUS);
    	foreach ($tab_us as $us) {
    		// Nous récupérons tous les statuts sauf le null (=0)
    		if ($us->getIdUtilisateurStatut() != 0) {
    			$aso_us['id'] = $us->getIdUtilisateurStatut();
    			$aso_us['libelle'] = $us->getLibelle();
    			$aso_admin_utilisateur['utilisateur_statuts'][] = $aso_us;
    		}
    	}

		// Modification des titres, légendes et bouton
		$aso_admin_utilisateur['form_legend'] = 'Ajouter un utilisateur';
		$aso_admin_utilisateur['form_bouton_value'] = 'Ajouter';
		$aso_admin_utilisateur['form_bouton_id'] = 'btn_utilisateur_ajouter';
		$aso_admin_utilisateur['form_url'] = 'index.php?action=admin-utilisateur_valider-ajouter';

    	//echo '<pre>'.print_r($aso_admin_utilisateur, true).'</pre>';
		$this->getRegistre()->ajouterDonnee('admin_utilisateur', $aso_admin_utilisateur);
    }

    public function executerValiderAjouter()
    {
		if (isset($_POST['btn_utilisateur_annuler'])) {
			// Action suivante
    		$this->setSuivant('__defaut__');
    	} else if (isset($_POST['btn_utilisateur_ajouter'])) {
			// Vérification de l'utilisateur à ajouter
			$bool_ajouter = true;
			$Utilisateur = new Utilisateur();
			$UtMail = $Utilisateur->consulter(Utilisateur::GU_MAIL, array($_POST['ut_email']));
			if ((is_array($UtMail) && count($UtMail) > 1) || $UtMail instanceof Utilisateur) {
				$aso_admin_utilisateur['messages'][] = 'Un utilisateur avec le même courriel existe déjà !';
				$bool_ajouter = false;
			}
			$this->verifierChampsCommuns($aso_admin_utilisateur, $bool_ajouter, 'A');
			if ($bool_ajouter) {
				// Action suivante
		    	$this->setSuivant('ajouter');
			} else {
				// Action suivante
		    	$this->setSuivant('__defaut__');
				$this->getRegistre()->ajouterDonnee('admin_utilisateur', $aso_admin_utilisateur);
			}
		}
    }

	public function executerValiderModifier()
	{
		if (isset($_POST['btn_utilisateur_annuler'])) {
			// Action suivante
    		$this->setSuivant('__defaut__');
    	} else if (isset($_POST['btn_utilisateur_modifier'])) {
			// Vérification de l'utilisateur à modifier
			$bool_modifier = true;
			$Utilisateur = new Utilisateur();
			$UtMail = $Utilisateur->consulter(Utilisateur::GU_MAIL, array($_POST['ut_email']));
			if ((is_array($UtMail) && count($UtMail) > 1) || ($UtMail instanceof Utilisateur && $UtMail->getIdUtilisateur() != $_POST['ut_id_utilisateur'])) {
				$aso_admin_utilisateur['messages'][] = 'Un utilisateur avec le même courriel existe déjà !';
				$bool_modifier = false;
			}
			$this->verifierChampsCommuns($aso_admin_utilisateur, $bool_modifier, 'M');
			if ($bool_modifier) {
				// Action suivante
		    	$this->setSuivant('modifier');
			} else {
				// Action suivante
				$_POST['btn_utilisateur_modifier'] = 'btn_utilisateur_modifier';
				$_POST['utsu_id'] = $_POST['ut_id_utilisateur'];
		    	$this->setSuivant('editer');
				$this->getRegistre()->ajouterDonnee('admin_utilisateur', $aso_admin_utilisateur);
			}
		}
	}

	public function verifierChampsCommuns(&$aso_admin_utilisateur, &$bool, $mode)
	{
		// En modifcation, si le mot de passe est vide, on ne fait pas de changement dans la base de données
		if ($mode == 'A' || ($mode == 'M' && (!empty($_POST['ut_mot_de_passe']) || !empty($_POST['ut_mot_de_passe_confirmation'])))) {
			if (mb_strlen($_POST['ut_mot_de_passe']) < 6) {
				$aso_admin_utilisateur['messages'][] = 'Le mot de passe doit contenir au moins 6 caractères !';
				$bool = false;
			}
			if ($_POST['ut_mot_de_passe'] != $_POST['ut_mot_de_passe_confirmation']) {
				$aso_admin_utilisateur['messages'][] = 'Les mots de passe saisies ne sont pas identique !';
				$bool = false;
			}
		}
		if ($_POST['ut_temps_de_travail_jour'] > 24) {
			$aso_admin_utilisateur['messages'][] = 'Il est impossible que le temps de travail soit supérieur à 24h !';
			$bool = false;
		}
		$aso_champs_tdt = array('ut_tdt_lundi' => 'Lundi', 'ut_tdt_mardi' => 'Mardi', 'ut_tdt_mercredi' => 'Mercredi',
								'ut_tdt_jeudi' => 'Jeudi', 'ut_tdt_vendredi' => 'Vendredi', 'ut_tdt_samedi' => 'Samedi',
								'ut_tdt_dimanche' => 'Dimanche');
		foreach ($aso_champs_tdt as $champ_id => $libelle) {
			if ($_POST[$champ_id] > $_POST['ut_temps_de_travail_jour']) {
				$aso_admin_utilisateur['messages'][] = "Le champ temps de travail du $libelle ne doit pas être supérieur à la durée maximum du temps de travail journalier !";
				$bool = false;
			}
		}
		$aso_champs_obligatoires = array('ut_nom' => 'Nom', 'ut_prenom' => 'Prénom', 'ut_email' => 'Courriel');
		// En modifcation, si le mot de passe est vide cela peut être normal
		if ($mode == 'A' || ($mode == 'M' && (!empty($_POST['ut_mot_de_passe']) || !empty($_POST['ut_mot_de_passe_confirmation'])))) {
			$aso_champs_obligatoires['ut_mot_de_passe'] = 'Mot de passe';
		}
		foreach ($aso_champs_obligatoires as $champ_id => $libelle) {
			if (empty($_POST[$champ_id])) {
				$aso_admin_utilisateur['messages'][] = "Le champ $libelle ne doit pas être vide !";
				$bool = false;
			}
		}
	}

	public function executerEditer()
    {
		// Ajout du statut d'utilisateur
		if (isset($_POST['btn_utilisateur_modifier'])) {
			// Ajout du mode
			$aso_admin_utilisateur['mode'] = 'M';// Modifier

			// Récupération des données de l'utilisateur à modifier
			$Utilisateur = new Utilisateur();
			$Utilisateur->consulter(Utilisateur::GU_ID, $_POST['utsu_id'], true);
			$aso_admin_utilisateur['Utilisateur'] = $Utilisateur;
			// Vérification si l'utilisateur est admin
			$aso_admin_utilisateur['bool_mark_admin'] = false;
			if ($Utilisateur->getMarkAdmin() == 1) {
				$aso_admin_utilisateur['bool_mark_admin'] = true;
			}
			// Vérification si l'utilisateur doit apparaître dans le récapitulatif
			$aso_admin_utilisateur['bool_mark_recapitulatif'] = false;
			if ($Utilisateur->getMarkRecapitulatif() == 1) {
				$aso_admin_utilisateur['bool_mark_recapitulatif'] = true;
			}
			// Modification des titres, légendes et bouton
			$aso_admin_utilisateur['form_legend'] = 'Modifier un utilisateur';
			$aso_admin_utilisateur['form_bouton_value'] = 'Modifier';
			$aso_admin_utilisateur['form_bouton_id'] = 'btn_utilisateur_modifier';
			$aso_admin_utilisateur['form_url'] = 'index.php?action=admin-utilisateur_valider-modifier';

			$this->getRegistre()->ajouterDonnee('admin_utilisateur', $aso_admin_utilisateur);
		} else if (isset($_POST['btn_utilisateur_supprimer'])) {
			// Action suivante
    		$this->setSuivant('supprimer');
		}
    }

	public function executerAjouter()
	{
		$Utilisateur = new Utilisateur();
		$Utilisateur->setNom($_POST['ut_nom']);
		$Utilisateur->setPrenom($_POST['ut_prenom']);
		$Utilisateur->setAdresse($_POST['ut_adresse']);
		$Utilisateur->setVille($_POST['ut_ville']);
		$Utilisateur->setCodePostal($_POST['ut_code_postal']);
		$Utilisateur->setTelephone($_POST['ut_telephone']);
		$Utilisateur->setEmail($_POST['ut_email']);
		$Utilisateur->setPassword($_POST['ut_mot_de_passe']);
		//$Utilisateur->setCeStatut($_POST['ut_statut']);
		$Utilisateur->setCongesPayes($_POST['ut_conges_payes']);
		$Utilisateur->setTempsDeTravailJour($_POST['ut_temps_de_travail_jour']);
		$Utilisateur->setTempsDeTravailMois($_POST['ut_temps_de_travail_mois']);
		$Utilisateur->setTdtLundi($_POST['ut_tdt_lundi']);
		$Utilisateur->setTdtMardi($_POST['ut_tdt_mardi']);
		$Utilisateur->setTdtMercredi($_POST['ut_tdt_mercredi']);
		$Utilisateur->setTdtJeudi($_POST['ut_tdt_jeudi']);
		$Utilisateur->setTdtVendredi($_POST['ut_tdt_vendredi']);
		$Utilisateur->setTdtSamedi($_POST['ut_tdt_samedi']);
		$Utilisateur->setTdtDimanche($_POST['ut_tdt_dimanche']);
		$Utilisateur->setQuotaHeuresSupp($_POST['ut_quota_heures_supp']);
		if (!isset($_POST['ut_mark_admin'])) {
			$_POST['ut_mark_admin'] = 0;
		}
		$Utilisateur->setMarkAdmin($_POST['ut_mark_admin']);
		if (!isset($_POST['ut_mark_recapitulatif'])) {
			$_POST['ut_mark_recapitulatif'] = 0;
		}
		$Utilisateur->setMarkRecapitulatif($_POST['ut_mark_recapitulatif']);
    	$Utilisateur->ajouter();
		// Action suivante
    	$this->setSuivant('__defaut__');
	}


	public function executerModifier()
	{
		$Utilisateur = new Utilisateur();
		$Utilisateur->setIdUtilisateur($_POST['ut_id_utilisateur']);
		$Utilisateur->setNom($_POST['ut_nom']);
		$Utilisateur->setPrenom($_POST['ut_prenom']);
		$Utilisateur->setAdresse($_POST['ut_adresse']);
		$Utilisateur->setVille($_POST['ut_ville']);
		$Utilisateur->setCodePostal($_POST['ut_code_postal']);
		$Utilisateur->setTelephone($_POST['ut_telephone']);
		$Utilisateur->setEmail($_POST['ut_email']);
		if (isset($_POST['ut_mot_de_passe']) && !empty($_POST['ut_mot_de_passe'])) {
			$Utilisateur->setPassword($_POST['ut_mot_de_passe']);
		}
		//$Utilisateur->setCeStatut($_POST['ut_statut']);
		$Utilisateur->setCongesPayes($_POST['ut_conges_payes']);
		$Utilisateur->setTempsDeTravailJour($_POST['ut_temps_de_travail_jour']);
		$Utilisateur->setTempsDeTravailMois($_POST['ut_temps_de_travail_mois']);
		$Utilisateur->setTdtLundi($_POST['ut_tdt_lundi']);
		$Utilisateur->setTdtMardi($_POST['ut_tdt_mardi']);
		$Utilisateur->setTdtMercredi($_POST['ut_tdt_mercredi']);
		$Utilisateur->setTdtJeudi($_POST['ut_tdt_jeudi']);
		$Utilisateur->setTdtVendredi($_POST['ut_tdt_vendredi']);
		$Utilisateur->setTdtSamedi($_POST['ut_tdt_samedi']);
		$Utilisateur->setTdtDimanche($_POST['ut_tdt_dimanche']);

		$Utilisateur->setQuotaHeuresSupp($_POST['ut_quota_heures_supp']);
		if (!isset($_POST['ut_mark_admin'])) {
			$_POST['ut_mark_admin'] = 0;
		}
		$Utilisateur->setMarkAdmin($_POST['ut_mark_admin']);
		if (!isset($_POST['ut_mark_recapitulatif'])) {
			$_POST['ut_mark_recapitulatif'] = 0;
		}
		$Utilisateur->setMarkRecapitulatif($_POST['ut_mark_recapitulatif']);

    	$Utilisateur->modifier();
		// Action suivante
    	$this->setSuivant('__defaut__');
	}

    public function executerSupprimer()
    {
		$aso_admin_utilisateur = array();
		// Vérif du nombre d'utilisateur admin (doit être supérieur à 1)
		$Utilisateur = new Utilisateur();
		$nbre_admin = $Utilisateur->consulter(Utilisateur::GU_ADMIN);
		if (count($nbre_admin) > 1) {
			trigger_error('Utilisateur admin > 1 -> OK', E_USER_NOTICE);
			// Vérif des travail_projets
			$TravailProjet = new TravailProjet();
			$bool_existe = $TravailProjet->consulter(TravailProjet::GTP_UTILISATEUR, array($_POST['utsu_id']));
			if ($bool_existe == false) {
				trigger_error('TravailProjet -> OK', E_USER_NOTICE);
				// Vérif des absences
				$Absence = new Absence();
				$bool_existe = $Absence->consulter(Absence::GA_ID_UTILISATEUR, array($_POST['utsu_id']));
				if ($bool_existe == false) {
					trigger_error('Absence -> OK', E_USER_NOTICE);
					// Suppression de l'utilisateur
					$Utilisateur = new Utilisateur();
					$Utilisateur->setIdUtilisateur($_POST['utsu_id']);
			    	if ($Utilisateur->supprimer()) {
			    		$aso_admin_utilisateur['messages'][] = "L'utilisateur a été supprimé.";
			    	}
				}
			}
		} else {
			$aso_admin_utilisateur['messages'][] = "Il n'est pas possible de supprimer le seul administrateur!";
		}

		// Message d'erreur si l'utilisateur contient des données
		if (isset($bool_existe) && $bool_existe != false) {
			$aso_admin_utilisateur['messages'][] = "Il n'est pas possible de supprimer un utilisateur contenant des données!";
		}

		// Enregistrement du message
		$this->getRegistre()->ajouterDonnee('admin_utilisateur', $aso_admin_utilisateur);

		// Action suivante
    	$this->setSuivant('__defaut__');
    }
}
?>