date actuelle * et qu'il y a au moins 24H entre les dates de fin et de début. * * @param date de fin au format JJ/MM/AAAA * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_time_fin($date_fin) { if(!isset($this->time_debut)) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_AGENDA_DATE_FIN_DEBUT_ABSENT); return false; } if(preg_match(DATE_FORMAT_EREG,$date_fin)==0) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_AGENDA_DATE_FIN_FORMAT); return false; } $tab_fin=explode("/",$date_fin); $time_fin=mktime(0,0,0,$tab_fin[1],$tab_fin[0],$tab_fin[2]); if($time_fin===false) return false; $time_actuel=time(); if($time_fin<=$time_actuel) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_AGENDA_DATE_FIN_PASSE); return false; } if($time_fin<$this->time_debut) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_AGENDA_DATE_FIN_AVANT_DEBUT); return false; } if((($time_fin)-($this->time_debut))<(3600*24)) $time_fin=$this->time_debut+(3600*24); $this->time_fin=$time_fin; return true; } /** * Méthode cherchant une période d'absence dans la bd via son id_periode, seul identifiant unique. * * @param l'id de la période recherchée, son propriétaire + les champs souhaités en sortie. * @return les données de la table dans un tableau si trouvé, false si pas trouvé ou en cas d'erreur. * @author Fabrice PENHOËT **/ static function recherche($valeur,$proprietaire,$champ_sortie="*") { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(!empty($proprietaire)) { if(!($proprietaire instanceof FclFlux_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if(!isset($proprietaire->id_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $prepare=$Bd->prepare("SELECT $champ_sortie FROM utilisateurs_absences WHERE id_periode=:valeur AND utilisateur_id=:id"); $recherche=$prepare->execute(array(":valeur"=>$valeur,":id"=>$proprietaire->id_utilisateur)); } else { $prepare=$Bd->prepare("SELECT $champ_sortie FROM utilisateurs_absences WHERE id_periode=:valeur"); $recherche=$prepare->execute(array(":valeur"=>$valeur)); } if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetch(PDO::FETCH_ASSOC); $prepare=null; if(empty($resultat)) return false; else return $resultat; } /** * Méthode enregistrant une nouvelle période d'absence où l'utilisateur ne souhaite plus recevoir d'email * * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function ajout() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if((empty($this->time_debut))||(empty($this->time_fin))||(empty($this->designation))) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_UTILISA_CHAMPS_ABSENTS); return false; } if((FclFlux_utilisateur::recherche($this->proprietaire->id_utilisateur,"id_utilisateur","id_utilisateur"))===false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($this->proprietaire->id_utilisateur))); return false; } $prepare=$Bd->prepare("INSERT INTO utilisateurs_absences (utilisateur_id,time_debut,time_fin,designation) VALUES (:id,:time_debut,:time_fin,:designation)"); $ajout=$prepare->execute(array(':id'=>$this->proprietaire->id_utilisateur,':time_debut'=>$this->time_debut,':time_fin'=>$this->time_fin,':designation'=>$this->designation)); if((test_requete(__FILE__,__LINE__,$ajout,$prepare)===false)) return false; $this->id_periode=$Bd->lastInsertId(); return true; } /** * Méthode modifiant une période d'absence * * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function actualise() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if((!isset($this->id_periode))||(!isset($this->proprietaire->id_utilisateur))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if((empty($this->time_debut))||(empty($this->time_fin))||(empty($this->designation))) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_UTILISA_CHAMPS_ABSENTS); return false; } $prepare=$Bd->prepare("UPDATE utilisateurs_absences SET time_debut=:time_debut,time_fin=:time_fin,designation=:designation WHERE id_periode=:id_periode AND utilisateur_id=:id_utilisateur;"); $maj=$prepare->execute(array(':time_debut'=>$this->time_debut,':time_fin'=>$this->time_fin,':designation'=>$this->designation,':id_periode'=>$this->id_periode,':id_utilisateur'=>$this->proprietaire->id_utilisateur)); if((test_requete(__FILE__,__LINE__,$maj,$prepare)===false)) return false; $prepare=null; return true; } /** * Méthode supprimant une période d'absence * * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function supprime() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if((!isset($this->id_periode))||(!isset($this->proprietaire->id_utilisateur))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } //je commence par réactiver si nécessaire les abonnements concernés par cette période d'absence $prepare_reactive=$Bd->prepare("UPDATE abonnements SET actif_ok=1 WHERE ((actif_ok=0) AND (id_abonnement IN (SELECT abonnement_id FROM abonnements_pauses WHERE periode_id=:id_periode)));");//!!il faudrait vérifier qu'il n'y pas d'autres périodes d'absence en cours pour ces mêmes abonnements.... $reactive=$prepare_reactive->execute(array(':id_periode'=>$this->id_periode)); if((test_requete(__FILE__,__LINE__,$reactive,$prepare_reactive)===false)) return false; $prepare=$Bd->prepare("DELETE FROM utilisateurs_absences WHERE (id_periode=:id_periode AND utilisateur_id=:id_utilisateur);"); $suppr=$prepare->execute(array(':id_periode'=>$this->id_periode,':id_utilisateur'=>$this->proprietaire->id_utilisateur)); if((test_requete(__FILE__,__LINE__,$suppr,$prepare)===false)) return false; $nb_enreg=$prepare->rowCount(); $prepare=null; if($nb_enreg==0) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_SUPPR." >> ".intval($this->id_periode))); return false; } return true; } /** * Méthode actualisant la liste des abonnements concernés par une période d'absence * * @param tableau contenant ou +sieurs objets FclFlux_abonnement * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_liste_abonnements($abonnements) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if((empty($this->id_periode))||(empty($abonnements))||(!isset($this->proprietaire->id_utilisateur))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT.">>".$this->id_periode.",".$this->proprietaire->id_utilisateur)); return false; } if((self::recherche($this->id_periode,$this->proprietaire,"id_periode"))===false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($this->id_periode).">>".intval($this->proprietaire->id_utilisateur))); return false; } if(!is_array($abonnements)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } foreach($abonnements as $abo_infos) { if(!($abo_infos instanceof FclFlux_abonnement)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if(empty($abo_infos->id_abonnement)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if((FclFlux_abonnement::recherche($abo_infos->id_abonnement,$this->proprietaire,"id_abonnement"))===false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($abo_infos->id_abonnement))); return false; } } $prepare_doublon=$Bd->prepare("SELECT * FROM abonnements_pauses WHERE periode_id=:id_periode and abonnement_id=:id_abonnement LIMIT 1;"); $prepare_ajout=$Bd->prepare("INSERT INTO abonnements_pauses (periode_id,abonnement_id) VALUES (:id_periode,:id_abonnement);"); $selection=array();//me permettra de supprimer les anciennes sélections d'abonnement foreach($abonnements as $abo_infos) { $test_doublon=$prepare_doublon->execute(array(':id_abonnement'=>$abo_infos->id_abonnement,':id_periode'=>$this->id_periode)); if((test_requete(__FILE__,__LINE__,$test_doublon,$prepare_doublon)===false)) return false; $doublon=$prepare_doublon->fetch(); if(empty($doublon)) { $ajout=$prepare_ajout->execute(array(':id_abonnement'=>$abo_infos->id_abonnement,':id_periode'=>$this->id_periode)); if((test_requete(__FILE__,__LINE__,$ajout,$prepare_ajout)===false)) return false; } $selection[]=$abo_infos->id_abonnement; } $prepare_doublon=null; $prepare_ajout=null; //je peux supprimer le lien avec les abonnements qui ne sont plus concernés par cette période d'absence //mais avant il me faut les réactivés si nécessaire if(!empty($selection)) { $sql_selection=implode(",",$selection); $prepare_reactive=$Bd->prepare("UPDATE abonnements SET actif_ok=1 WHERE ((actif_ok=0) AND (id_abonnement IN (SELECT abonnement_id FROM abonnements_pauses WHERE (abonnement_id NOT IN($sql_selection) AND periode_id=:id))));"); $prepare_suppr=$Bd->prepare("DELETE FROM abonnements_pauses WHERE (abonnement_id NOT IN($sql_selection) and periode_id=:id);"); } else { $prepare_reactive=$Bd->prepare("UPDATE abonnements SET actif_ok=1 WHERE ((actif_ok=0) AND (id_abonnement IN (SELECT abonnement_id FROM abonnements_pauses WHERE periode_id=:id)));"); $prepare_suppr=$Bd->prepare("DELETE FROM abonnements_pauses WHERE periode_id=:id;");//plus aucun abonnement n'est concerné } $reactive=$prepare_reactive->execute(array(':id'=>$this->id_periode)); if((test_requete(__FILE__,__LINE__,$reactive,$prepare_reactive)===false)) return false; $suppr=$prepare_suppr->execute(array(':id'=>$this->id_periode)); if((test_requete(__FILE__,__LINE__,$suppr,$prepare_suppr)===false)) return false; $prepare_suppr=null; return true; } /** * Méthode renvoyant la liste des abonnements concernés par une période d'absence * * @param get_infos_abo : booléen pour savoir si je souhaite remonter les infos des abonnements ou seulement leur id * @return les données de la table dans un tableau (qui peut être vide), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_liste_abonnements($get_infos_abo=false) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(!isset($this->id_periode)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(!$get_infos_abo) $prepare=$Bd->prepare("SELECT abonnement_id FROM abonnements_pauses WHERE periode_id=:id"); else $prepare=$Bd->prepare("SELECT A.id_abonnement,A.designation FROM abonnements AS A,abonnements_pauses AS P WHERE ((A.id_abonnement=P.abonnement_id) AND (P.periode_id=:id)) ORDER BY A.designation"); $recherche=$prepare->execute(array(":id"=>$this->id_periode)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; if(!$get_infos_abo) $resultat=$prepare->fetchAll(PDO::FETCH_COLUMN,0); else $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; return $resultat; } /** * Méthode renvoyant la liste des périodes d'absence de l'utilisateur * * @return les données de la table dans un tableau (qui peut être vide), false en cas d'erreur * @author Fabrice PENHOËT **/ static function get_liste_utilisateur($user) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(!isset($user->id_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $prepare=$Bd->prepare("SELECT * FROM utilisateurs_absences WHERE utilisateur_id=:id order by time_debut"); $recherche=$prepare->execute(array(":id"=>$user->id_utilisateur)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; return $resultat; } /** * Méthode supprimant toutes les périodes de vacance d'un utilisateur * * @return le nombre d'enregistrements supprimés (0 possible). False en cas d'erreur. * @author Fabrice PENHOËT static function supprime_dates_utilisateur($user) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(!isset($user->id_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $prepare=$Bd->prepare("DELETE FROM utilisateurs_absences WHERE utilisateur_id=:id_utilisateur;"); $suppr=$prepare->execute(array(':id_utilisateur'=>$user->id_utilisateur)); if((test_requete(__FILE__,__LINE__,$suppr,$prepare)===false)) return false; $nb_enreg=$prepare->rowCount(); $prepare=null; return $nb_enreg; } **/ }