1870 lines
78 KiB
PHP
1870 lines
78 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* classe décrivant les abonnements des utilisateurs
|
||
|
* chaque abonnement peut concerner un ou +sieurs hubs
|
||
|
* chaque abonnement a ses jours, son heure d'envoi et un nombre maximum de liens à prendre en compte pour les mailings
|
||
|
* l'utilisateur a la haute main pour les actualiser/supprimer ses abonnements comme souhaité
|
||
|
* il faut fournir une version aggrégée et sans doublon des différents hubs concernés par un abonnement, que cela soit pour l'affichage en ligne ou l'envoi d'un email
|
||
|
* on a besoin de la classes FclFlux_hub pour désigner les hubs inclus dans chaque abonnement.
|
||
|
* + la classe FclFlux_utilisateur pour désigner l'abonné
|
||
|
*
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
require_once("FclFlux_utilisateur.php");
|
||
|
require_once("FclFlux_hub.php");
|
||
|
class FclFlux_abonnement
|
||
|
{
|
||
|
public $id_abonnement;
|
||
|
protected $designation;// désignation de l'abonnement.
|
||
|
protected $jours_alerte;// les jours de la semaine où l'utilisateur souhaite recevoir son abonnement. Peut être vide.
|
||
|
public $heure_alerte;// heure de départ souhaitée pour l'envoi de l'abonnement
|
||
|
protected $decalage_horaire;// décalage horaire entre l'heure locale du fuseau horaire de l'utilisateur et celui par défaut de l'application.
|
||
|
protected $time_crea;// timestamp de l'enregistrement de l'abonnement.
|
||
|
protected $time_maj;// timestamp de la dernière mise à jour de l'abonnement.
|
||
|
protected $time_envoi;// timestamp du dernier envoi.
|
||
|
public $proprietaire;// objet de type FclFlux_utilisateur désignant le propriétaire de l'abonnement.
|
||
|
protected $max_liens;// définit le nombre de liens maximum pouvant être envoyés / message.
|
||
|
protected $ville_insee;// le code insee de la ville centrale de l'abonnement si il s'agit d'actualités locales.
|
||
|
public $erreurs=array();//collecte les erreurs / utilisateur générées par les méthodes
|
||
|
/**
|
||
|
* Constructeur qui initialise certains attributs en testant les valeurs fournies
|
||
|
*
|
||
|
* @param $infos tableau contenant les différentes données correspondant aux attributs (supposés homonymes)
|
||
|
* @return null
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function __construct($infos=null)
|
||
|
{
|
||
|
if((!empty($infos))&&(is_array($infos)))
|
||
|
{
|
||
|
$erreur_ok=false;
|
||
|
foreach ($infos as $attribut => $valeur)
|
||
|
{
|
||
|
$methode="set_$attribut";
|
||
|
if (method_exists(__CLASS__,$methode))
|
||
|
{
|
||
|
if(!$this->$methode($valeur))
|
||
|
$erreur_ok=true;
|
||
|
}
|
||
|
else
|
||
|
$this->$attribut=$valeur;
|
||
|
}
|
||
|
if(($erreur_ok)&&(empty($this->erreurs)))
|
||
|
$this->erreurs=(array) ERREUR_IMPREVUE;
|
||
|
}
|
||
|
}
|
||
|
/**
|
||
|
* Méthode testant la validité de la désignation de l'abonnement
|
||
|
* et l'attribuant à l'objet si ok
|
||
|
*
|
||
|
* @param la désignation à contrôler
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function set_designation($designation)
|
||
|
{
|
||
|
$designation=strip_tags(strval(trim($designation)));
|
||
|
$longueur=strlen($designation);
|
||
|
if(($longueur<ABO_MIN_DESIGNATION)||($longueur>ABO_MAX_DESIGNATION))
|
||
|
{
|
||
|
$this->erreurs=array_merge($this->erreurs,(array) (str_replace(array("__MIN__","__MAX__"),array(ABO_MIN_DESIGNATION,ABO_MAX_DESIGNATION),ERREUR_ABO_DESIGNATION_LONG)));
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->designation=$designation;
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
/**
|
||
|
* Méthode testant la validité des jours de la semaine (JDS) attribués à un abonnement
|
||
|
* ils doivent correspondre aux valeurs numériques des JDS de la fonction date()-> 0,1,2,3,4,5,6
|
||
|
* il ne peut y avoir que 7 jours, tous différents
|
||
|
* si ok, on les attribue à l'objet avec mise en forme, exemple : [0][6] pour envoi le week-end
|
||
|
* cet attribut peut être vide (=abonnement inactif)
|
||
|
*
|
||
|
* @param valeur fournie sous forme d'une chaîne de caractères séparés par des virgules
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function set_jours_alerte($jours=NULL)
|
||
|
{
|
||
|
if($jours==NULL)
|
||
|
$jours_alerte="";
|
||
|
else
|
||
|
{
|
||
|
$jours_alerte=null;
|
||
|
$jours=explode(",",$jours);
|
||
|
$valeurs_ok=explode("|",ABO_JOURS);
|
||
|
foreach($jours as $valeur_test)
|
||
|
{
|
||
|
if (!in_array($valeur_test,$valeurs_ok))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_AUTORISES." >> ".htmlentities($valeur_test,ENT_QUOTES)));
|
||
|
return false;
|
||
|
}
|
||
|
elseif(strpos($jours_alerte,"[$valeur_test]")===false)//pas un doublon
|
||
|
$jours_alerte.="[$valeur_test]";
|
||
|
}
|
||
|
}
|
||
|
$this->jours_alerte=$jours_alerte;
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode testant la validité de l'heure de départ d'envoi des emails
|
||
|
*
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function set_heure_alerte($heure)
|
||
|
{
|
||
|
if(empty($heure))
|
||
|
{
|
||
|
$this->heure_alerte="07";
|
||
|
return true;
|
||
|
}
|
||
|
$valeurs_ok="[00][01][02][03][04][05][06][07][08][09][10][11][12][13][14][15][16][17][18][19][20][21][22][23]";
|
||
|
if (strpos($valeurs_ok,"[$heure]")===false)
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_AUTORISES." >> ".htmlentities($heure,ENT_QUOTES)));
|
||
|
return false;
|
||
|
}
|
||
|
$this->heure_alerte=$heure;
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode testant la validité du propriétaire fourni
|
||
|
*
|
||
|
* @param user : une instance de l'objet FclFlux_utilisateur
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function set_proprietaire($user)
|
||
|
{
|
||
|
if(!($user instanceof FclFlux_utilisateur))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
if(!isset($user->id_utilisateur))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
if(!(FclFlux_utilisateur::recherche($user->id_utilisateur,"id_utilisateur","id_utilisateur")))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($user->id_utilisateur)));
|
||
|
return false;
|
||
|
}
|
||
|
$this->proprietaire=$user;
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode testant la valeur saisie pour le nombre maximum de liens / envoi pour cet abonnement.
|
||
|
*
|
||
|
* @param la valeur à contrôler
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
*/
|
||
|
public function set_max_liens($valeur)
|
||
|
{
|
||
|
if(empty($valeur))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
elseif(!is_int($valeur))
|
||
|
{
|
||
|
$this->erreurs=array_merge($this->erreurs,(array) ERREUR_ABO_NB_MAX_LIENS_ENTIER);
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
global $Abo_max_liens;
|
||
|
if(($valeur<$Abo_max_liens["min"])||($valeur>$Abo_max_liens["max"]))
|
||
|
{
|
||
|
$this->erreurs=array_merge($this->erreurs,(array) (str_replace(array("__MIN__","__MAX__"),array($Abo_max_liens["min"],$Abo_max_liens["max"]),ERREUR_ABO_NB_MAX_LIENS_VALEUR)));
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
$this->max_liens=$valeur;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode testant le code insee de la ville centrale d'un abonnement aux actualités locales.
|
||
|
* sa valeur peut être nulle, si il s'agit d'un autre type d'abonnement.
|
||
|
*
|
||
|
* @param la valeur à contrôler
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
*/
|
||
|
public function set_ville_insee($insee=null)
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if(empty($insee))
|
||
|
$this->ville_insee=null;
|
||
|
else
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
$prepare=$Bd->prepare("SELECT id_rubrique FROM hub_rubriques WHERE insee=:insee;");
|
||
|
$recherche=$prepare->execute(array(":insee"=>$insee));
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false;
|
||
|
$rub_infos=$prepare->fetch();
|
||
|
$prepare=null;
|
||
|
if(!empty($rub_infos))
|
||
|
$this->ville_insee=$insee;
|
||
|
else
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".htmlentities($insee,ENT_QUOTES)));
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode cherchant un abonnement dans le bd via son id_abonnement, seul identifiant unique
|
||
|
*
|
||
|
* @param l'id de l'abonnement recherché, 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 abonnements WHERE id_abonnement=:valeur AND auteur_id=:id");
|
||
|
$recherche=$prepare->execute(array(":valeur"=>$valeur,":id"=>$proprietaire->id_utilisateur));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$prepare=$Bd->prepare("SELECT $champ_sortie FROM abonnements WHERE id_abonnement=: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 listant les abonnements d'un utilisateur.
|
||
|
*
|
||
|
* @param $crea_cache vaut true si on souhaite stocker le résultat dans un fichier, $champ_sortie les champs souhaités.
|
||
|
* @return les données de la table dans un tableau php si trouvé. false si pas trouvé ou en cas d'erreur.
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function get_liste($crea_cache=false,$champ_sortie="*")
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if(empty($this->proprietaire))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
$id=strval($this->proprietaire->id_utilisateur);
|
||
|
$prepare=$Bd->prepare("SELECT $champ_sortie FROM abonnements WHERE auteur_id=:id;");
|
||
|
$recherche=$prepare->execute(array(":id"=>$id));
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false;
|
||
|
$resultat=$prepare->fetchAll(PDO::FETCH_ASSOC);
|
||
|
$prepare=null;
|
||
|
if(empty($resultat))
|
||
|
return false;
|
||
|
elseif($crea_cache)
|
||
|
return crea_cache(CACHE_REP_UTILISATEURS."/".$id[0]."/abo-$id.txt",$resultat);
|
||
|
else
|
||
|
return $resultat;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode listant les hubs concernés par un abonnement
|
||
|
*
|
||
|
* @return les identifiants des hubs dans un tableau php si trouvé. false si pas trouvé ou en cas d'erreur.
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function get_liste_hubs()
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if(empty($this->id_abonnement))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
$id=intval($this->id_abonnement);
|
||
|
$prepare=$Bd->prepare("SELECT id_hub FROM abonnements_hub WHERE id_abonnement=:id;");
|
||
|
$recherche=$prepare->execute(array(":id"=>$id));
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false;
|
||
|
$resultat=$prepare->fetchAll(PDO::FETCH_ASSOC);
|
||
|
$prepare=null;
|
||
|
if(empty($resultat))
|
||
|
return false;
|
||
|
else
|
||
|
return $resultat;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode listant les hubs proposés à l'utilisateur pour son abonnement.
|
||
|
* Ce sont les hubs classés dans les mêmes rubriques que ceux déjà concernés par l'abonnement.
|
||
|
*
|
||
|
* @param $hubs_existants tableau contenant les id des hubs concernés par cet abonnement.
|
||
|
* @return les identifiants des hubs dans un tableau php si trouvé. false si pas trouvé ou en cas d'erreur.
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function get_propose_hubs($hubs_existants="")
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if(empty($this->id_abonnement))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
if(empty($hubs_existants))
|
||
|
$hubs_existants=$this->get_liste_hubs();
|
||
|
if(empty($hubs_existants))
|
||
|
return false;
|
||
|
$hubs_sql="";
|
||
|
foreach($hubs_existants as $hub_id)
|
||
|
$hubs_sql.=$hub_id["id_hub"].",";
|
||
|
$hubs_sql=substr($hubs_sql,0,-1);
|
||
|
$prepare=$Bd->prepare("SELECT DISTINCT Propose.id_hub FROM hub_classement_rubriques AS Propose,hub_classement_rubriques AS Existants WHERE ( (Propose.id_rubrique=Existants.id_rubrique) AND Existants.id_hub IN ($hubs_sql) AND Propose.id_hub NOT IN ($hubs_sql));");
|
||
|
$recherche=$prepare->execute();
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false;
|
||
|
$resultat=$prepare->fetchAll(PDO::FETCH_ASSOC);
|
||
|
$prepare=null;
|
||
|
if(empty($resultat))
|
||
|
return false;
|
||
|
else
|
||
|
return $resultat;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode sortant les principales infos d'un abonnement + liste des hubs concernés.
|
||
|
*
|
||
|
* @param $crea_cache vaut true si on souhaite stocker le résultat dans un fichier, $champ_sortie les champs souhaités
|
||
|
* @return les données de la table dans un tableau php si trouvé. false si pas trouvé ou en cas d'erreur.
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function get_infos($crea_cache=false,$champ_sortie="designation,auteur_id,jours_alerte,heure_alerte,time_envoi,ville_insee,max_liens")
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if(empty($this->id_abonnement))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
$prepare=$Bd->prepare("SELECT $champ_sortie FROM abonnements WHERE id_abonnement=:id LIMIT 1;");
|
||
|
$recherche=$prepare->execute(array(":id"=>$this->id_abonnement));
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false;
|
||
|
$infos=$prepare->fetch(PDO::FETCH_ASSOC);
|
||
|
$prepare=null;
|
||
|
if(empty($infos))
|
||
|
return false;
|
||
|
$hubs=$this->get_liste_hubs();
|
||
|
if(!empty($hubs))
|
||
|
$infos=array_merge($infos,$hubs);
|
||
|
//infos complémentaires liées à la ville si connue...
|
||
|
if(!empty($infos["ville_insee"]))
|
||
|
{
|
||
|
$prepare=$Bd->prepare("SELECT r.id_rubrique,v.cp,v.nom,v.dep_num,v.dep_nom,v.region_nom FROM hub_rubriques AS r,villes AS v WHERE ((v.insee=r.insee) AND (r.insee=:insee))");
|
||
|
$recherche=$prepare->execute(array(":insee"=>$infos["ville_insee"]));
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false;
|
||
|
$ville_infos=$prepare->fetch(PDO::FETCH_ASSOC);
|
||
|
$prepare=null;
|
||
|
if(!empty($ville_infos))
|
||
|
$infos=array_merge($infos,$ville_infos);
|
||
|
}
|
||
|
$id=strval($this->id_abonnement);
|
||
|
if($crea_cache)
|
||
|
return crea_cache(CACHE_REP_ABO."/".$id[0]."/$id.txt",$infos);
|
||
|
else
|
||
|
return $resultat;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode enregistrant un nouvel abonnement
|
||
|
*
|
||
|
* @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->designation))||(empty($this->proprietaire)))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
if(!isset($this->jours_alerte))
|
||
|
$this->jours_alerte="[0][1][2][3][4][5][6]";
|
||
|
if(empty($this->heure_alerte))
|
||
|
{
|
||
|
$heures=array("08","09","10","12");//remette 07 et 11 quand mieux lissé...
|
||
|
$heure=array_rand($heures,1);
|
||
|
$this->heure_alerte=$heures[$heure];
|
||
|
}
|
||
|
global $Abo_max_liens;
|
||
|
if(empty($this->max_liens))
|
||
|
$this->max_liens=$Abo_max_liens["medium"];
|
||
|
if(!isset($this->ville_insee))
|
||
|
$this->ville_insee=null;
|
||
|
$prepare=$Bd->prepare("INSERT INTO abonnements (designation,auteur_id,jours_alerte,heure_alerte,ville_insee,max_liens,time_crea,time_maj) VALUES (:designation,:auteur_id,:jours,:heure,:insee,:max_liens,:date_actuelle,:date_actuelle)");
|
||
|
$ajout=$prepare->execute(array(':designation'=>$this->designation,':auteur_id'=>$this->proprietaire->id_utilisateur,':jours'=>$this->jours_alerte,':heure'=>$this->heure_alerte,':insee'=>$this->ville_insee,':max_liens'=>$this->max_liens,':date_actuelle'=>time()));
|
||
|
if((test_requete(__FILE__,__LINE__,$ajout,$prepare)===false)) return false;
|
||
|
$prepare=null;
|
||
|
$this->id_abonnement=$Bd->lastInsertId();
|
||
|
$this->get_infos(true);
|
||
|
$this->get_liste(true,"id_abonnement");
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode modifiant les informations d'un abonnement
|
||
|
* seul son propriétaire doit pouvoir faire cette opération
|
||
|
* la ville de base d'un abonnement local ne peut pas changer, pas plus que le propriétaire.
|
||
|
*
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function actualise()
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if((empty($this->designation))||(empty($this->id_abonnement))||(empty($this->proprietaire)))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT." >> ".intval($this->id_abonnement)));
|
||
|
return false;
|
||
|
}
|
||
|
//recherche de l'enregistrement
|
||
|
$abo_infos=self::recherche($this->id_abonnement,$this->proprietaire,"jours_alerte,heure_alerte,max_liens,ville_insee");
|
||
|
if(empty($abo_infos))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($this->id_abonnement).",".intval($this->proprietaire->id_utilisateur)));
|
||
|
return false;
|
||
|
}
|
||
|
if(!isset($this->jours_alerte))
|
||
|
$this->jours_alerte=$abo_infos["jours_alerte"];
|
||
|
if(empty($this->heure_alerte))
|
||
|
$this->heure_alerte=$abo_infos["heure_alerte"];
|
||
|
if(empty($this->max_liens))
|
||
|
$this->max_liens=$abo_infos["max_liens"];
|
||
|
if(empty($this->ville_insee))
|
||
|
$this->ville_insee=$abo_infos["ville_insee"];
|
||
|
$prepare=$Bd->prepare("UPDATE abonnements SET designation=:designation,jours_alerte=:jours,heure_alerte=:heure,max_liens=:max_liens,ville_insee=:ville,time_maj=:time WHERE id_abonnement=:id and auteur_id=:auteur_id;");
|
||
|
$maj=$prepare->execute(array(':designation'=>$this->designation,':jours'=>$this->jours_alerte,':heure'=>$this->heure_alerte,':max_liens'=>$this->max_liens,':ville'=>$this->ville_insee,':time'=>time(),':id'=>$this->id_abonnement,':auteur_id'=>$this->proprietaire->id_utilisateur));
|
||
|
if((test_requete(__FILE__,__LINE__,$maj,$prepare)===false)) return false;
|
||
|
$prepare=null;
|
||
|
$this->get_infos(true);
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode ajoutant un ou +sieurs hubs à un abonnement
|
||
|
*
|
||
|
* @param tableau contenant ou +sieurs objets FclFlux_hub à ajouter à un abonnement
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function ajout_hubs($hubs)
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if((empty($this->id_abonnement))||(empty($hubs)))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
if((self::recherche($this->id_abonnement,false,"id_abonnement"))===false)
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($this->id_abonnement)));
|
||
|
return false;
|
||
|
}
|
||
|
if(!is_array($hubs))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
foreach($hubs as $hub_info)
|
||
|
{
|
||
|
if(!($hub_info instanceof FclFlux_hub))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
if(empty($hub_info->id_hub))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
if((FclFlux_hub::recherche($hub_info->id_hub,"id_hub","id_hub"))===false)
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($hub_info->id_hub)));
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
$prepare_doublon=$Bd->prepare("SELECT * FROM abonnements_hub WHERE id_hub=:id_hub and id_abonnement=:id_abonnement LIMIT 1;");
|
||
|
$prepare_ajout=$Bd->prepare("INSERT INTO abonnements_hub (id_hub,id_abonnement) VALUES (:id_hub,:id_abonnement);");
|
||
|
$hier=time()-3600*24;
|
||
|
foreach($hubs as $hub_info)
|
||
|
{
|
||
|
$test_doublon=$prepare_doublon->execute(array(':id_hub'=>$hub_info->id_hub,':id_abonnement'=>$this->id_abonnement));
|
||
|
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_hub'=>$hub_info->id_hub,':id_abonnement'=>$this->id_abonnement));
|
||
|
if((test_requete(__FILE__,__LINE__,$ajout,$prepare_ajout)===false)) return false;
|
||
|
// si certains flux importés dans ce hub n'ont jamais été lus (ou depuis + de 24H), je lance leur importation
|
||
|
$flux_hub=$hub_info->get_flux();
|
||
|
if(!empty($flux_hub))
|
||
|
{
|
||
|
foreach($flux_hub as $flux_id)
|
||
|
{
|
||
|
$flux_test=FclFlux_flux::recherche($flux_id["id_flux"],"id_flux","id_flux,time_lecture,url");
|
||
|
if(!empty($flux_test))
|
||
|
{
|
||
|
if($flux_test["time_lecture"]<$hier)
|
||
|
{
|
||
|
$flux_test["limites"]["url_long_max"]=FLUX_MAX_URL;
|
||
|
$flux_lecture=new FclFlux_flux($flux_test);
|
||
|
$flux_lecture->import_liens();
|
||
|
unset($flux_lecture);
|
||
|
}
|
||
|
}
|
||
|
unset($flux_test);
|
||
|
}
|
||
|
$hub_info->get_liste_posts(true);
|
||
|
}
|
||
|
unset($flux_hub);
|
||
|
}
|
||
|
}
|
||
|
$prepare_doublon=null;
|
||
|
$prepare_ajout=null;
|
||
|
$this->get_infos(true);
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode supprimant un ou +sieurs hubs à un abonnement
|
||
|
*
|
||
|
* @param tableau contenant ou +sieurs objets FclFlux_hub à supprimer à un abonnement
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function supprime_hubs($hubs)
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if((empty($this->id_abonnement))||(empty($hubs)))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
if(!is_array($hubs))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
$hubs_suppr="";$i=0;
|
||
|
foreach($hubs as $hub_info)
|
||
|
{
|
||
|
if(!($hub_info instanceof FclFlux_hub))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
if(empty($hub_info->id_hub))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
if($i==0)
|
||
|
$hubs_suppr=intval($hub_info->id_hub);
|
||
|
else
|
||
|
$hubs_suppr.=",".intval($hub_info->id_hub);
|
||
|
$i++;
|
||
|
}
|
||
|
$prepare_suppr=$Bd->prepare("DELETE FROM abonnements_hub WHERE id_hub in ($hubs_suppr) AND id_abonnement=:id_abonnement;");
|
||
|
$suppr=$prepare_suppr->execute(array(':id_abonnement'=>$this->id_abonnement));
|
||
|
if((test_requete(__FILE__,__LINE__,$suppr,$prepare_suppr)===false)) return false;
|
||
|
$nb_enreg=$prepare_suppr->rowCount();
|
||
|
$prepare_suppr=null;
|
||
|
if($nb_enreg==0)
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_SUPPR." >> ".intval($this->id_abonnement).",".htmlentities($hubs_suppr,ENT_QUOTES)));
|
||
|
return false;
|
||
|
}
|
||
|
$this->get_infos(true);
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode supprimant l'enregistrement d'un abonnement
|
||
|
* seul son propriétaire doit pouvoir faire cette opération
|
||
|
*
|
||
|
* @param null
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function supprime()
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if((empty($this->id_abonnement))||(empty($this->proprietaire)))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT." >> ".intval($this->id_abonnement)));
|
||
|
return false;
|
||
|
}
|
||
|
$prepare=$Bd->prepare("DELETE FROM abonnements WHERE id_abonnement=:id AND auteur_id=:id_utilisateur LIMIT 1;");
|
||
|
$suppr=$prepare->execute(array(':id'=>$this->id_abonnement,':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_abonnement).",".intval($this->proprietaire->id_utilisateur)));
|
||
|
return false;
|
||
|
}
|
||
|
$this->get_liste(true,"id_abonnement");//regénère la liste des abos de l'utilisateur.
|
||
|
$fichier=$this->id_abonnement.".txt";
|
||
|
$chemin=CACHE_REP."/".CACHE_REP_ABO."/".$fichier[0]."/".$fichier;
|
||
|
if((file_exists($chemin))&&(!unlink($chemin)))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_SUPPR." >> ".htmlentities($chemin,ENT_QUOTES)));
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode créant un nouvel abonnement pour un utilisateur connecté
|
||
|
* avec les hubs de référence d'une rubrique
|
||
|
*
|
||
|
* @param la rubrique et l'utilisateur concernés
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function abo_rapide_rubrique($user,$rubrique)
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if((!($user instanceof FclFlux_utilisateur))||(!($rubrique instanceof FclFlux_rubrique)))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
if((empty($user->id_utilisateur))||(empty($rubrique->id_rubrique)))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
$user_info=FclFlux_utilisateur::recherche($user->id_utilisateur,"id_utilisateur","id_utilisateur");
|
||
|
if(empty($user_info))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($user->id_utilisateur)));
|
||
|
return false;
|
||
|
}
|
||
|
$rubrique_info=FclFlux_rubrique::recherche($rubrique->id_rubrique,"nom");
|
||
|
if(empty($rubrique_info["nom"]))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($rubrique->id_rubrique)));
|
||
|
return false;
|
||
|
}
|
||
|
//hubs de référence pour cette rubrique ???
|
||
|
$hubs_reference=$rubrique->get_liste_hubs(false,true);
|
||
|
if(empty($hubs_reference))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($rubrique->id_rubrique)));
|
||
|
return false;
|
||
|
}
|
||
|
//variation du créneau d'envoi par défaut
|
||
|
$heures=array("08","09","10","12");//remette 07 et 11 quand mieux lissé...
|
||
|
$heure=array_rand($heures,1);
|
||
|
global $Abo_max_liens;
|
||
|
$prepare=$Bd->prepare("INSERT INTO abonnements (designation,auteur_id,heure_alerte,max_liens,time_crea,time_maj) VALUES (:designation,:auteur_id,:creneau,:max_liens,:date_actuelle,:date_actuelle)");
|
||
|
$ajout=$prepare->execute(array(':designation'=>$rubrique_info["nom"],':creneau'=>$heures[$heure],':auteur_id'=>$user->id_utilisateur,':max_liens'=>$Abo_max_liens["medium"],':date_actuelle'=>time()));
|
||
|
if((test_requete(__FILE__,__LINE__,$ajout,$prepare)===false)) return false;
|
||
|
$prepare=null;
|
||
|
$id=$Bd->lastInsertId();
|
||
|
if(empty($id))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_AJOUT));
|
||
|
return false;
|
||
|
}
|
||
|
$prepare_ajout=$Bd->prepare("INSERT INTO abonnements_hub (id_hub,id_abonnement) VALUES (:id_hub,:id_abonnement);");
|
||
|
$hier=time()-24*3600;
|
||
|
foreach($hubs_reference as $hub_info)
|
||
|
{
|
||
|
$ajout=$prepare_ajout->execute(array(':id_hub'=>$hub_info["id_hub"],':id_abonnement'=>$id));
|
||
|
if((test_requete(__FILE__,__LINE__,$ajout,$prepare_ajout)===false)) return false;
|
||
|
}
|
||
|
$prepare_ajout=null;
|
||
|
$this->id_abonnement=$id;
|
||
|
$this->proprietaire=$user;
|
||
|
$this->get_infos(true);
|
||
|
$this->get_liste(true,"id_abonnement");
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode créant un nouvel abonnement aux actualités locales.
|
||
|
*
|
||
|
* @param l'utilisateur concerné et l'insee de la ville centrale de l'abonnement.
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function abo_rapide_ville($user,$insee)
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if(empty($insee))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT." >> ".intval($user->id_utilisateur)));
|
||
|
return false;
|
||
|
}
|
||
|
if(!($user instanceof FclFlux_utilisateur))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
if(empty($user->id_utilisateur))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
$user_info=FclFlux_utilisateur::recherche($user->id_utilisateur,"id_utilisateur","id_utilisateur");
|
||
|
if(empty($user_info))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($user->id_utilisateur)));
|
||
|
return false;
|
||
|
}
|
||
|
//il me faut maintenant connaître la rubrique correspondant au code insee + les 2 rubriques supérieures (département + pays sauf si il y a un regroupement de communes).
|
||
|
$prepare=$Bd->prepare("SELECT ville.id_rubrique as id_ville,ville.nom as nom,dep.id_rubrique as id_dep,region.id_rubrique as id_region FROM hub_rubriques as ville,hub_rubriques as dep,hub_rubriques as region WHERE ((region.id_rubrique=dep.mere_id) AND (dep.id_rubrique=ville.mere_id) AND (ville.insee=:insee)) LIMIT 1;");
|
||
|
$recherche=$prepare->execute(array(":insee"=>$insee));
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false;
|
||
|
$id_rubriques=$prepare->fetch(PDO::FETCH_ASSOC);
|
||
|
if(empty($id_rubriques))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($insee)));
|
||
|
return false;
|
||
|
}
|
||
|
// hubs de référence pour ces rubriques ???
|
||
|
$hubs_reference=array();
|
||
|
$cherche_rub=new FclFlux_rubrique();
|
||
|
$cherche_rub->id_rubrique=$id_rubriques["id_ville"];
|
||
|
$hubs_reference=$cherche_rub->get_liste_hubs(false,true);
|
||
|
$cherche_rub->id_rubrique=$id_rubriques["id_dep"];
|
||
|
$hubs_reference=array_merge($hubs_reference,$cherche_rub->get_liste_hubs(false,true));
|
||
|
$cherche_rub->id_rubrique=$id_rubriques["id_region"];
|
||
|
$hubs_reference=array_merge($hubs_reference,$cherche_rub->get_liste_hubs(false,true));
|
||
|
unset($cherche_rub);
|
||
|
if(empty($hubs_reference))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($insee)));
|
||
|
return false;
|
||
|
}
|
||
|
//variation du créneau d'envoi par défaut
|
||
|
$heures=array("08","09","10","12");//remette 07 et 11 quand mieux lissé...
|
||
|
$heure=array_rand($heures,1);
|
||
|
global $Abo_max_liens;
|
||
|
if(empty($this->max_liens))
|
||
|
$this->max_liens=$Abo_max_liens["medium"];
|
||
|
$prepare=$Bd->prepare("INSERT INTO abonnements (designation,auteur_id,heure_alerte,ville_insee,max_liens,time_crea,time_maj) VALUES ('Actualités locales.',:auteur_id,:creneau,:insee,:max_liens,:date_actuelle,:date_actuelle)");
|
||
|
$ajout=$prepare->execute(array(':creneau'=>$heures[$heure],':insee'=>$insee,':max_liens'=>$this->max_liens,':auteur_id'=>$user->id_utilisateur,':date_actuelle'=>time()));
|
||
|
if((test_requete(__FILE__,__LINE__,$ajout,$prepare)===false)) return false;
|
||
|
$prepare=null;
|
||
|
$id=$Bd->lastInsertId();
|
||
|
if(empty($id))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_AJOUT));
|
||
|
return false;
|
||
|
}
|
||
|
$prepare_ajout=$Bd->prepare("INSERT INTO abonnements_hub (id_hub,id_abonnement) VALUES (:id_hub,:id_abonnement);");
|
||
|
$hier=time()-3600*24;
|
||
|
$sauve_hubs_ajout="";// le même hub peut être classé dans une ville et son département par exemple.
|
||
|
foreach($hubs_reference as $hub_info)
|
||
|
{
|
||
|
if(strpos($sauve_hubs_ajout,"[".$hub_info["id_hub"]."]")===false)
|
||
|
{
|
||
|
$ajout=$prepare_ajout->execute(array(':id_hub'=>$hub_info["id_hub"],':id_abonnement'=>$id));
|
||
|
if((test_requete(__FILE__,__LINE__,$ajout,$prepare_ajout)===false)) return false;
|
||
|
$sauve_hubs_ajout.="[".$hub_info["id_hub"]."]";
|
||
|
}
|
||
|
}
|
||
|
$prepare_ajout=null;
|
||
|
$this->id_abonnement=$id;
|
||
|
$this->get_infos(true);
|
||
|
$this->proprietaire=$user;
|
||
|
$this->get_liste(true,"id_abonnement");
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode répercutant le changement de ville principal d'un abonnement local sur les hubs auxquels il est associé.
|
||
|
*
|
||
|
* @param l'insee de la nouvelle ville et l'utilisateur abonné.
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function abo_rapide_nouvelle_ville($nouv_insee,$user)
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
if((empty($this->id_abonnement))||(empty($user)))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
$abonnement_infos=self::recherche($this->id_abonnement,$user,"auteur_id,ville_insee");
|
||
|
if(empty($abonnement_infos))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".$this->id_abonnement));
|
||
|
return false;
|
||
|
}
|
||
|
// l'abonnement existe et appartient à cet utilisateur.
|
||
|
// je commence par supprimer tous les hubs concernés actuellement par cet abonnement (ancienne ville).
|
||
|
$prepa_suppr_hubs_abo=$Bd->prepare("DELETE FROM abonnements_hub WHERE id_abonnement=:id_abo;");
|
||
|
$suppr_hubs_abo=$prepa_suppr_hubs_abo->execute(array(":id_abo"=>$this->id_abonnement));
|
||
|
if((test_requete(__FILE__,__LINE__,$suppr_hubs_abo,$prepa_suppr_hubs_abo)===false)) return false;
|
||
|
// puis je vais chercher les hubs correspondant à la nouvelle ville, comme dans la méthode abo_rapide_ville().
|
||
|
$prepare=$Bd->prepare("SELECT ville.id_rubrique as id_ville,ville.nom as nom,dep.id_rubrique as id_dep,region.id_rubrique as id_region FROM hub_rubriques as ville,hub_rubriques as dep,hub_rubriques as region WHERE ((region.id_rubrique=dep.mere_id) AND (dep.id_rubrique=ville.mere_id) AND (ville.insee=:insee)) LIMIT 1;");
|
||
|
$recherche=$prepare->execute(array(":insee"=>$nouv_insee));
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false;
|
||
|
$id_rubriques=$prepare->fetch(PDO::FETCH_ASSOC);
|
||
|
if(empty($id_rubriques))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($nouv_insee)));
|
||
|
return false;
|
||
|
}
|
||
|
// hubs de référence pour ces rubriques ???
|
||
|
$hubs_reference=array();
|
||
|
$cherche_rub=new FclFlux_rubrique();
|
||
|
$cherche_rub->id_rubrique=$id_rubriques["id_ville"];
|
||
|
$hubs_reference=$cherche_rub->get_liste_hubs(false,true);
|
||
|
$cherche_rub->id_rubrique=$id_rubriques["id_dep"];
|
||
|
$hubs_reference=array_merge($hubs_reference,$cherche_rub->get_liste_hubs(false,true));
|
||
|
$cherche_rub->id_rubrique=$id_rubriques["id_region"];
|
||
|
$hubs_reference=array_merge($hubs_reference,$cherche_rub->get_liste_hubs(false,true));
|
||
|
unset($cherche_rub);
|
||
|
if(empty($hubs_reference))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($nouv_insee)));
|
||
|
return false;
|
||
|
}
|
||
|
$prepare_ajout=$Bd->prepare("INSERT INTO abonnements_hub (id_hub,id_abonnement) VALUES (:id_hub,:id_abonnement);");
|
||
|
$hier=time()-3600*24;
|
||
|
$sauve_hubs_ajout="";// le même hub peut être classé dans une ville et son département par exemple.
|
||
|
foreach($hubs_reference as $hub_info)
|
||
|
{
|
||
|
if(strpos($sauve_hubs_ajout,"[".$hub_info["id_hub"]."]")===false)
|
||
|
{
|
||
|
$ajout=$prepare_ajout->execute(array(':id_hub'=>$hub_info["id_hub"],':id_abonnement'=>$this->id_abonnement));
|
||
|
if((test_requete(__FILE__,__LINE__,$ajout,$prepare_ajout)===false)) return false;
|
||
|
$sauve_hubs_ajout.="[".$hub_info["id_hub"]."]";
|
||
|
}
|
||
|
}
|
||
|
$prepare_ajout=null;
|
||
|
$this->get_infos(true);
|
||
|
$this->get_liste(true,"id_abonnement");
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode ouvrant le fichier cache contenant les infos d'un abonnement.
|
||
|
*
|
||
|
* @param crea_cache : un booléen pour savoir si il faut tenter la création du fichier en cas d'absence
|
||
|
* @return tableau contenant les infos fournies par le fichier (si trouvé), false en cas d'erreur
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function get_infos_cache($crea_cache=false)
|
||
|
{
|
||
|
if(empty($this->id_abonnement))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
$id=strval($this->id_abonnement);
|
||
|
$fichier=CACHE_REP."/".CACHE_REP_ABO."/".$id[0]."/$id.txt";
|
||
|
$infos=array();
|
||
|
if(!file_exists($fichier))
|
||
|
{
|
||
|
if($crea_cache)
|
||
|
{
|
||
|
if(empty($GLOBALS['Bd']))
|
||
|
require("connexion-bd.php");
|
||
|
if(empty($GLOBALS['Bd'])) return false;
|
||
|
$this->get_infos(true);
|
||
|
}
|
||
|
else
|
||
|
return false;
|
||
|
}
|
||
|
if(file_exists($fichier))//la création a pu foirer
|
||
|
include($fichier);
|
||
|
else
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE." >> ".$fichier));
|
||
|
return false;
|
||
|
}
|
||
|
if(empty($t))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_CONTENU_ABSENT." >> ".$fichier));
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
foreach($t as $key => $value)
|
||
|
{
|
||
|
if(!is_array($value)) //cela doit être l'id d'une des hubs de l'abonnement
|
||
|
$infos[$key]=stripslashes($value);
|
||
|
else
|
||
|
$infos[$key]=$value;
|
||
|
}
|
||
|
}
|
||
|
if(empty($infos))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_CONTENU_ABSENT." >> ".$fichier));
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
return $infos;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode ouvrant le fichier cache contenant la liste des hubs d'un abonnement
|
||
|
*
|
||
|
* @param crea_cache : un booléen pour savoir si il faut tester la création du fichier en cas d'absence,
|
||
|
* @return tableau contenant les infos des flux fournies par le fichier (si trouvé), false en cas d'erreur
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function get_liste_hubs_cache($crea_cache=false)
|
||
|
{
|
||
|
if(empty($this->id_abonnement))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
$id=strval($this->id_abonnement);
|
||
|
$fichier=CACHE_REP."/".CACHE_REP_ABO."/".$id[0]."/$id.txt";
|
||
|
$infos=array();
|
||
|
if(!file_exists($fichier))
|
||
|
{
|
||
|
if($crea_cache)
|
||
|
{
|
||
|
if(empty($GLOBALS['Bd']))
|
||
|
require("connexion-bd.php");
|
||
|
if(empty($GLOBALS['Bd'])) return false;
|
||
|
if($this->get_infos(true))
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
return false;
|
||
|
}
|
||
|
if(file_exists($fichier))//la création a pu foirer
|
||
|
include($fichier);
|
||
|
else
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE." >> ".$fichier));
|
||
|
return false;
|
||
|
}
|
||
|
if(empty($t))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_CONTENU_ABSENT." >> ".$fichier));
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$i=0;
|
||
|
foreach($t as $key => $value)
|
||
|
{
|
||
|
if((is_array($value))&&(!empty($value["id_hub"])))
|
||
|
{
|
||
|
$hub=new FclFlux_hub();
|
||
|
$hub->id_hub=$value["id_hub"];
|
||
|
$hub_infos=$hub->get_infos_cache($crea_cache);
|
||
|
if(!empty($hub_infos))
|
||
|
{
|
||
|
$hub_infos["id_hub"]=$value["id_hub"];
|
||
|
$liste[$i]=$hub_infos;
|
||
|
$i++;
|
||
|
}
|
||
|
unset($hub);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(empty($liste))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_CONTENU_ABSENT." >> ".$fichier));
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
return $liste;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode ouvrant le fichier cache contenant la liste des hubs d'un abonnement
|
||
|
* et en sortant les derniers posts pour chacun des hubs.
|
||
|
*
|
||
|
* @param crea_cache : un booléen pour savoir si il faut tester la création du fichier en cas d'absence,
|
||
|
* $periode de lecture des posts.
|
||
|
* @return tableau contenant les infos des hubs fournies par le fichier (si trouvé), false en cas d'erreur
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function get_liste_posts_cache($crea_cache=false,$periode="jour")
|
||
|
{
|
||
|
if(empty($this->id_abonnement))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
$id=strval($this->id_abonnement);
|
||
|
$fichier=CACHE_REP."/".CACHE_REP_ABO."/".$id[0]."/$id.txt";
|
||
|
$time_fichier=filemtime($fichier);
|
||
|
$infos=array();
|
||
|
if(!file_exists($fichier))
|
||
|
{
|
||
|
if($crea_cache)
|
||
|
{
|
||
|
if(empty($GLOBALS['Bd']))
|
||
|
require("connexion-bd.php");
|
||
|
if(empty($GLOBALS['Bd'])) return false;
|
||
|
$this->get_infos(true);
|
||
|
}
|
||
|
else
|
||
|
return false;
|
||
|
}
|
||
|
if(file_exists($fichier))
|
||
|
include($fichier);
|
||
|
else
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE." >> ".$fichier));
|
||
|
return false;
|
||
|
}
|
||
|
if(empty($t))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_CONTENU_ABSENT." >> ".$fichier));
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$i=0;$max_posts=0;
|
||
|
foreach($t as $key => $value)
|
||
|
{
|
||
|
if((is_array($value))&&(!empty($value["id_hub"])))
|
||
|
{
|
||
|
$hub=new FclFlux_hub();
|
||
|
$hub->id_hub=$value["id_hub"];
|
||
|
$posts=$hub->get_liste_posts_cache($crea_cache,$periode);
|
||
|
if(!empty($posts))
|
||
|
{
|
||
|
$posts_hub[$i]=$posts;
|
||
|
$max_posts=max($max_posts,count($posts_hub[$i]));
|
||
|
$i++;
|
||
|
$posts=null;
|
||
|
}
|
||
|
unset($hub);
|
||
|
}
|
||
|
}
|
||
|
// à l'affichage je souhaite alterner des différents hubs concernés par cet abonnement.
|
||
|
// il faut aussi contrôler les doublons, un même lien pouvant apparaître dans +sieurs hubs d'un même abonnement.
|
||
|
$posts_abo=array();$cpt=0;$url_doublons=array();$url_ancres=array();
|
||
|
for($j=0;$j<=$max_posts;$j++)
|
||
|
{
|
||
|
for($k=0;$k<=$i;$k++)
|
||
|
{
|
||
|
if((!empty($posts_hub[$k][$j]))&&(!(in_array($posts_hub[$k][$j]["url"],$url_doublons)))&&(!(in_array($posts_hub[$k][$j]["ancre"],$url_ancres))))
|
||
|
{
|
||
|
$posts_abo[$cpt]=$posts_hub[$k][$j];
|
||
|
$url_doublons[]=$posts_hub[$k][$j]["url"];
|
||
|
$url_ancres[]=$posts_hub[$k][$j]["ancre"];
|
||
|
$cpt++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(empty($posts_abo))
|
||
|
return false;
|
||
|
else
|
||
|
return $posts_abo;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode ouvrant le fichier cache contenant la liste des abonnements pour un utilisateur
|
||
|
*
|
||
|
* @param crea_cache : un booléen pour savoir si il faut tester la création du fichier en cas d'absence,
|
||
|
* @return tableau contenant les infos des abonnements fournies par les fichiers (si trouvés), false en cas d'erreur
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
static function get_liste_abo_cache($user,$crea_cache=false)
|
||
|
{
|
||
|
if(!($user instanceof FclFlux_utilisateur))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
if(empty($user->id_utilisateur))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
||
|
return false;
|
||
|
}
|
||
|
$id=strval($user->id_utilisateur);
|
||
|
$fichier=CACHE_REP."/".CACHE_REP_UTILISATEURS."/".$id[0]."/abo-$id.txt";
|
||
|
$infos=array();
|
||
|
if(!file_exists($fichier))
|
||
|
{
|
||
|
if($crea_cache)
|
||
|
{
|
||
|
if(empty($GLOBALS['Bd']))
|
||
|
require("connexion-bd.php");
|
||
|
if(empty($GLOBALS['Bd'])) return false;
|
||
|
$abo=new FclFlux_abonnement();
|
||
|
$abo->proprietaire=$user;
|
||
|
$abo->get_liste(true,"id_abonnement");
|
||
|
unset($abo);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE." >> ".$fichier));
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
if(file_exists($fichier))//il ne devait pas avoir été créé si aucun abonnement pour cet utilisateur
|
||
|
include($fichier);
|
||
|
else
|
||
|
return false;
|
||
|
if(empty($t))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_CONTENU_ABSENT." >> ".$fichier));
|
||
|
// comme il ne devrait pas exister, je le supprime :
|
||
|
if(!unlink($fichier))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_SUPPR." >> ".htmlentities($fichier,ENT_QUOTES)));
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$i=0;
|
||
|
foreach($t as $key => $value)
|
||
|
{
|
||
|
if((is_array($value))&&(!empty($value["id_abonnement"])))
|
||
|
{
|
||
|
$abo=new FclFlux_abonnement();
|
||
|
$abo->id_abonnement=$value["id_abonnement"];
|
||
|
$abo_infos=$abo->get_infos_cache($crea_cache);
|
||
|
if(!empty($abo_infos))
|
||
|
{
|
||
|
$abo_infos["id_abonnement"]=$value["id_abonnement"];
|
||
|
$liste[$i]=$abo_infos;
|
||
|
$i++;
|
||
|
}
|
||
|
unset($abo);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(empty($liste))
|
||
|
{
|
||
|
//$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE." >> ".$fichier));--> normal si je n'ai aucun abonnement.
|
||
|
return false;
|
||
|
}
|
||
|
else
|
||
|
return $liste;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode basé sur la méthode précédante mais ne retourner que les éventuels abonnements aux actualités locales en ajoutant le nom de la ville.
|
||
|
*
|
||
|
* @param crea_cache : un booléen pour savoir si il faut tester la création du fichier en cas d'absence,
|
||
|
* @return tableau contenant les infos des abonnements fournies par les fichiers (si trouvés), false en cas d'erreur
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
static function get_liste_abo_ville_cache($user,$crea_cache=false)
|
||
|
{
|
||
|
$abos=self::get_liste_abo_cache($user,$crea_cache);
|
||
|
if(empty($abos))
|
||
|
return false;
|
||
|
if(empty($GLOBALS['Bd']))
|
||
|
require("connexion-bd.php");
|
||
|
if(empty($GLOBALS['Bd'])) return false;
|
||
|
foreach($abos as $abo_infos)
|
||
|
{
|
||
|
if(!empty($abo_infos["ville_insee"]))
|
||
|
{
|
||
|
$ville_infos=get_villes($abo_infos["ville_insee"],"insee");
|
||
|
if(!empty($ville_infos))
|
||
|
{
|
||
|
$abo_infos["ville_infos"]=$ville_infos;
|
||
|
$abos_ville[]=$abo_infos;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(!empty($abos_ville))
|
||
|
return $abos_ville;
|
||
|
else
|
||
|
return null;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode cherchant les stats globales concernant les abonnements
|
||
|
*
|
||
|
* @return les données dans un tableau php, false en cas d'erreur
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
static function get_stats_globales()
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
$stats=array();
|
||
|
//nbre d'abonnements total
|
||
|
$recherche=$Bd->query("SELECT id_abonnement FROM abonnements;");
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche)===false)) return false;
|
||
|
$resultats=$recherche->fetchAll();
|
||
|
$stats["nb_abo_total"]=count($resultats);
|
||
|
//nbre d'abonnements par mail
|
||
|
$recherche=$Bd->query("SELECT id_abonnement FROM abonnements WHERE jours_alerte!='';");
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche)===false)) return false;
|
||
|
$resultats=$recherche->fetchAll();
|
||
|
$stats["nb_abo_email"]=count($resultats);
|
||
|
//nbre d'abonnés total
|
||
|
$recherche=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements;");
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche)===false)) return false;
|
||
|
$resultats=$recherche->fetchAll();
|
||
|
$stats["nb_abonnes"]=count($resultats);
|
||
|
//nbre d'abonnés par email
|
||
|
$recherche=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements WHERE jours_alerte!='';");
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche)===false)) return false;
|
||
|
$resultats=$recherche->fetchAll();
|
||
|
$stats["nb_abonnes_email"]=count($resultats);
|
||
|
unset($recherche);unset($resultats);
|
||
|
return $stats;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode statique envoyant les emails relatifs aux abonnements
|
||
|
*
|
||
|
* @param $email_max nbre maximum d'emails générés par appel.
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
static function envoi_mailing($email_max="200")
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
global $Abo_max_liens;
|
||
|
if((empty($email_max))||(empty($Abo_max_liens["medium"])))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
return false;
|
||
|
}
|
||
|
$fuseau_defaut=date_default_timezone_get();
|
||
|
$date_reference=new DateTime('now',new DateTimeZone($fuseau_defaut));
|
||
|
$jour_S=$date_reference->format("w");
|
||
|
$heure=$date_reference->format("H");
|
||
|
$hier=time()-12*3600;// une marge de 12 heures doit suffir car l'abonnement n'est envoyé au + qu'une fois par jour.
|
||
|
// transformation de l'heure serveur en heure locale de l'utilisateur
|
||
|
$heure_locale="(IF((($heure+decalage_horaire)<0),($heure+decalage_horaire+24),IF((($heure+decalage_horaire)>23),($heure+decalage_horaire-24),($heure+decalage_horaire))))";
|
||
|
// on peut aussi être un "autre jour" suivant le décalage et l'heure d'alerte souhaitée
|
||
|
$jour_local1="(IF((($heure+decalage_horaire)<0),($jour_S-1),IF((($heure+decalage_horaire)>24),($jour_S+1),$jour_S)))";
|
||
|
// les jours en version numérique vont de 0 (dimanche) à 6 (samedi)
|
||
|
$jour_local="(IF($jour_local1>6,0,IF($jour_local1<0,6,$jour_local1)))";
|
||
|
// y'a pu qu'à envoyer le bouzin...
|
||
|
$get_mailing=$Bd->query("SELECT id_abonnement,time_envoi,$heure_locale as heure_locale,heure_alerte,$jour_local as jour_local,jours_alerte,decalage_horaire,max_liens FROM abonnements WHERE ((time_envoi<$hier) AND (actif_ok=1)) HAVING ((LOCATE(jour_local,jours_alerte)!=0) AND (heure_locale>=heure_alerte) AND (heure_locale<(heure_alerte+1))) LIMIT 0,$email_max");
|
||
|
//$get_mailing=$Bd->query("SELECT id_abonnement,time_envoi,$heure_locale as heure_locale,heure_alerte,$jour_local as jour_local,jours_alerte,decalage_horaire,max_liens FROM abonnements WHERE actif_ok=1 HAVING ((LOCATE(jour_local,jours_alerte)!=0)) LIMIT 0,3");
|
||
|
|
||
|
if((test_requete(__FILE__,__LINE__,$get_mailing)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE));
|
||
|
return false;
|
||
|
}
|
||
|
$resultats=$get_mailing->fetchAll(PDO::FETCH_ASSOC);
|
||
|
$get_mailing=null;
|
||
|
$nb_envoi=0;
|
||
|
if(!empty($resultats))
|
||
|
{
|
||
|
// echo count($resultats)." abonnements à traiter.";
|
||
|
/* annonces promotionnelles en cours de diffusion ?
|
||
|
require_once("FclFlux_annonces.php");
|
||
|
$annonces=FclFlux_annonce::get_liste_annonces_encours();
|
||
|
if(!empty($annonces))
|
||
|
$prepare_diffusion_annonce=$Bd->prepare("INSERT INTO annonces_diffusions (annonce_id,utilisateur_id,time_envoi) VALUES (:id,:utilisateur,:time);");*/
|
||
|
|
||
|
$prepare_maj_abo=$Bd->prepare("UPDATE abonnements SET time_envoi=:time WHERE id_abonnement=:id;");
|
||
|
$prepare_ajout_mailing=$Bd->prepare("INSERT INTO abonnements_mail (abonnement_id,utilisateur_id,time_envoi,succes,cle) VALUES (:id,:utilisateur,:time,:succes,:cle);");
|
||
|
$prepare_dernier_affichage=$Bd->prepare("SELECT time_affichage FROM utilisateurs_affichages WHERE page=:page ORDER BY time_affichage DESC LIMIT 0,1;");
|
||
|
global $Jours_semaine;
|
||
|
foreach($resultats as $abo_id)
|
||
|
{
|
||
|
$abo=new FclFlux_abonnement();
|
||
|
$abo->id_abonnement=$abo_id["id_abonnement"];
|
||
|
$abo->max_liens=$abo_id["max_liens"];
|
||
|
//je souhaite envoyer à l'utilisateur les liens importés depuis la date du dernier envoi ou du dernier affichage de cet abonnement
|
||
|
$abo->time_envoi=$abo_id["time_envoi"];
|
||
|
$page_abo_affiche=str_replace(SITE_URL,"",PAGE_ABO_AFFICHE).$abo_id["id_abonnement"];
|
||
|
$dernier_affichage=$prepare_dernier_affichage->execute(array(':page'=>$page_abo_affiche));
|
||
|
if((test_requete(__FILE__,__LINE__,$dernier_affichage,$prepare_dernier_affichage)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE." >> ".intval($abo_id["id_abonnement"])));
|
||
|
else
|
||
|
{
|
||
|
$page=$prepare_dernier_affichage->fetchAll(PDO::FETCH_ASSOC);
|
||
|
if((!empty($page))&&($page[0]["time_affichage"]>$abo->time_envoi))
|
||
|
$abo->time_envoi=$page[0]["time_affichage"];
|
||
|
}
|
||
|
// le jour de la semaine et la date peuvent être différents si il y a un décalage horaire important
|
||
|
$date_actuelle=date("d/m/Y");
|
||
|
$jour_num=date("w");
|
||
|
if($abo_id["jour_local"]!=$jour_num)
|
||
|
{
|
||
|
$jour_num=$abo_id["jour_local"];
|
||
|
if($abo_id["decalage_horaire"]>0)//on est demain :-)
|
||
|
$date_actuelle=date("d/m/Y",(time()+86400));
|
||
|
else//et là on est hier...
|
||
|
$date_actuelle=date("d/m/Y",(time()-86400));
|
||
|
}
|
||
|
$jour_nom=$Jours_semaine[$jour_num];
|
||
|
$abo_infos=$abo->get_infos_cache(true);
|
||
|
/*annonces promotionnelles à diffuser pour cet abonnement ?
|
||
|
$annonces_abo=array();
|
||
|
if(!empty($annonces))
|
||
|
{
|
||
|
foreach($annonces as $annonce_infos)
|
||
|
{
|
||
|
if(empty($annonce_infos["hubs"]))//annonce à diffuser à tout le monde
|
||
|
$annonces_abo[]=$annonce_infos;
|
||
|
else
|
||
|
{//je boucle dans $abos_info pour trouver un des id_hub concernés par l'annonce
|
||
|
foreach($abo_infos as $key => $value)
|
||
|
{
|
||
|
if(is_array($value))//cela doit être l'id d'un des hubs de l'abonnement
|
||
|
{
|
||
|
$id_hub=$value["id_hub"];
|
||
|
if(strpos($annonce_infos["hubs"],"[$id_hub]"))
|
||
|
{
|
||
|
$annonces_abo[]=$annonce_infos;
|
||
|
break(1);//pour éviter les doublons et de boucler inutilement
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}*/
|
||
|
if(empty($abo_infos["auteur_id"]))//je continue tout de même à boucler pour ne pas bloquer les autres
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT." >> ".intval($abo_id["id_abonnement"])));
|
||
|
else
|
||
|
{
|
||
|
$destinataire=new FclFlux_utilisateur();
|
||
|
$destinataire->id_utilisateur=$abo_infos["auteur_id"];
|
||
|
$destinataire_infos=$destinataire->get_infos_cache(false);
|
||
|
if(!empty($destinataire_infos["time_validation"]))//l'utilisateur doit avoir validé son compte pour recevoir quelque chose.
|
||
|
{
|
||
|
if(empty($destinataire_infos["email"]))//c'est tellement impossible que cela va arriver ? oui... c'est arrivé ! :-)
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT." >> ".intval($abo_infos["auteur_id"])));
|
||
|
else
|
||
|
$liens=$abo->get_liste_posts_cache(false,"semaine");// je ne peux me limiter aux liens des dernières 24H, l'utilisateur pouvant choisir de recevoir son abonnement une seule fois / semaine
|
||
|
if(!empty($liens))
|
||
|
{
|
||
|
echo "Il y a ".count($liens)." liens pour ".$destinataire_infos["email"]."<br>";
|
||
|
$time_message=time();
|
||
|
$cle_message=crea_passe();
|
||
|
$Mail_expediteur_email=EMAIL_MAILINGS;
|
||
|
$Mail_expediteur_nom=SITE_NOM;
|
||
|
$Mail_destinataire_email=$destinataire_infos["email"];
|
||
|
//$Mail_destinataire_email="divers@ecrivez-moi.com";
|
||
|
$Mail_destinataire_nom=stripslashes($destinataire_infos["pseudo"]);
|
||
|
$Mail_sujet="[".SITE_NOM."] ".stripslashes($abo_infos["designation"]);
|
||
|
// message alternatif lorsque le html n'est pas lu :
|
||
|
$Mail_boby_txt="Hello ".stripslashes($destinataire_infos["pseudo"])." !\n\nLe facteur est passé :-)\nVoici les nouvelles pour le $jour_nom $date_actuelle.\n\nPour voir les nouvelles sur Hello facteur : ".PAGE_ABO_AFFICHE.$abo->id_abonnement."/$time_message/$cle_message/\n\n";
|
||
|
//-- version html :
|
||
|
//texte invisible (sauf certains webmail ?) :
|
||
|
$Mail_html_sujet="Voici les dernières nouvelles pour votre abonnement : ".htmlentities(stripslashes($abo_infos["designation"])).".";
|
||
|
//entête avant logo :
|
||
|
$Mail_html_header="<p>Pour modifier ou supprimer votre abonnement <a href='".PAGE_ABO_MAJ.$abo->id_abonnement."/$time_message/$cle_message/'>cliquez-ci</a>.</p>";
|
||
|
//permet de compter les affichages (revoir : url directe !)
|
||
|
$Mail_html_url_logo=PAGE_AFFICHE_LOGO.$abo->id_abonnement."_".time().".jpg";
|
||
|
//texte d'introduction du message, hors liste de liens :
|
||
|
$Mail_html_intro="<p>Hello ".htmlentities(stripslashes($destinataire_infos["pseudo"])).",<br/><br/>Le facteur est passé :-)<br/>Voici les nouvelles pour le $jour_nom $date_actuelle.</p>";
|
||
|
$nb_item=0;
|
||
|
//d'abord les annonces d'entête
|
||
|
/*if(!empty($annonces_abo))
|
||
|
{
|
||
|
foreach($annonces_abo as $annonce_infos)
|
||
|
{
|
||
|
if($annonce_infos["emplacement"]=="header")
|
||
|
{
|
||
|
$lien_clic=PAGE_CLIC_LIEN."a/".$annonce_infos["id_annonce"]."/".intval($destinataire->id_utilisateur)."/".$annonce_infos["time_crea"];
|
||
|
$Mail_html_items[$nb_item]="<p><FclFlux_annonce_h>".$annonce_infos["annonce"]." <a href='$lien_clic'>".strtoupper($annonce_infos["lien_ancre"])."</a>.</FclFlux_annonce_h></p>";
|
||
|
$Mail_boby_txt.="** ".$annonce_infos["annonce"]." **\nLien : $lien_clic\n\n";
|
||
|
$nb_item++;
|
||
|
}
|
||
|
}
|
||
|
}*/
|
||
|
//liste de liens pour cet abonnement
|
||
|
// si l'utilisateur a choisi un nombre de liens / message, je remplace la valeur par défaut:
|
||
|
if(!empty($abo->max_liens))
|
||
|
$max_liens=$abo->max_liens;
|
||
|
else
|
||
|
$max_liens=$Abo_max_liens["medium"];
|
||
|
$i=0;$j=0;$manque=0;
|
||
|
while(isset($liens[$i]))
|
||
|
{
|
||
|
$time_compare=$liens[$i]["time_validation"];
|
||
|
if(!empty($liens[$i]["time_diffusion"]))
|
||
|
$time_compare=$liens[$i]["time_diffusion"];
|
||
|
if(($j<$max_liens)&&($time_compare>$abo->time_envoi))
|
||
|
{
|
||
|
$lien_clic=PAGE_CLIC_LIEN.$abo->id_abonnement."/".$liens[$i]["id_post"]."/".intval($destinataire->id_utilisateur);
|
||
|
// l'annonce a pu être importée d'un flux ou postée par un utilisateur -> mais c'est le nom du hub que j'affiche !
|
||
|
if((!empty($liens[$i]["flux"]))&&(!empty($liens[$i]["flux"]["source"])))// parfois je n'ai pas la source mais pourquoi ?
|
||
|
$Mail_html_items[$nb_item]="<p>[".stripslashes($liens[$i]["flux"]["source"]["nom"])."] ";
|
||
|
elseif(!empty($liens[$i]["hub"]))
|
||
|
$Mail_html_items[$nb_item]="<p>[".stripslashes($liens[$i]["hub"]["nom"])."] ";
|
||
|
elseif(!empty($liens[$i]["auteur"]))// dans quel cas, je rencontre cette situation ?
|
||
|
$Mail_html_items[$nb_item]="<p>[".htmlspecialchars_decode(stripslashes($liens[$i]["auteur"]["pseudo"]))."] ";
|
||
|
$Mail_html_items[$nb_item].=htmlspecialchars_decode(stripslashes($liens[$i]["ancre"]))." <a href='$lien_clic' title=\"Publié dans : ".stripslashes($liens[$i]["hub"]["nom"])."\">+ LIRE</a>.</p>";
|
||
|
$Mail_boby_txt.=htmlspecialchars_decode(stripslashes($liens[$i]["ancre"]))."\nLien : $lien_clic\n\n";
|
||
|
$j++;$nb_item++;
|
||
|
}
|
||
|
elseif($time_compare>$abo->time_envoi)
|
||
|
$manque++;
|
||
|
$i++;
|
||
|
}
|
||
|
//. . . . . . . . . . . . . . . . ..
|
||
|
/*puis les annonces en footer
|
||
|
if(!empty($annonces_abo))
|
||
|
{
|
||
|
foreach($annonces_abo as $annonce_infos)
|
||
|
{
|
||
|
if($annonce_infos["emplacement"]=="footer")
|
||
|
{
|
||
|
$lien_clic=PAGE_CLIC_LIEN."a/".$annonce_infos["id_annonce"]."/".intval($destinataire->id_utilisateur)."/".$annonce_infos["time_crea"];
|
||
|
$Mail_html_items[$nb_item]="<p><FclFlux_annonce_b>".$annonce_infos["annonce"]." <a href='$lien_clic'>".strtoupper($annonce_infos["lien_ancre"])."</a>.</FclFlux_annonce_b></p>";
|
||
|
$Mail_boby_txt.="** ".$annonce_infos["annonce"]." **\nLien : $lien_clic\n\n";
|
||
|
$nb_item++;
|
||
|
}
|
||
|
}
|
||
|
}*/
|
||
|
if($j!=0)//pas de lien, pas de chocolat :-)
|
||
|
{
|
||
|
$Mail_html_complement="";
|
||
|
if(!empty($manque))//un seul lien vous manque et tout est...
|
||
|
$Mail_html_complement="<p>Au moins $manque autres actualités vous attendent sur <a href='".PAGE_ABO_AFFICHE.$abo->id_abonnement."/$time_message/$cle_message/' title=\"Voir la version web (+ de liens)\">Hello facteur</a>. Vous pouvez aussi <a href='".PAGE_ABO_MAJ.$abo->id_abonnement."/$time_message/$cle_message/#max_liens'>augmenter le nombre maximum d'actualités envoyées</a> pour cet abonnement.</p>";
|
||
|
//liens sous forme de grands boutons. L'ancre ne doit donc pas être trop longue :
|
||
|
$Mail_html_liens_action[0]="<a href='".PAGE_ABO_AFFICHE.$abo->id_abonnement."/$time_message/$cle_message/' title=\"Voir la version web (+ de liens)\">Voir sur Hello facteur.</a>";
|
||
|
$Mail_html_liens_action[1]="<a href='".PAGE_ABO_MAJ.$abo->id_abonnement."/$time_message/$cle_message/' title=\"Modifier ou supprimer votre abonnement\">Modifier mon abonnement.</a>";
|
||
|
$Mail_boby_txt.="Pour modifier ou supprimer votre abonnement :\n".PAGE_ABO_MAJ.$abo->id_abonnement."/$time_message/$cle_message/\n\n";
|
||
|
//footer du mail html :
|
||
|
$Mail_html_footer="<p>Vous recevez ce message parce que vous vous êtes abonné(e) au site <strong>".SITE_NOM."</strong> avec comme adresse ".$destinataire_infos["email"]." | <a href='".SITE_URL."/blog/faq.html' title='F.A.Q.'>Aide</a> | <a href='".PAGE_ABO_MAJ.$abo->id_abonnement."/$time_message/$cle_message/' title=\"Modifier ou supprimer votre abonnement\">Supprimer mon abonnement</a> | <a href='".PAGE_ABSENCES_LISTE."' title=\"Période d'absences\">Stopper temporairement les envois</a>.</p>";
|
||
|
$Mail_boby_html="";
|
||
|
ob_start();
|
||
|
include(BASE_REP."../www/".TEMPLATE_REP."/mail/defaut.php");
|
||
|
$Mail_boby_html=ob_get_contents();
|
||
|
ob_end_clean();
|
||
|
require(BASE_REP."../divers/phpmailer-initialise.php");
|
||
|
require(BASE_REP."../divers/phpmailer-envoi.php");
|
||
|
$succes=0;
|
||
|
if(!$mail->Send())
|
||
|
{
|
||
|
unset($mail);
|
||
|
sleep(2);
|
||
|
require(BASE_REP."../divers/phpmailer-initialise.php");//réinitialise et annule l'envoi précédent
|
||
|
require(BASE_REP."../divers/phpmailer-envoi.php");
|
||
|
if(!$mail->Send())
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,"bug envoi mail :".$mail->ErrorInfo.">>".intval($abo->id_abonnement)));
|
||
|
else
|
||
|
{
|
||
|
$nb_envoi++;
|
||
|
$succes=1;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$nb_envoi++;
|
||
|
$succes=1;
|
||
|
}
|
||
|
//j'enregistre la tentative d'envoi d'email
|
||
|
$ajout=$prepare_ajout_mailing->execute(array(':id'=>$abo->id_abonnement,':utilisateur'=>$abo_infos["auteur_id"],':time'=>$time_message,':succes'=>$succes,':cle'=>$cle_message));
|
||
|
if((test_requete(__FILE__,__LINE__,$ajout,$prepare_ajout_mailing)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_AJOUT.">>".intval($abo->id_abonnement)."/".intval($abo_infos["auteur_id"])."/$time_message/$succes/$cle_message"));
|
||
|
/*+ les diffusions d'annonces si c'est le cas
|
||
|
if(($succes)&&(!empty($annonces_abo)))
|
||
|
{
|
||
|
foreach($annonces_abo as $annonce_infos)
|
||
|
{
|
||
|
$ajout_diffusion=$prepare_diffusion_annonce->execute(array(':id'=>intval($annonce_infos["id_annonce"]),':utilisateur'=>$abo_infos["auteur_id"],':time'=>$time_message));
|
||
|
if((test_requete(__FILE__,__LINE__,$ajout_diffusion,$prepare_diffusion_annonce)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_MAJ.">>".intval($annonce_infos["id_annonce"])));
|
||
|
unset($ajout_diffusion);
|
||
|
}
|
||
|
}*/
|
||
|
}
|
||
|
unset($Mail_html_items);//sinon je mélange les liens...
|
||
|
unset($Mail_html_complement);
|
||
|
unset($mail);// nécessaire de réinitailiser cette variable
|
||
|
unset($succes);
|
||
|
}
|
||
|
unset($liens);
|
||
|
if((!isset($succes))||($succes==1))
|
||
|
{
|
||
|
//liens trouvés ou pas, cet abonnement a été traité...
|
||
|
$maj=$prepare_maj_abo->execute(array(':time'=>time(),':id'=>$abo->id_abonnement));
|
||
|
if((test_requete(__FILE__,__LINE__,$maj,$prepare_maj_abo)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_MAJ.">>".intval($abo->id_abonnement)));
|
||
|
}
|
||
|
}
|
||
|
unset($destinataire);unset($destinataire_infos);
|
||
|
}
|
||
|
unset($abo);unset($abo_infos);unset($liens);
|
||
|
}
|
||
|
}
|
||
|
return $nb_envoi;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode actualisant les décalages horaires à prendre en compte pour l'envoi des abonnements
|
||
|
* suivant le fuseau horaire de l'utilisateur
|
||
|
*
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
static function actualise_decalages_horaires()
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
$fuseau_defaut=date_default_timezone_get();
|
||
|
$get_utilisateurs=$Bd->query("SELECT DISTINCT U.id_utilisateur,U.fuseau_horaire FROM utilisateurs AS U,abonnements AS A WHERE ((U.id_utilisateur=A.auteur_id) AND (U.fuseau_horaire!='$fuseau_defaut') AND (U.fuseau_horaire!='') AND (A.jours_alerte!='')) order by U.fuseau_horaire desc");
|
||
|
if((test_requete(__FILE__,__LINE__,$get_utilisateurs)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE));
|
||
|
return false;
|
||
|
}
|
||
|
$utilisateurs=$get_utilisateurs->fetchAll(PDO::FETCH_ASSOC);
|
||
|
unset($get_utilisateurs);
|
||
|
if(!empty($utilisateurs))
|
||
|
{
|
||
|
$prepare_decalage=$Bd->prepare("UPDATE abonnements SET decalage_horaire=:decalage WHERE auteur_id=:id;");
|
||
|
$date_reference=new DateTime('now',new DateTimeZone($fuseau_defaut));
|
||
|
$decalage_reference=$date_reference->format("Z")/3600;
|
||
|
foreach($utilisateurs as $user)
|
||
|
{
|
||
|
$date_ailleurs=new DateTime('now',new DateTimeZone($user["fuseau_horaire"]));
|
||
|
$decalage_ailleurs=$date_ailleurs->format("Z")/3600;
|
||
|
$difference=round($decalage_ailleurs-$decalage_reference);
|
||
|
$set_decalage=$prepare_decalage->execute(array(":decalage"=>$difference,":id"=>$user["id_utilisateur"]));
|
||
|
if((test_requete(__FILE__,__LINE__,$set_decalage,$prepare_decalage)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_MAJ." >> ".$user["id_utilisateur"]));
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
unset($prepare_decalage);
|
||
|
}
|
||
|
//à l'inverse, si un utilisateur est revenu au fuseau horaire par défaut, il faut supprimer le décalage de ses abonnements.
|
||
|
$relocalise=$Bd->query("UPDATE abonnements SET decalage_horaire=0 WHERE ((decalage_horaire!=0) AND (auteur_id NOT IN (SELECT id_utilisateur FROM utilisateurs WHERE fuseau_horaire!='$fuseau_defaut')))");
|
||
|
if((test_requete(__FILE__,__LINE__,$relocalise)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_MAJ));
|
||
|
return false;
|
||
|
}
|
||
|
unset($relocalise);
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode désactivant/activant les abonnements
|
||
|
* suivant les périodes de vacance enregistrées pour l'utilisateur.
|
||
|
*
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
static function actualise_absences()
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
//détermination de l'heure locale pour les comparaisons
|
||
|
$fuseau_defaut=date_default_timezone_get();
|
||
|
$date_reference=new DateTime('now',new DateTimeZone($fuseau_defaut));
|
||
|
$timestamp_local=$date_reference->getTimestamp();
|
||
|
$cherche_abos_retour=$Bd->query("SELECT Abs.id_periode,Abo.id_abonnement FROM abonnements AS Abo,utilisateurs_absences AS Abs,abonnements_pauses as Pause WHERE ((Abo.id_abonnement=Pause.abonnement_id) AND (Pause.periode_id=Abs.id_periode) AND (Abs.time_fin<($timestamp_local+3600*Abo.decalage_horaire)));");
|
||
|
if((test_requete(__FILE__,__LINE__,$cherche_abos_retour)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE));
|
||
|
return false;
|
||
|
}
|
||
|
$abos=$cherche_abos_retour->fetchAll(PDO::FETCH_ASSOC);
|
||
|
unset($cherche_abos_retour);
|
||
|
if(!empty($abos))
|
||
|
{
|
||
|
$prepare_reactive=$Bd->prepare("UPDATE abonnements SET actif_ok=1 WHERE id_abonnement=:id;");
|
||
|
$periodes_obsoletes=array();
|
||
|
foreach($abos as $abo)
|
||
|
{
|
||
|
$reactive=$prepare_reactive->execute(array(":id"=>$abo["id_abonnement"]));
|
||
|
if((test_requete(__FILE__,__LINE__,$reactive,$prepare_reactive)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_MAJ." >> ".$abo["id_abonnement"]));
|
||
|
return false;
|
||
|
}
|
||
|
$periodes_obsoletes[]=$abo["id_periode"];
|
||
|
}
|
||
|
unset($prepare_reactive);
|
||
|
if(!empty($periodes_obsoletes))
|
||
|
{
|
||
|
$periodes_suppr=implode(",",$periodes_obsoletes);
|
||
|
$suppr=$Bd->query("DELETE FROM utilisateurs_absences WHERE id_periode IN($periodes_suppr);");
|
||
|
if((test_requete(__FILE__,__LINE__,$suppr)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_SUPPR));
|
||
|
return false;
|
||
|
}
|
||
|
unset($suppr);
|
||
|
}
|
||
|
}
|
||
|
//ensuite je désactive les abonnements correspondant à une période d'absence qui vient de débuter
|
||
|
$cherche_abos_depart=$Bd->query("SELECT DISTINCT Abo.id_abonnement FROM abonnements AS Abo,utilisateurs_absences AS Abs,abonnements_pauses as Pause WHERE ((Abo.id_abonnement=Pause.abonnement_id) AND (Pause.periode_id=Abs.id_periode) AND (Abs.time_debut<=($timestamp_local+3600*decalage_horaire)) AND (Abo.actif_ok=1));");
|
||
|
if((test_requete(__FILE__,__LINE__,$cherche_abos_depart)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE));
|
||
|
return false;
|
||
|
}
|
||
|
$abos=$cherche_abos_depart->fetchAll(PDO::FETCH_ASSOC);
|
||
|
unset($cherche_abos_depart);
|
||
|
if(!empty($abos))
|
||
|
{
|
||
|
$prepare_desactive=$Bd->prepare("UPDATE abonnements SET actif_ok=0 WHERE id_abonnement=:id;");
|
||
|
foreach($abos as $abo)
|
||
|
{
|
||
|
$desactive=$prepare_desactive->execute(array(":id"=>$abo["id_abonnement"]));
|
||
|
if((test_requete(__FILE__,__LINE__,$desactive,$prepare_desactive)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_MAJ." >> ".$abo["id_abonnement"]));
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
unset($prepare_desactive);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode supprimant les abonnements n'ayant plus aucun hub
|
||
|
*
|
||
|
* @return booléen suivant succès
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
static function nettoye_abonnements_sans_hub()
|
||
|
{
|
||
|
global $Bd;
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
$recherche_abo=$Bd->query("SELECT id_abonnement,auteur_id FROM abonnements WHERE id_abonnement NOT IN (SELECT DISTINCT id_abonnement FROM abonnements_hub);");
|
||
|
if((test_requete(__FILE__,__LINE__,$recherche_abo)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE));
|
||
|
return false;
|
||
|
}
|
||
|
$abos_suppr=$recherche_abo->fetchAll(PDO::FETCH_ASSOC);
|
||
|
unset($recherche_abo);
|
||
|
if(!empty($abos_suppr))
|
||
|
{
|
||
|
foreach($abos_suppr as $abo)
|
||
|
{
|
||
|
$proprietaire=new FclFlux_utilisateur();
|
||
|
$proprietaire->id_utilisateur=$abo["auteur_id"];
|
||
|
$abo["proprietaire"]=$proprietaire;//pour passer la protection lors de la suppression
|
||
|
$abonnement=new FclFlux_abonnement($abo);
|
||
|
$abonnement->supprime();
|
||
|
unset($proprietaire);
|
||
|
unset($abonnement);
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
/**
|
||
|
* Méthode traitant les abonnements inactifs
|
||
|
*
|
||
|
* @return nombre d'abonnements désactivés, false en cas d'erreur
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
static function desactivation()
|
||
|
{
|
||
|
global $Bd;
|
||
|
global $hub_site;//infos de l'abonnement par défaut si il existe
|
||
|
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
|
||
|
// recherche des abonnements ayant été envoyés + de X fois.
|
||
|
$cherche_abos=$Bd->query("SELECT DISTINCT abonnement_id,count(abonnement_id) AS nb_envois FROM abonnements_mail GROUP BY abonnement_id HAVING nb_envois>=".ABO_MAX_ENVOIS_PASSIFS.";");
|
||
|
if((test_requete(__FILE__,__LINE__,$cherche_abos)===false))
|
||
|
{
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE));
|
||
|
return false;
|
||
|
}
|
||
|
// recherche de la date du X ième envoi le + ancien pour chacun de ces abonnement.
|
||
|
$cherche_date_abo=$Bd->prepare("SELECT time_envoi FROM abonnements_mail WHERE abonnement_id=:id ORDER BY time_envoi DESC LIMIT 0,".ABO_MAX_ENVOIS_PASSIFS);
|
||
|
// recherche si des clics (site ou email) ont été enregistrés pour chacun de ces abonnement durant ses X derniers envois.
|
||
|
$cherche_clics_abo=$Bd->prepare("SELECT id_clic FROM stat_clics_posts WHERE abonnement_id=:id AND time_clic>:time;");
|
||
|
// désactivation des abonnements pour lesquels aucune action n'a été trouvée durant cette période
|
||
|
$desactivation=$Bd->prepare("UPDATE abonnements SET jours_alerte='' WHERE id_abonnement=:id AND jours_alerte!='';");
|
||
|
// on supprimme tous les envois enregistrés pour les abonnements désactivés.
|
||
|
$suppr_envois_tous=$Bd->prepare("DELETE FROM abonnements_mail WHERE abonnement_id=:id;");
|
||
|
// on supprime aussi les envois les + anciens, pour les abonnements toujours actifs.
|
||
|
$suppr_envois_anciens=$Bd->prepare("DELETE FROM abonnements_mail WHERE abonnement_id=:id AND time_envoi<:time;");
|
||
|
// ainsi que les clics pour cet abonnement trop ancien pour servir à désactiver cet abonnement ou celui par défaut
|
||
|
$suppr_clics_anciens=$Bd->prepare("DELETE FROM stat_clics_posts WHERE abonnement_id=:id AND time_clic<:time;");
|
||
|
$time_suppr_abo_defaut=time();
|
||
|
if(!empty($hub_site["duree_max"]))
|
||
|
{
|
||
|
$time_suppr_abo_defaut=$time_suppr_abo_defaut-$hub_site["duree_max"]*24*3600;
|
||
|
}
|
||
|
$abos=$cherche_abos->fetchAll();
|
||
|
$nb_abo=0;$nb_desactive=0;$nb_suppr_anciens=0;
|
||
|
foreach ($abos as $infos)
|
||
|
{
|
||
|
$date_abo=$cherche_date_abo->execute(array(":id"=>$infos["abonnement_id"]));
|
||
|
if((test_requete(__FILE__,__LINE__,$date_abo,$cherche_date_abo)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE." >> ".intval($infos["abonnement_id"])));
|
||
|
else
|
||
|
{
|
||
|
$dates_info=$cherche_date_abo->fetchAll(PDO::FETCH_ASSOC);
|
||
|
$nb_dates=ABO_MAX_ENVOIS_PASSIFS-1;//puisque tableau commence à 0
|
||
|
$date_limite=$dates_info[$nb_dates]["time_envoi"];
|
||
|
if(!empty($date_limite))
|
||
|
{
|
||
|
$nb_abo++;
|
||
|
$get_clics=$cherche_clics_abo->execute(array(":id"=>$infos["abonnement_id"],":time"=>$date_limite));
|
||
|
if((test_requete(__FILE__,__LINE__,$get_clics,$cherche_clics_abo)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE." >> ".intval($infos["abonnement_id"]).",".$date_limite));
|
||
|
else
|
||
|
{
|
||
|
$clics=$cherche_clics_abo->fetchAll();
|
||
|
if(empty($clics))
|
||
|
{
|
||
|
$desactive=$desactivation->execute(array(":id"=>$infos["abonnement_id"]));
|
||
|
if((test_requete(__FILE__,__LINE__,$desactive,$desactivation)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_MAJ." >> ".intval($infos["abonnement_id"])));
|
||
|
else
|
||
|
{
|
||
|
$nb_desactive++;
|
||
|
//je supprime tous les envois de cet abonnement
|
||
|
$suppr=$suppr_envois_tous->execute(array(":id"=>$infos["abonnement_id"]));
|
||
|
if((test_requete(__FILE__,__LINE__,$suppr,$suppr_envois_tous)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_SUPPR." >> ".intval($infos["abonnement_id"])));
|
||
|
else
|
||
|
$nb_suppr_anciens+=$suppr_envois_tous->rowCount();
|
||
|
//actualisation du cache de l'abonnement
|
||
|
$abo_desactif=new FclFlux_abonnement();
|
||
|
$abo_desactif->id_abonnement=$infos["abonnement_id"];
|
||
|
$abo_desactif->get_infos(true);
|
||
|
//envoi d'un email à l'abonné
|
||
|
$infos_abo=$abo_desactif->get_infos_cache();
|
||
|
if((empty($infos_abo["auteur_id"]))||(empty($infos_abo["designation"])))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT." >> ".intval($infos["abonnement_id"])));
|
||
|
else
|
||
|
{
|
||
|
$user=new FclFlux_utilisateur();
|
||
|
$user->id_utilisateur=$infos_abo["auteur_id"];
|
||
|
$infos_user=$user->get_infos_cache(true);
|
||
|
if((empty($infos_user["pseudo"]))||(empty($infos_user["email"])))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
|
||
|
else
|
||
|
{
|
||
|
$Mail_expediteur_email=EMAIL_TRANSACTIONNEL_DE;
|
||
|
$Mail_expediteur_nom=SITE_NOM;
|
||
|
$Mail_destinataire_email=$infos_user["email"];
|
||
|
$Mail_destinataire_nom=stripslashes($infos_user["pseudo"]);
|
||
|
$Mail_sujet=DESACTIVATION_OBJET;
|
||
|
// message alternatif lorsque le html n'est pas lu :
|
||
|
$Mail_boby_txt=str_replace(array("__NOM_UTILISATEUR__","__NOM_ABO__"),array(stripslashes($infos_user["pseudo"]),stripslashes($infos_abo["designation"])),DESACTIVATION_CORPS);
|
||
|
//-- version html :
|
||
|
//texte invisible (sauf certains webmail ?) :
|
||
|
$Mail_html_sujet=DESACTIVATION_OBJET;
|
||
|
//entête avant logo :
|
||
|
$Mail_html_header="<p>Désactivation de votre abonnement : ".stripslashes($infos_abo["designation"])."</p>";
|
||
|
//texte du message :
|
||
|
$Mail_html_intro=str_replace(array("__NOM_UTILISATEUR__","__NOM_ABO__"),array(stripslashes($infos_user["pseudo"]),stripslashes($infos_abo["designation"])),DESACTIVATION_CORPS_HTML);
|
||
|
//liens sous forme de grands boutons. L'ancre ne doit donc pas être trop longue :
|
||
|
$Mail_html_liens_action[0]="<a href='".PAGE_ABO_MAJ.$abo_desactif->id_abonnement."'>Réactiver mon abonnement.</a>";// ajouter un ticket pour connexion sans mot de passe !
|
||
|
//footer du mail html :
|
||
|
$Mail_html_footer="<p><a href='".SITE_NOM."'>".SITE_NOM."</a>, ".SITE_SLOGAN."</p>";
|
||
|
$Mail_boby_html="";
|
||
|
ob_start();
|
||
|
include(BASE_REP."../www/".TEMPLATE_REP."/mail/defaut.php");
|
||
|
$Mail_boby_html=ob_get_contents();
|
||
|
ob_end_clean();
|
||
|
require(BASE_REP."../divers/phpmailer-initialise.php");
|
||
|
require(BASE_REP."../divers/phpmailer-envoi.php");
|
||
|
if(!$mail->Send())
|
||
|
{
|
||
|
sleep(2);
|
||
|
if(!$mail->Send())
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_EMAIL_ENVOI.$mail->ErrorInfo));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$suppr=$suppr_envois_anciens->execute(array(":id"=>$infos["abonnement_id"],":time"=>$date_limite));
|
||
|
if(test_requete(__FILE__,__LINE__,$suppr,$suppr_envois_anciens)===false)
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_SUPPR." >> ".intval($infos["abonnement_id"]).",".$date_limite));
|
||
|
else
|
||
|
$nb_suppr_anciens+=$suppr_envois_anciens->rowCount();
|
||
|
//les stats
|
||
|
if($date_limite>$time_suppr_abo_defaut)
|
||
|
$date_limite=$time_suppr_abo_defaut;
|
||
|
$suppr=$suppr_clics_anciens->execute(array(":id"=>$infos["abonnement_id"],":time"=>$date_limite));
|
||
|
if(test_requete(__FILE__,__LINE__,$suppr,$suppr_clics_anciens)===false)
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_SUPPR." >> ".intval($infos["abonnement_id"]).",".$date_limite));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// si il y a un abonnement par défaut définit pour toute inscription,
|
||
|
// il peut être à désactiver si l'abonné est resté inactif sur l'ensemble du site au-delà d'une certaine durée.
|
||
|
if((!empty($hub_site["id"]))&&(!empty($hub_site["duree_max"])))
|
||
|
{
|
||
|
$time_limite=time()-3600*24*$hub_site["duree_max"];
|
||
|
$get_abos_inactifs_site=$Bd->query("SELECT DISTINCT A.id_abonnement FROM abonnements as A,abonnements_hub as H WHERE (A.jours_alerte!='') AND (A.time_crea<$time_limite) AND (A.id_abonnement=H.id_abonnement) AND (H.id_hub=".$hub_site["id"].") AND (A.auteur_id NOT IN (SELECT utilisateur_id FROM stat_clics_posts GROUP BY utilisateur_id HAVING MAX(time_clic)>$time_limite));");// optimiser requête avec jointure ?
|
||
|
if((test_requete(__FILE__,__LINE__,$get_abos_inactifs_site)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_RECHERCHE));
|
||
|
else
|
||
|
{//je désactive chacun des abonnements concernés
|
||
|
$abos=$get_abos_inactifs_site->fetchAll();
|
||
|
unset($get_abos_inactifs_site);
|
||
|
$nb_inactifs=count($abos);
|
||
|
if(!empty($nb_inactifs))
|
||
|
{
|
||
|
$nb_desactif_site=0;
|
||
|
foreach($abos as $abo_infos)
|
||
|
{
|
||
|
$desactive=$desactivation->execute(array(":id"=>$abo_infos["id_abonnement"]));
|
||
|
if((test_requete(__FILE__,__LINE__,$desactive,$desactivation)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_MAJ." >> ".intval($abo_infos["id_abonnement"])));
|
||
|
else
|
||
|
{
|
||
|
$nb_desactif_site++;
|
||
|
$suppr=$suppr_envois_tous->execute(array(":id"=>$abo_infos["id_abonnement"]));
|
||
|
if((test_requete(__FILE__,__LINE__,$suppr,$suppr_envois_tous)===false))
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_SUPPR." >> ".intval($abo_infos["id_abonnement"])));
|
||
|
$abo_desactif=new FclFlux_abonnement();
|
||
|
$abo_desactif->id_abonnement=$abo_infos["id_abonnement"];
|
||
|
$abo_desactif->get_infos(true);
|
||
|
unset($abo_desactif);
|
||
|
}
|
||
|
}
|
||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,"$nb_desactif_site abonnements par défaut viennent d'être désactivés."));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return $nb_desactive;
|
||
|
}
|
||
|
/**
|
||
|
* Affichage par défaut d'un objet
|
||
|
*
|
||
|
* @return chaîne de caractères listant la valeur de chaque attribut
|
||
|
* @author Fabrice PENHOËT
|
||
|
**/
|
||
|
public function __toString()
|
||
|
{
|
||
|
$texte="<h3>".__CLASS__."</h3>";
|
||
|
foreach($this as $key => $value)
|
||
|
{
|
||
|
if(is_array($value))
|
||
|
$value=affiche_tableau($value,"<li>#valeur</li>","<ul>","</ul>");
|
||
|
$texte.="$key : $value\n";
|
||
|
}
|
||
|
return $texte;
|
||
|
}
|
||
|
}//fin de la classe
|