limites=$infos["limites"]; unset($infos["limites"]); $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é du nom fourni pour le hub * et l'attribuant à l'objet si ok * * @param le nom à contrôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_nom($nom) { $long_min=(!empty($this->limites["nom_long_min"]))?$this->limites["nom_long_min"]:0; if(empty($this->limites["nom_long_max"])) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $long_max=$this->limites["nom_long_max"]; if((($long_min!=0)&&(!is_int($long_min)))||(!is_int($long_max))||($long_max<$long_min)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $nom=strip_tags(strval(trim($nom))); $longueur=strlen($nom); if(($longueur<$long_min)||($longueur>$long_max)) { $this->erreurs=array_merge($this->erreurs,(array) (str_replace(array("__MIN__","__MAX__"),array($long_min,$long_max),ERREUR_HUB_NOM_LONG))); return false; } else { $this->nom=$nom; return true; } } /** * Méthode vérifiant que le paramètre fourni est bien un utilisateur existant * et lui attribuant l'origine du hub si c'est le cas * cet attribut ne peut être vide * * @param la valeur à contrôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_auteur($auteur) { if(!($auteur instanceof FclFlux_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if(empty($auteur->id_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $existe=FclFlux_utilisateur::recherche($auteur->id_utilisateur,"id_utilisateur","id_utilisateur"); if(empty($existe)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($auteur->id_utilisateur))); return false; } $this->auteur=$auteur; return true; } /* Méthode testant la validité de la description du hub * et l'attribuant à l'objet si ok * * @param la description à contôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_description($description) { if(empty($this->limites["description_long_max"])) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $long_max=$this->limites["description_long_max"]; if(!is_int($long_max)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $description=strip_tags(strval(trim($description))); if(empty($description)) $this->description=null; else $this->description=get_chaine_debut($description,$long_max," (...)"); return true; } /** * Méthode testant la validité d'un fichier image (nom, format, taille...) illustrant le hub. * Si ok, une miniature est créée localement et son adresse affectée à l'objet * ! le nom du hub doit être attribué à l'objet avant car il sert à nommer le fichier image * * @param $fichier : les infos du fichier qui vient d'être téléchargé * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_illustration($fichier) { if(!empty($fichier)) { $adresse_temp=$fichier["tmp_name"]; if(!file_exists($adresse_temp)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE." >> ".htmlentities($adresse_temp,ENT_QUOTES))); return false; } if(empty($this->nom)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $extension=strtolower(strrchr($fichier["name"],".")); if (strpos(HUB_ILLUS_EXTENSIONS,$extension)===false) $messages[]=ERREUR_IMAGE_FORMAT; $taille_max=min(intval(str_replace("M","000000",ini_get("upload_max_filesize"))),HUB_ILLUS_MAX_TAILLE); $taille_fichier=filesize($adresse_temp); if($taille_fichier>$taille_max) $messages[]=ERREUR_FICHIER_POIDS." (maximum : ".($taille_max/1000)." ko)"; if(empty($messages)) { $nom=nettoye_chaine(strtolower($this->nom)); $adresse_illustration=HUB_ILLUS_REP."/".$nom[0]."/".$nom.$extension; $i=1; while(file_exists($adresse_illustration)) { $i++; $adresse_illustration=HUB_ILLUS_REP."/".$nom[0]."/".$nom.$i.$extension; } if(!file_exists(HUB_ILLUS_REP."/".$nom[0]."/")) { if(!mkdir(HUB_ILLUS_REP."/".$nom[0]."/",HUB_ILLUS_REP_CHMOD,true)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_CREA." >> ".HUB_ILLUS_REP."/".$nom[0]."/")); return false; } } if(import_image($adresse_temp,$adresse_illustration,0,HUB_ILLUS_MAX_LARGEUR)) { $this->illustration=substr(strrchr($adresse_illustration,"/"),1); return true; } else return false; } else { $this->erreurs=array_merge($this->erreurs,$messages); return false; } } else $this->illustration=""; } /** * Méthode vérifiant que le paramètre fourni fait partie des valeurs possibles * et lui attribuant la langue principale du hub si c'est le cas * cet attribut ne peut être vide * * @param la valeur à contrôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_langue($langue) { $valeurs_ok=explode("|",HUB_LANGUES); if(empty($valeurs_ok)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if (!in_array($langue,$valeurs_ok)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_AUTORISES." >> ".htmlentities($langue,ENT_QUOTES))); return false; } $this->langue=$langue; return true; } /** * Méthode testant la validité du mémo saisi pour un hub * et l'attribuant à l'objet si ok * * @param le texte à contôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_memo($memo) { $long_min=(!empty($this->limites["memo_long_min"]))?$this->limites["memo_long_min"]:0; if(empty($this->limites["memo_long_max"])) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $long_max=$this->limites["memo_long_max"]; if((($long_min!=0)&&(!is_int($long_min)))||(!is_int($long_max))||($long_max<$long_min)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $memo=strip_tags(strval(trim($memo))); $longueur=strlen($memo); if(($longueur<$long_min)||($longueur>$long_max)) { $this->erreurs=array_merge($this->erreurs,(array) (str_replace("__MAX__",$long_max,ERREUR_HUB_MEMO_LONG))); return false; } else { $this->memo=$memo; return true; } } /** * Méthode supprimant le fichier image illustrant un hub * * @param null * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function suppr_illustration() { if(!empty($this->illustration)) { $fichier=$this->illustration; $adresse_illustration=HUB_ILLUS_REP."/".$fichier[0]."/".$fichier; if(!file_exists($adresse_illustration)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE." >> ".htmlentities($adresse_illustration,ENT_QUOTES))); return false; } if(!unlink($adresse_illustration)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_SUPPR." >> ".htmlentities($adresse_illustration,ENT_QUOTES))); return false; } $this->illustration=""; return true; } } /** * Méthode testant l'existence d'un hub dans le bd via son id_hub ou son nom (seuls champs identifiant) * * @param les champs souhaités en sortie * @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 **/ static function recherche($valeur,$champ_recherche="id_hub",$champ_sortie="*") { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(strpos("id_hub,nom",$champ_recherche)===false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_CHAMP_RECHERCHE." >> ".htmlentities($champ_recherche,ENT_QUOTES))); return false; } $prepare=$Bd->prepare("SELECT $champ_sortie FROM hub WHERE $champ_recherche=: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 recherche les hubs dans le bd pour un (ou +sieurs) mots-clés. * * @param les champs souhaités en sortie * @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 **/ static function recherche_globale($recherche,$champ_sortie="*") { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; $recherche=strip_tags(strval(trim($recherche))); $recherche_like="%".str_replace(" ","%",$recherche)."%";//qd espaces, cherchez plusieurs mots plutôt qu'une seule expression ??? $prepare=$Bd->prepare("SELECT $champ_sortie FROM hub WHERE id_hub=:cherche_id OR nom LIKE :recherche OR description LIKE :recherche OR mots_cles LIKE :recherche ORDER BY nom ASC;"); $recherche=$prepare->execute(array(":cherche_id"=>$recherche,":recherche"=>$recherche_like)); 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; } /** * Test si une valeur donnée pour un champ est déjà utilisée pour un autre hub * * @return true si valeur non trouvée * @author Fabrice PENHOËT **/ public function est_libre($champ="nom") { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub))//nouveau hub non encore enregistré { $prepare=$Bd->prepare("SELECT id_hub FROM hub WHERE $champ=:$champ"); $recherche=$prepare->execute(array(":$champ"=>$this->$champ)); } else { $prepare=$Bd->prepare("SELECT id_hub FROM hub WHERE ($champ=:$champ and id_hub!=:id)"); $recherche=$prepare->execute(array(":$champ"=>$this->$champ,":id"=>$this->id_hub)); } if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetch(); $prepare=null; if(empty($resultat))//pas de doublon return true; else return false; } /** * Méthode enregistrant un nouveau hub * * @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->nom))||(empty($this->auteur))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } //le nom du hub doit être unique $nom_depart=$this->nom; $i=2;$trouve=false; while((strlen($this->nom)<=HUB_MAX_NOM)&&(!$trouve)) { if(!($this->est_libre())) {//pour ne pas bloquer, on cherche un nom libre en incrémentant $this->nom=$nom_depart.$i; $i++; } else $trouve=true; } if(empty($this->langue)) $this->langue="fr"; if(empty($this->publication_ok)) $this->publication_ok=0; if(empty($this->index_ok)) $this->index_ok=0; $this->time_crea=time(); $this->time_maj=$this->time_crea; //le hub est-il à valider par un administrateur ? $est_admin=$this->auteur->est_admin(); if($est_admin) $this->time_validation=$this->time_crea; else $this->time_validation=0;//reste à valider if(empty($this->description)) $this->description=null; if(empty($this->mots_cles)) $this->mots_cles=null; if(empty($this->memo)) $this->memo=null; if(empty($this->illustration)) $this->illustration=null; $prepare=$Bd->prepare("INSERT INTO hub (nom,auteur_id,publication_ok,index_ok,description,illustration,langue,mots_cles,memo,time_crea,time_maj,time_validation) VALUES (:nom,:auteur_id,:publication_ok,:index_ok,:description,:illustration,:langue,:mots_cles,:memo,:time_crea,:time_maj,:time_validation)"); $ajout=$prepare->execute(array(':nom'=>$this->nom,':auteur_id'=>$this->auteur->id_utilisateur,':publication_ok'=>$this->publication_ok,':index_ok'=>$this->index_ok,':description'=>$this->description,':illustration'=>$this->illustration,':langue'=>$this->langue,':mots_cles'=>$this->mots_cles,':memo'=>$this->memo,':time_crea'=>$this->time_crea,':time_maj'=>$this->time_maj,':time_validation'=>$this->time_validation)); if((test_requete(__FILE__,__LINE__,$ajout,$prepare)===false)) return false; $this->id_hub=$Bd->lastInsertId(); $prepare=null; /*// l'auteur du hub devient automatiquement son administrateur (sauf si administrateur général) if(!$est_admin) $this->ajout_admin($this->auteur);//créé aussi le cache du hub else*/ $this->crea_cache(); return true; } /** * Méthode enregistrant une mise à jour des infos principales d'un hub * @param $validation_ok si un administrateur valide le hub * * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function actualise($validation_ok=false) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if((empty($this->nom))||(empty($this->id_hub))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(!($this->est_libre())) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_HUB_DOUBLON); return false; } $a_hub=self::recherche($this->id_hub,"id_hub","time_validation"); if(empty($a_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($this->id_hub))); return false; } if(($validation_ok===false)||($a_hub["time_validation"]!=0)) $this->time_validation=$a_hub["time_validation"]; else $this->time_validation=time(); $prepare=$Bd->prepare("UPDATE hub SET nom=:nom,publication_ok=:publication_ok,index_ok=:index_ok,description=:description,langue=:langue,mots_cles=:mots_cles,memo=:memo,time_maj=:date_actuelle,time_validation=:time_validation WHERE id_hub=:id_hub;"); $maj=$prepare->execute(array(':nom'=>$this->nom,':publication_ok'=>$this->publication_ok,':index_ok'=>$this->index_ok,':description'=>$this->description,':langue'=>$this->langue,':mots_cles'=>$this->mots_cles,':memo'=>$this->memo,':date_actuelle'=>time(),':time_validation'=>$this->time_validation,':id_hub'=>$this->id_hub)); if((test_requete(__FILE__,__LINE__,$maj,$prepare)===false)) return false; $prepare=null; $this->crea_cache(); return true; } /** * Méthode enregistrant la mise à jour ou suppression de l'illustration d'un hub. * @param @suppr_illustration pour les demandes de suppression de l'image, * * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function actualise_illustration($suppr_illustration=false) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if((empty($this->nom))||(empty($this->id_hub))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(($suppr_illustration===false)&&(empty($this->illustration))) return true;//rien demandé ! $a_hub=self::recherche($this->id_hub,"id_hub","illustration"); if(empty($a_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($this->id_hub))); $this->suppr_illustration(); return false; } $ancienne_illustration=$a_hub["illustration"]; // demande de suppression ou mise à jour, il faut de toute façon supprimer l'ancienne image. if(!empty($ancienne_illustration)) unlink(HUB_ILLUS_REP."/".$ancienne_illustration[0]."/".$ancienne_illustration); if($suppr_illustration) $this->illustration=null; $prepare=$Bd->prepare("UPDATE hub SET illustration=:illustration,time_maj=:date_actuelle WHERE id_hub=:id_hub;"); $maj=$prepare->execute(array(':illustration'=>$this->illustration,':date_actuelle'=>time(),':id_hub'=>$this->id_hub)); if((test_requete(__FILE__,__LINE__,$maj,$prepare)===false)) return false; $prepare=null; $this->crea_cache(); return true; } /** * Méthode testant le classement d'un hub dans une rubrique donnée * * @param la rubrique recherchée * @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 est_dans_rubrique($rubrique) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(!($rubrique instanceof FclFlux_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if(empty($rubrique->id_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $prepare=$Bd->prepare("SELECT * FROM hub_classement_rubriques WHERE (id_rubrique=:id_rubrique AND id_hub=:id_hub)"); $recherche=$prepare->execute(array(":id_rubrique"=>$rubrique->id_rubrique,":id_hub"=>$this->id_hub)); 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 le classement d'un hub dans une rubrique * on peut préciser si le hub est enregistré comme référence ou non dans cette rubrique * * @param $rubrique : objet de la classe rubrique, $reference_ok : booléeen * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function ajout_rubrique($rubrique=null,$reference_ok=0) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; $classement=$this->est_dans_rubrique($rubrique); if($classement) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_DOUBLON)); return false; } $existe=FclFlux_rubrique::recherche($rubrique->id_rubrique,"id_rubrique"); if(empty($existe)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT)); return false; } if($reference_ok!==1) $reference_ok=0; $prepare=$Bd->prepare("INSERT INTO hub_classement_rubriques (id_hub,id_rubrique,reference_ok) VALUES (:id_hub,:id_rubrique,:reference_ok)"); $classement=$prepare->execute(array(':id_hub'=>$this->id_hub,':id_rubrique'=>$rubrique->id_rubrique,':reference_ok'=>$reference_ok)); if((test_requete(__FILE__,__LINE__,$classement,$prepare)===false)) return false; $prepare=null; $this->crea_cache(); $rubrique->get_liste_hubs(true); if($reference_ok==1) FclFlux_rubrique::get_rubriques_reference(true); return true; } /** * Méthode enregistrant la mise à jour du statut de "référence" d'un hub dans une rubrique * * @param $rubrique : objet de la classe rubrique, $reference_ok : nouvelle valeur (0/1) * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function actualise_rubrique_ref_ok($rubrique=null,$reference_ok=0) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; $classement=$this->est_dans_rubrique($rubrique); if(!$classement) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT)); return false; } if($classement["reference_ok"]==$reference_ok) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $prepare=$Bd->prepare("UPDATE hub_classement_rubriques SET reference_ok=:ref WHERE (id_rubrique=:id_rubrique AND id_hub=:id_hub) LIMIT 1;"); $classement=$prepare->execute(array(':ref'=>$reference_ok,':id_hub'=>$this->id_hub,':id_rubrique'=>$rubrique->id_rubrique)); if((test_requete(__FILE__,__LINE__,$classement,$prepare)===false)) return false; $prepare=null; $this->crea_cache(); $rubrique->get_liste_hubs(true); FclFlux_rubrique::get_rubriques_reference(); return true; } /** * Méthode enregistrant le déclassement d'un hub dans une rubrique * * @param $rubrique : objet de la classe rubrique * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function suppr_rubrique($rubrique=null) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; $classement=$this->est_dans_rubrique($rubrique); if(!$classement) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT)); return false; } $prepare=$Bd->prepare("DELETE FROM hub_classement_rubriques WHERE (id_rubrique=:id_rubrique AND id_hub=:id_hub) LIMIT 1;"); $classement=$prepare->execute(array(':id_hub'=>$this->id_hub,':id_rubrique'=>$rubrique->id_rubrique)); if((test_requete(__FILE__,__LINE__,$classement,$prepare)===false)) return false; $prepare=null; $this->crea_cache(); $rubrique->get_liste_hubs(true); if($classement["reference_ok"]==1) FclFlux_rubrique::get_rubriques_reference(); return true; } /** * Méthode listant les rubriques dans lesquelles est classé un hub * * @return liste des id des rubriques dans un tableau si trouvé (peut être vide), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_rubriques() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $prepare=$Bd->prepare("SELECT id_rubrique FROM hub_classement_rubriques WHERE id_hub=:valeur"); $recherche=$prepare->execute(array(":valeur"=>$this->id_hub)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; return $resultat; } /** * Méthode listant les données connues concernant les rubriques dans lesquelles est classé un hub * * @param null * @return liste des des rubriques dans un tableau si trouvé (peut être vide), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_rubriques_infos() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $prepare=$Bd->prepare("SELECT distinct R.id_rubrique,R.nom,C.reference_ok FROM hub_classement_rubriques AS C,hub_rubriques AS R WHERE ((R.id_rubrique=C.id_rubrique) AND (C.id_hub=:valeur)) ORDER BY R.nom ASC"); $recherche=$prepare->execute(array(":valeur"=>$this->id_hub)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; return $resultat; } /** * Méthode cherchant si il y a de nouveaux hubs qu'un administrateur doit valider. * * @param null * @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 get_a_valider() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; $get_hubs=$Bd->query("SELECT id_hub,nom FROM hub WHERE time_validation=0"); if((test_requete(__FILE__,__LINE__,$get_hubs)===false)) return false; $resultat=$get_hubs->fetchAll(PDO::FETCH_ASSOC); if(empty($resultat)) return false; else return $resultat; } /** * Méthode vérifiant si un utilisateur est administrateur ou non d'un hub * * @param l'utilisateur a tester * @return booléen suivant résultat * @author Fabrice PENHOËT **/ public function est_admin($user) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); 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; } $test_admin=$Bd->query("SELECT time_admin FROM hub_admin WHERE id_hub=".intval($this->id_hub)." AND id_utilisateur=".intval($user->id_utilisateur)); if((test_requete(__FILE__,__LINE__,$test_admin)===false)) return false; $resultat=$test_admin->fetchAll(PDO::FETCH_ASSOC); if(empty($resultat)) return false; else return true; } /** * Méthode enregistrant un nouvel administrateur pour un hub. * * @param $user : l'utilisateur * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function ajout_admin($user) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); 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; } $test_doublon=$this->est_admin($user); if($test_doublon) { $this->erreurs=array_merge($this->erreurs,(array) (ERREUR_SQL_DOUBLON." >> hub : ".$this->id_hub.", utilisateur : ".$user->id_utilisateur)); return false; } $existe=FclFlux_utilisateur::recherche($user->id_utilisateur,"id_utilisateur","id_utilisateur"); if(empty($existe)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT)); return false; } $prepare=$Bd->prepare("INSERT INTO hub_admin (id_hub,id_utilisateur,time_admin) VALUES (:id_hub,:id_utilisateur,:time)"); $set_admin=$prepare->execute(array(':id_hub'=>$this->id_hub,':id_utilisateur'=>$user->id_utilisateur,':time'=>time())); if((test_requete(__FILE__,__LINE__,$set_admin,$prepare)===false)) return false; $prepare=null; $this->crea_cache(); return true; } /** * Méthode supprimant son rôle à l'administrateur d'un hub. * * @param $user : l'utilisateur * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function suppr_admin($user) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); 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; } $test_role=$this->est_admin($user); if(!$test_role) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($user->id_utilisateur))); return false; } $suppr=$Bd->query("DELETE FROM hub_admin WHERE id_hub=".intval($this->id_hub)." AND id_utilisateur=".intval($user->id_utilisateur).";"); if((test_requete(__FILE__,__LINE__,$suppr)===false)) return false; $this->crea_cache(); return true; } /** * Méthode retournant la liste des administrateurs d'un hub * * @param null * @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 **/ public function get_admins() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $get_admins=$Bd->query("SELECT H.id_utilisateur,H.time_admin,U.pseudo,U.email FROM hub_admin AS H,utilisateurs AS U WHERE ((U.id_utilisateur=H.id_utilisateur) AND (H.id_hub=".intval($this->id_hub)."));"); if((test_requete(__FILE__,__LINE__,$get_admins)===false)) return false; $resultat=$get_admins->fetchAll(PDO::FETCH_ASSOC); if(empty($resultat)) return false; else return $resultat; } /** * Méthode créant le fichier cache contenant les infos utiles d'un hub * id_hub doit être connu * * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function crea_cache() { if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $infos=self::recherche($this->id_hub,"id_hub","nom,auteur_id,publication_ok,index_ok,description,illustration,langue,time_crea,time_maj,time_validation"); if($infos===false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($this->id_hub))); return false; } $rub=$this->get_rubriques(); if(!empty($rub)) $infos["rubriques"]=$rub; $admins=$this->get_admins(); if(!empty($admins)) $infos["admins"]=$admins; $id=strval($this->id_hub); return crea_cache(CACHE_REP_HUB."/".$id[0]."/$id.txt",$infos); } /** * Méthode ouvrant le fichier cache contenant les infos d'un hub * * @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 du hub fournies par le fichier (si trouvé), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_infos_cache($crea_cache=false) { global $Bd; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval(intval($this->id_hub)); $fichier=CACHE_REP."/".CACHE_REP_HUB."/".$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->crea_cache()) return false; } else return false; } include($fichier); if(empty($t)) return false; else { foreach($t as $key => $value) { if(!is_array($value)) $infos[$key]=stripslashes($value); } } if(empty($infos)) return false; else return $infos; } /** * Méthode ouvrant le fichier cache du hub pour en extraire les rubriques dans lesquelles il est classé * * @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 rubriques telles que fournies par leurs fichiers (si trouvés), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_liste_rubriques_cache($crea_cache=false) { global $Bd; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval($this->id_hub); $fichier=CACHE_REP."/".CACHE_REP_HUB."/".$id[0]."/$id.txt"; $liste=array(); if(!file_exists($fichier)) { if($crea_cache) { if(empty($GLOBALS['Bd'])) require("connexion-bd.php"); if(empty($GLOBALS['Bd'])) return false; if(!$this->crea_cache()) return false; } else return false; } include($fichier); if(empty($t["rubriques"])) return false; else { $rubs=$t["rubriques"]; $i=0; foreach($rubs as $key => $value) { if(!empty($value["id_rubrique"])) { $rubrique=new FclFlux_rubrique(); $rubrique->id_rubrique=$value["id_rubrique"]; $rubrique_infos=$rubrique->get_infos_cache($crea_cache); if(!empty($rubrique_infos)) { $rubrique_infos["id_rubrique"]=$value["id_rubrique"]; $liste[$i]=$rubrique_infos; $i++; } unset($rubrique); } } } if(empty($liste)) return false; else return $liste; } /** * Méthode ouvrant le fichier cache du hub pour en extraire ses éventuels administrateurs. * * @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 administrateurs telles que fournies par leurs fichiers (si trouvés), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_liste_admins_cache($crea_cache=false) { global $Bd; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval($this->id_hub); $fichier=CACHE_REP."/".CACHE_REP_HUB."/".$id[0]."/$id.txt"; $liste=array(); if(!file_exists($fichier)) { if($crea_cache) { if(empty($GLOBALS['Bd'])) require("connexion-bd.php"); if(empty($GLOBALS['Bd'])) return false; if(!$this->crea_cache()) return false; } else return false; } include($fichier); if(empty($t["admins"])) return false; else { $admins=$t["admins"]; $i=0;$j=0; while(isset($admins["id_utilisateur"])) { $admin=new FclFlux_utilisateur(); $admin->id_utilisateur=$admins["id_utilisateur"]; $admin_infos=$admin->get_infos_cache($crea_cache); if(!empty($admin_infos)) { $admin_infos["id_utilisateur"]=$admins["id_utilisateur"]; $admin_infos["time_admin"]=$admins["time_admin"]; $liste[$j]=$rubrique_infos; $j++; } unset($admin); $i++; } } if(empty($liste)) return false; else return $liste; } /** * Méthode listant les flux dans le contenu est importé dans ce hub. * * @param * @return liste des id_flux dans un tableau si trouvé (peut être vide), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_flux() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $prepare=$Bd->prepare("SELECT id_flux FROM hub_flux WHERE id_hub=:valeur"); $recherche=$prepare->execute(array(":valeur"=>$this->id_hub)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; return $resultat; } /** * Méthode supprimant l'enregistrement d'un hub * Le cache listant les hubs de ses rubriques sera impacté. * * @param si sauve_abo vaut true, je ne peux supprimer un hub ayant des abonnés * sinon je supprime également l'abonnement + j'actualise le cache des abonnements des utilisateurs concernés * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function supprime($sauve_abo=true) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $prepare=$Bd->prepare("SELECT id_abonnement FROM abonnements_hub WHERE id_hub=:id;"); $recherche=$prepare->execute(array(':id'=>$this->id_hub)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $abonnements=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; if((!empty($abonnements))&&($sauve_abo)) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_FLUX_SUPPR_ABO); unset($abonnements); return false; } $a_hub=self::recherche($this->id_hub,"id_hub","illustration"); if(empty($a_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($this->id_hub))); return false; } $this->illustration=$a_hub["illustration"]; $this->suppr_illustration(); $rubriques=$this->get_rubriques(); $prepare=$Bd->prepare("DELETE FROM hub WHERE id_hub=:id LIMIT 1;"); $suppr=$prepare->execute(array(':id'=>$this->id_hub)); 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_hub))); return false; } $this->suppr_cache(); foreach($rubriques as $rubrique_infos) { $rubrique=new FclFlux_rubrique(); $rubrique->id_rubrique=$rubrique_infos["id_rubrique"]; $rubrique->get_liste_hubs(true); unset($rubrique); } foreach($abonnements as $abo) { $abo_maj=new FclFlux_abonnement(); $abo_maj->id_abonnement=$abo["id_abonnement"]; $abo_maj->get_infos(true,"designation,auteur_id,jours_alerte,heure_alerte,time_envoi"); unset($abo_maj); } //des fois que le hub supprimé était une référence dans une de ses rubriques... FclFlux_rubrique::get_rubriques_reference(true); return true; } /** * Méthode de suppression des fichiers cache liés à un hub * id_hub doit être connu * * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function suppr_cache() { if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval($this->id_hub); $chemin=CACHE_REP."/".CACHE_REP_HUB."/".$id[0]."/$id.txt"; if((file_exists($chemin))&&(!unlink($chemin))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_SUPPR." >> ".htmlentities($chemin,ENT_QUOTES))); return false; } $chemin=CACHE_REP."/".CACHE_REP_HUB."/".$id[0]."/posts-jour-$id.txt"; if((file_exists($chemin))&&(!unlink($chemin))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_SUPPR." >> ".htmlentities($chemin,ENT_QUOTES))); return false; } $chemin=CACHE_REP."/".CACHE_REP_HUB."/".$id[0]."/posts-semaine-$id.txt"; if((file_exists($chemin))&&(!unlink($chemin))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_SUPPR." >> ".htmlentities($chemin,ENT_QUOTES))); return false; } $chemin=CACHE_REP."/".CACHE_REP_HUB."/"."posts-mois-$id.txt"; if((file_exists($chemin))&&(!unlink($chemin))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_SUPPR." >> ".htmlentities($chemin,ENT_QUOTES))); return false; } return true; } /** * Méthode listant les dernières annonces validées pour un hub. * On sort les annonces des 30 derniers jours. * Les annonces à date de diffusion postérieure à la date actuelle ne sont pas listées. * Si demandé, 3 fichiers cache sont créés : 1 pour les dernières 24h, 1 pour les 7 derniers jours, le dernier pour les 30 jours. * * @param crea_cache : booléen pour savoir si il faut enregistrer le résultat dans des fichiers, * $nb_limite d'annonces à retourner et $champs que l'on souhaite sortir, $limite_mois = true si je ne souhaite pas sortir de posts + anciens * @return liste des annonces dans un tableau si trouvé (peut être vide), false en cas d'erreur. * @author Fabrice PENHOËT **/ public function get_liste_posts($crea_cache=false,$nb_limite=200,$champs="id_post,flux_id,auteur_id,ancre,url,time_validation,time_diffusion",$limite_mois=true) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if((empty($this->id_hub))||(!is_int($nb_limite))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval($this->id_hub); if($limite_mois) $time_limite_min=time()-3600*24*30; else $time_limite_min=0; $time_limite_max=time(); if(empty($champs)) $champs="*"; $prepare=$Bd->prepare("SELECT $champs FROM hub_post WHERE ((hub_id=:valeur) AND ((time_diffusion=0 AND time_validation>=:limite_min) OR (time_diffusion!=0 AND time_diffusion>=:limite_min AND time_diffusion<=:limite_max))) ORDER BY time_diffusion DESC,time_validation DESC LIMIT 0,$nb_limite"); $recherche=$prepare->execute(array(":valeur"=>$id,":limite_min"=>$time_limite_min,":limite_max"=>$time_limite_max)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $posts_mois=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; if($crea_cache) { $cache_mois=crea_cache(CACHE_REP_HUB."/".$id[0]."/posts-mois-$id.txt",$posts_mois); if($cache_mois) { if(empty($posts_mois)) { $posts_semaine=array(); $posts_jour=array(); } else { $i=0; $posts_jour=array();$limite_jour=time()-3600*24; $posts_semaine=array();$limite_semaine=time()-3600*24*7; while(isset($posts_mois[$i])) { if(empty($posts_mois[$i]["time_diffusion"])) $time_compare=$posts_mois[$i]["time_validation"]; else $time_compare=$posts_mois[$i]["time_diffusion"]; if($time_compare>$limite_semaine) { $posts_semaine[$i]=$posts_mois[$i]; if($time_compare>$limite_jour) $posts_jour[$i]=$posts_mois[$i]; } $i++; } } //on créé tous les fichiers même si les tableaux sont vides. $cache_jour=crea_cache(CACHE_REP_HUB."/".$id[0]."/posts-jour-$id.txt",$posts_jour); $cache_semaine=crea_cache(CACHE_REP_HUB."/".$id[0]."/posts-semaine-$id.txt",$posts_semaine); if(($cache_jour===false)||($cache_semaine===false)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE)); return false; } else return true; } else { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE)); return false; } } else return $posts_mois; } /** * Méthode lançant l'actualisation des listes d'annonce pour les hubs concernés par des annonces dont la diffusion a été programmée pour ce jour. * * @return nombre de hubs actualisés. * @author Fabrice PENHOËT **/ static function actualise_liste_posts_date_diffusion() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; $time_limite_max=time(); $time_limite_min=time()-3600*24; $prepare=$Bd->prepare("SELECT DISTINCT hub_id FROM hub_post WHERE (time_diffusion!=0 AND time_diffusion>:limite_min AND time_diffusion<=:limite_max)"); $recherche=$prepare->execute(array(":limite_min"=>$time_limite_min,":limite_max"=>$time_limite_max)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $hubs_maj=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null;$nb_hub=0; if(!empty($hubs_maj)) { foreach($hubs_maj as $hub_infos) { $hub_maj=new FclFlux_hub(); $hub_maj->id_hub=$hub_infos["hub_id"]; $hub_maj->get_liste_posts(true); $nb_hub++; } } return $nb_hub; } /** * Méthode ouvrant le fichier cache des posts actuels d'un hub * * @param crea_cache : un booléen pour savoir si il faut tester la création du fichier en cas d'absence, * $periode de sortie des posts * @return tableau contenant les infos des posts telles que fournies par le fichier (si trouvés), false en cas d'erreur * @author Fabrice PENHOËT * */ public function get_liste_posts_cache($crea_cache=false,$periode="jour") { global $Bd; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval($this->id_hub); $fichier=CACHE_REP."/".CACHE_REP_HUB."/".$id[0]."/posts-$periode-$id.txt"; $liste=array(); if(!file_exists($fichier)) { if($crea_cache) { if(empty($GLOBALS['Bd'])) require("connexion-bd.php"); if(empty($GLOBALS['Bd'])) return false; // si il y a des flux liés à ce hub, je tente d'importer leur contenu $flux_hub=$this->get_flux(); if(!empty($flux_hub)) { foreach($flux_hub as $flux_id) { $flux_import=new FclFlux_flux(); $flux_import->id_flux=$flux_id["id_flux"]; $flux_import->import_liens(); unset($flux_import); } } if($this->get_liste_posts(true)===false) return false; } else return false; } //j'ai aussi besoin des infos du hub $hub_infos=$this->get_infos_cache($crea_cache); if(empty($hub_infos)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT." >> ".intval($this->id_hub))); return false; } //si j'ai demandé à forcer la création du cache et que le fichier à + de 24H, //je lance une importation des flux mais sans bloquer en cas d'erreur if((filemtime($fichier)<(time()-24*3600))&&($crea_cache)) { if(empty($GLOBALS['Bd'])) require("connexion-bd.php"); if(empty($GLOBALS['Bd'])) return false; $flux_hub=$this->get_flux(); if(!empty($flux_hub)) { foreach($flux_hub as $flux_id) { $flux_import=new FclFlux_flux(); $flux_import->id_flux=$flux_id["id_flux"]; $flux_import->import_liens(); unset($flux_import); } } $this->get_liste_posts(true); } if(!file_exists($fichier))//ne devrait pas être possible mais... { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE." >> ".$fichier)); return false; } include($fichier); if(empty($t))//le fichier peut être vide si aucun post récents dans le hub return false; else { $i=0; foreach($t as $key => $value) { if(is_array($value)) { $liste[$i]=$value; $liste[$i]["hub"]=$hub_infos; if(!empty($value["flux_id"])) { $flux_cache=new FclFlux_flux(); $flux_cache->id_flux=$value["flux_id"]; $flux_infos=$flux_cache->get_infos_cache($crea_cache); if(!empty($flux_infos)) $liste[$i]["flux"]=$flux_infos; unset($flux_cache);unset($flux_infos); } elseif(!empty($value["auteur_id"])) { $auteur_cache=new FclFlux_utilisateur(); $auteur_cache->id_utilisateur=$value["auteur_id"]; $auteur_infos=$auteur_cache->get_infos_cache($crea_cache); if(!empty($auteur_infos)) $liste[$i]["auteur"]=$auteur_infos; unset($auteur_cache);unset($auteur_infos); } // si un fichier cache existe, il doit y avoir un texte pour le post. $post_cache=new FclFlux_post(); $post_cache->id_post=$liste[$i]["id_post"]; $get_cache=$post_cache->get_infos_cache(false); if(!empty($get_cache)) $liste[$i]["annonce"]=$get_cache["annonce"]; unset($get_cache);unset($post_cache); $i++; } } } if(empty($liste)) return false; else return $liste; } /** * Méthode retournant la liste des abonnés actifs d'un hub (et donc leur nombre) * * @return les données dans un tableau php, false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_liste_abonnes() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $stats=array(); $get_actifs=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements as A,abonnements_hub as H WHERE ((H.id_abonnement=A.id_abonnement) AND (H.id_hub=".$this->id_hub.") AND (A.jours_alerte!='') AND (A.actif_ok=1));"); if((test_requete(__FILE__,__LINE__,$get_actifs)===false)) return false; $stats["actifs"]=$get_actifs->fetchAll(); unset($get_actifs); $get_inactifs=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements as A,abonnements_hub as H WHERE ((H.id_abonnement=A.id_abonnement) AND (H.id_hub=".$this->id_hub.") AND (A.jours_alerte=''));"); if((test_requete(__FILE__,__LINE__,$get_inactifs)===false)) return false; $stats["inactifs"]=$get_inactifs->fetchAll(); unset($get_inactifs); $get_en_pause=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements as A,abonnements_hub as H WHERE ((H.id_abonnement=A.id_abonnement) AND (H.id_hub=".$this->id_hub.") AND (A.jours_alerte!='') AND (A.actif_ok=0));"); if((test_requete(__FILE__,__LINE__,$get_en_pause)===false)) return false; $stats["en_pause"]=$get_en_pause->fetchAll(); unset($get_en_pause); return $stats; } /** * Méthode retournant le nombre de clics cumulés des flux de ce hub * * @return nombre entier, false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_nb_clics() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_hub)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $get_clics=$Bd->query("SELECT SUM(F.nb_clics) as Total FROM flux as F,hub_flux as H WHERE ((H.id_flux=F.id_flux) AND (H.id_hub=".$this->id_hub.")) GROUP BY H.id_hub;"); if((test_requete(__FILE__,__LINE__,$get_clics)===false)) return false; $res=$get_clics->fetch(); unset($get_clics); return $res["Total"]; } /** * Affichage par défaut d'un objet * il semble que la méthode héritée ne prenne pas en compte les nouveaux attributs ? * * @return chaîne de caractères listant la valeur de chaque attribut * @author Fabrice PENHOËT **/ public function __toString() { $texte="

".__CLASS__."

"; foreach($this as $key => $value) { if(is_array($value)) $value=affiche_tableau($value,"
  • #valeur
  • ",""); $texte.="$key : $value\n"; } return $texte; } }//fin de la classe