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 vérifiant que le paramètre fourni est bien un utilisateur existant * et ayant la statut d'administrateur et lui attribuant la rubrique 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","statut"); if(empty($existe)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT)); return false; } if($existe["statut"]!=="administrateur") { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_ACTION_NON_AUTORISEE)); return false; } else $this->auteur=$auteur; return true; } /** * Méthode testant le code insee associée à la rubrique * sa valeur peut être nulle si non fournie * * @param la valeur à contrôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_insee($insee=null) { if(empty($insee)) $this->insee=""; else { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; $prepare=$Bd->prepare("SELECT insee FROM villes WHERE insee=:insee"); $recherche=$prepare->execute(array(":insee"=>$insee)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $ville_info=$prepare->fetch(); $prepare=null; if(!empty($ville_info)) $this->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 surchargeant celle de la classe héritée * en vérifiant que la rubrique supérieure existe vraiment. * et en attribuant son id si c'est le cas * Si il s'agit d'une rubrique déjà enregistrée, je vérifie également que je ne la classe pas dans une de ses sous-rubriques... * * @param la valeur à contrôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_rubrique_sup($rubrique_sup=null) { if((!empty($rubrique_sup))&&(!($rubrique_sup instanceof FclFlux_rubrique))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if(!empty($rubrique_sup)) { $cherche_sup=self::recherche($rubrique_sup->id_rubrique,"id_rubrique"); if($cherche_sup===false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($rubrique_sup->id_rubrique))); return false; } if(!empty($this->id_rubrique)) { if($rubrique_sup->id_rubrique==$this->id_rubrique) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_RUBRIQUE_MERE); return false; } else { $ss_rubriques=$this->get_sous_arborescence(); if(!empty($ss_rubriques)) { foreach($ss_rubriques as $rubrique_id) { if($rubrique_sup->id_rubrique==$rubrique_id["id_rubrique"]) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_RUBRIQUE_MERE); return false; } } } } } $this->rubrique_sup=$rubrique_sup; } else $this->rubrique_sup=null; return true; } /** * Méthode enregistrant une nouvelle rubrique. * * @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; } if(!($this->auteur instanceof FclFlux_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $mere_id=null;$reference_ok=0;$insee=null; if(!empty($this->rubrique_sup)) $mere_id=$this->rubrique_sup->id_rubrique; if(!empty($this->reference_ok)) $reference_ok=$this->reference_ok; if(!empty($this->insee)) $insee=$this->insee; $prepare=$Bd->prepare("INSERT INTO hub_rubriques (nom,description,auteur_id,mere_id,reference_ok,insee,time_crea,time_maj) VALUES (:nom,:description,:auteur_id,:mere_id,:reference_ok,:insee,:date_actuelle,:date_actuelle)"); $ajout=$prepare->execute(array(':nom'=>$this->nom,':description'=>$this->description,':auteur_id'=>$this->auteur->id_utilisateur,':mere_id'=>$mere_id,':reference_ok'=>$reference_ok,':insee'=>$insee,':date_actuelle'=>time())); if((test_requete(__FILE__,__LINE__,$ajout,$prepare)===false)) return false; $this->id_rubrique=$Bd->lastInsertId(); $prepare=null; $this->crea_cache(); if(!empty($mere_id)) $this->rubrique_sup->crea_cache(); else $this->crea_cache(true);//liste des rubriques racine if(!empty($reference_ok)) self::get_rubriques_reference(true); return true; } /** * Méthode modifiant les informations d'une rubrique de hubs * * @param null * @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->nom))||(empty($this->id_rubrique))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $a_rubrique=self::recherche($this->id_rubrique,"mere_id,reference_ok,insee"); if(empty($a_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($this->id_rubrique))); return false; } $mere_id=$a_rubrique["mere_id"]; $reference_ok=$a_rubrique["reference_ok"]; $insee=$a_rubrique["insee"]; if(isset($this->rubrique_sup)) $mere_id=$this->rubrique_sup->id_rubrique; if(isset($this->reference_ok)) $reference_ok=$this->reference_ok; if(isset($this->insee)) $insee=$this->insee; $prepare=$Bd->prepare("UPDATE hub_rubriques SET nom=:nom,description=:description,mere_id=:mere_id,reference_ok=:reference_ok,insee=:insee,time_maj=:date_actuelle WHERE id_rubrique=:id_rubrique;"); $maj=$prepare->execute(array(':nom'=>$this->nom,':description'=>$this->description,':mere_id'=>$mere_id,':reference_ok'=>$reference_ok,':insee'=>$insee,':date_actuelle'=>time(),'id_rubrique'=>$this->id_rubrique)); if((test_requete(__FILE__,__LINE__,$maj,$prepare)===false)) return false; $prepare=null; $this->crea_cache(); if($mere_id!=$a_rubrique["mere_id"]) { if(!empty($mere_id)) $this->rubrique_sup->crea_cache(); else $this->crea_cache(true); if(!empty($a_rubrique["mere_id"])) { $a_mere=new FclFlux_rubrique(); $a_mere->id_rubrique=$a_rubrique["mere_id"]; $a_mere->crea_cache(); unset($a_mere); } else $this->crea_cache(true); } if($reference_ok!=$a_rubrique["reference_ok"]) self::get_rubriques_reference(true); return true; } /** * Méthode supprimant l'enregistrement d'une rubrique * Le cache de la rubrique supérieure sera aussi impacté + éventuellement la liste des rubriques de référence * * @param si sauve_sub vaut true, je ne peux supprimer une rubrique utilisée par un hub ou une autre rubrique * sinon je supprime la rubrique et ses sous-rubriques mais sans toucher aux hubs qui perdent juste leur classement * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function supprime($sauve_sub=true) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $a_rubrique=self::recherche($this->id_rubrique,"mere_id,reference_ok"); if(empty($a_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT.">>".intval($this->id_rubrique))); return false; } $mere_id=$a_rubrique["mere_id"]; $reference_ok=$a_rubrique["reference_ok"]; // hubs classés dans la rubrique à supprimer ??? $prepare=$Bd->prepare("SELECT id_hub FROM hub_classement_rubriques WHERE id_rubrique=:id_rubrique;"); $recherche=$prepare->execute(array(':id_rubrique'=>$this->id_rubrique)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; if((!empty($resultat))&&($sauve_sub)) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_RUBRIQUE_SUPPR_HUB); return false; } elseif(!empty($resultat)) $hub_actualise=$resultat;//servira + bas pour actualiser le cache des hubs //les sous-rubriques de la rubrique à supprimer $prepare=$Bd->prepare("SELECT id_rubrique FROM hub_rubriques WHERE mere_id=:id_rubrique;"); $recherche=$prepare->execute(array(':id_rubrique'=>$this->id_rubrique)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; if((!empty($resultat))&&($sauve_sub)) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_RUBRIQUE_SUPPR_SUB); return false; } elseif(!empty($resultat)) { foreach ($resultat as $sous_rub) { $sousrub=new FclFlux_rubrique; $sousrub->id_rubrique=$sous_rub["id_rubrique"]; $supp=$sousrub->supprime(false);//suppression en cascade des sous-rubriques if($supp===false) return false; unset($sousrub); } } $prepare=$Bd->prepare("DELETE FROM hub_rubriques WHERE id_rubrique=:id_rubrique LIMIT 1;"); $suppr=$prepare->execute(array(':id_rubrique'=>$this->id_rubrique)); 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_rubrique))); return false; } $this->suppr_cache(); //des hubs ont peut-être perdu leur classement if(isset($hub_actualise)) { foreach ($hub_actualise as $hub_id) { $hub_maj=new FclFlux_hub; $hub_maj->id_hub=$hub_id["id_hub"]; $hub_maj->crea_cache(); unset($hub_maj); } } if(!empty($mere_id)) { $rub_mere=new FclFlux_rubrique(); $rub_mere->id_rubrique=$mere_id; $rub_mere->crea_cache(); unset($rub_mere); } else $this->crea_cache(true); if($reference_ok) self::get_rubriques_reference(true); return true; } /** * Méthode de suppression du fichier cache contenant les infos d'une rubrique * id_rubrique doit être connu * * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function suppr_cache() { if(empty($this->id_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval($this->id_rubrique); $chemin=CACHE_REP."/".CACHE_REP_RUBRIQUES."/".$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_RUBRIQUES."/".$id[0]."/hubs-$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 testant l'existence d'une rubrique dans le bd via son id_rubrique (seul champ identifiant) * * @param la valeur recherchée + 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($id_rubrique,$champ_sortie="*") { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; $prepare=$Bd->prepare("SELECT $champ_sortie FROM hub_rubriques WHERE id_rubrique=:valeur"); $recherche=$prepare->execute(array(":valeur"=>$id_rubrique)); 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 de recherche parmi toutes les rubriques pour un mots-clés donné * * @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_str=strip_tags(strval(trim($recherche))); $recherche_str="%".str_replace(" ","%",$recherche)."%"; $prepare=$Bd->prepare("SELECT $champ_sortie FROM hub_rubriques WHERE (nom LIKE :recherche_str OR description LIKE :recherche_str OR id_rubrique=:recherche) ORDER BY nom ASC;"); $recherche=$prepare->execute(array(":recherche_str"=>$recherche_str,":recherche"=>$recherche)); 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 sous-rubriques éventuelles de la rubrique en cours * * @param $racine vaut true si on liste des rubriques racine * @return liste des id des sous-rubriques dans un tableau si trouvé (peut être vide), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_sous_rubriques($racine=false) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if((!$racine)&&(empty($this->id_rubrique))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(!$racine) { $prepare=$Bd->prepare("SELECT id_rubrique FROM hub_rubriques WHERE mere_id=:valeur ORDER BY nom"); $recherche=$prepare->execute(array(":valeur"=>$this->id_rubrique)); } else { $prepare=$Bd->prepare("SELECT id_rubrique FROM hub_rubriques WHERE mere_id IS NULL ORDER BY nom"); $recherche=$prepare->execute(); } if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; return $resultat; } /** * Méthode listant toutes les sous-rubriques de la rubrique en cours en descendant l'arborescence * * @param $racine vaut true si on liste des rubriques racine * @return liste des id des sous-rubriques dans un tableau si trouvé (peut être vide), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_sous_arborescence($racine=false) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if((!$racine)&&(empty($this->id_rubrique))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $filles=$this->get_sous_rubriques($racine); $ss_arborescence=$filles; if(!empty($filles)) { foreach($filles as $fille) { $ss_rubrique=new FclFlux_rubrique(); $ss_rubrique->id_rubrique=$fille["id_rubrique"]; $ss_filles=$ss_rubrique->get_sous_arborescence(); if(!empty($ss_filles)) $ss_arborescence=array_merge($ss_arborescence,$ss_filles); unset($ss_rubrique); } } return $ss_arborescence; } /** * Méthode cherchant le nombre d'abonnés actifs (directs ou indirects) des hubs d'une rubrique * * @return les données dans un tableau php, false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_stats() { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $stats=array(); //nbre d'abonnés à des hubs classés directement dans cette rubrique $get_actifs=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements as A,abonnements_hub as H,hub_classement_rubriques as R WHERE ((R.id_hub=H.id_hub) AND (H.id_abonnement=A.id_abonnement) AND (R.id_rubrique=".$this->id_rubrique.") AND (A.jours_alerte!='') AND (A.actif_ok=1));"); if((test_requete(__FILE__,__LINE__,$get_actifs)===false)) return false; $resultats=$get_actifs->fetchAll(); $stats["nb_abo_actifs_directs"]=count($resultats); $get_inactifs=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements as A,abonnements_hub as H,hub_classement_rubriques as R WHERE ((R.id_hub=H.id_hub) AND (H.id_abonnement=A.id_abonnement) AND (R.id_rubrique=".$this->id_rubrique.") AND (A.jours_alerte=''));"); if((test_requete(__FILE__,__LINE__,$get_inactifs)===false)) return false; $resultats=$get_inactifs->fetchAll(); $stats["nb_abo_inactifs_directs"]=count($resultats); $get_en_pause=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements as A,abonnements_hub as H,hub_classement_rubriques as R WHERE ((R.id_hub=H.id_hub) AND (H.id_abonnement=A.id_abonnement) AND (R.id_rubrique=".$this->id_rubrique.") AND (A.jours_alerte!='') AND (A.actif_ok=0));"); if((test_requete(__FILE__,__LINE__,$get_en_pause)===false)) return false; $resultats=$get_en_pause->fetchAll(); $stats["nb_abo_en_pause_directs"]=count($resultats); //nbre d'abonnés acfifs à des hubs classés de cette rubrique ou de ses filles $filles=$this->get_sous_arborescence(); if(empty($filles)) { $stats["nb_abo_actifs_indirects"]=$stats["nb_abo_actifs_directs"]; $stats["nb_abo_inactifs_indirects"]=$stats["nb_abo_inactifs_directs"]; $stats["nb_abo_pause_indirects"]=$stats["nb_abo_en_pause_directs"]; } $id_rubriques[]=$this->id_rubrique; foreach($filles as $rubrique_info) $id_rubriques[]=$rubrique_info["id_rubrique"]; $sql_in=implode(",",$id_rubriques); $get_actifs=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements as A,abonnements_hub as H,hub_classement_rubriques as R WHERE ((R.id_hub=H.id_hub) AND (H.id_abonnement=A.id_abonnement) AND (R.id_rubrique IN ($sql_in)) AND (A.jours_alerte!='') AND (A.actif_ok=1));"); if((test_requete(__FILE__,__LINE__,$get_actifs)===false)) return false; $resultats=$get_actifs->fetchAll(); $stats["nb_abo_actifs_indirects"]=count($resultats); $get_inactifs=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements as A,abonnements_hub as H,hub_classement_rubriques as R WHERE ((R.id_hub=H.id_hub) AND (H.id_abonnement=A.id_abonnement) AND (R.id_rubrique IN ($sql_in)) AND (A.jours_alerte=''));"); if((test_requete(__FILE__,__LINE__,$get_inactifs)===false)) return false; $resultats=$get_inactifs->fetchAll(); $stats["nb_abo_inactifs_indirects"]=count($resultats); $get_en_pause=$Bd->query("SELECT DISTINCT auteur_id FROM abonnements as A,abonnements_hub as H,hub_classement_rubriques as R WHERE ((R.id_hub=H.id_hub) AND (H.id_abonnement=A.id_abonnement) AND (R.id_rubrique IN ($sql_in)) AND (A.jours_alerte!='') AND (A.actif_ok=0));"); if((test_requete(__FILE__,__LINE__,$get_en_pause)===false)) return false; $resultats=$get_en_pause->fetchAll(); $stats["nb_abo_en_pause_indirects"]=count($resultats); unset($get_actifs);unset($get_inactifs);unset($get_en_pause);unset($resultats); return $stats; } /** * Méthode créant le fichier cache contenant les infos utiles d'une rubrique * id_rubrique doit être connu * * @param si $racine vaut true, on créé juste le cache de la liste des rubriques racine * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function crea_cache($racine=false) { if((!$racine)&&(empty($this->id_rubrique))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(!$racine) { $infos=self::recherche($this->id_rubrique,"nom,description,mere_id,reference_ok,insee"); if($infos===false) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($this->id_rubrique))); return false; } $sousrub=$this->get_sous_rubriques(); if(!empty($sousrub)) $infos=array_merge($infos,$sousrub); $id=strval($this->id_rubrique); } else { $infos=$this->get_sous_rubriques(true); if($infos===false) return false; $id="0"; } return crea_cache(CACHE_REP_RUBRIQUES."/".$id[0]."/$id.txt",$infos); } /** * Méthode listant les rubriques de référence, utiles aux abonnements rapides * il doit y avoir au moins un hub de référence classé dans la rubrique * * @param $crea_cache : un booléen pour savoir si il faut enregistrer le résultat dans un fichier * @return liste des id des rubriques concernées dans un tableau si trouvé (peut être vide), false en cas d'erreur * @author Fabrice PENHOËT **/ static function get_rubriques_reference($crea_cache=false) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; $prepare=$Bd->prepare("SELECT id_rubrique FROM hub_rubriques WHERE ((reference_ok=1) AND (id_rubrique IN (SELECT DISTINCT id_rubrique FROM hub_classement_rubriques WHERE reference_ok='1'))) ORDER BY nom"); $recherche=$prepare->execute(); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; if($crea_cache) return crea_cache(CACHE_REP_RUBRIQUES."/ref.txt",$resultat); else return $resultat; } /** * Méthode listant les hubs classés dans une rubrique * en préçisant ceux de référence qui sont en début de liste * * @param crea_cache : un booléen pour savoir si il faut enregistrer le résultat dans un fichier, $reference_ok=true si je ne veux que les hubs de réference * @return liste des des hubs dans un tableau si trouvé (peut être vide), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_liste_hubs($crea_cache=false,$reference_ok=false) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($this->id_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(!$reference_ok) $prepare=$Bd->prepare("SELECT id_hub,reference_ok FROM hub_classement_rubriques WHERE id_rubrique=:valeur ORDER BY reference_ok DESC"); else $prepare=$Bd->prepare("SELECT id_hub FROM hub_classement_rubriques WHERE id_rubrique=:valeur AND reference_ok=1"); $recherche=$prepare->execute(array(":valeur"=>$this->id_rubrique)); if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false; $resultat=$prepare->fetchAll(PDO::FETCH_ASSOC); $prepare=null; $id=strval($this->id_rubrique); if($crea_cache) return crea_cache(CACHE_REP_RUBRIQUES."/".$id[0]."/hubs-$id.txt",$resultat); else return $resultat; } /** * Méthode ouvrant le fichier cache contenant les infos d'une rubrique * * @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 de la rubrique 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_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval($this->id_rubrique); $fichier=CACHE_REP."/".CACHE_REP_RUBRIQUES."/".$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)) //cela doit être l'id d'une des rubriques filles... $infos[$key]=stripslashes($value); } } if(empty($infos)) return false; else return $infos; } /** * Méthode ouvrant le fichier cache contenant une liste de rubriques * il faut donner id_rubrique=0 pour avoir la liste des rubriques racine * * @param crea_cache : un booléen pour savoir si il faut tester la création du fichier en cas d'absence, * $reference_ok si on souhaite la liste des rubriques de référence. * @return tableau contenant les infos des rubriques fournies par le fichier (si trouvé), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_liste_cache($crea_cache=false,$reference_ok=false) { global $Bd; if((!isset($this->id_rubrique))&&(!$reference_ok)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(!$reference_ok) { $id=strval($this->id_rubrique); $fichier=CACHE_REP."/".CACHE_REP_RUBRIQUES."/".$id[0]."/$id.txt"; } else { $id=""; $fichier=CACHE_REP."/".CACHE_REP_RUBRIQUES."/ref.txt"; } $liste_rubriques=array(); if(!file_exists($fichier)) { if($crea_cache) { if(empty($GLOBALS['Bd'])) require("connexion-bd.php"); if(empty($GLOBALS['Bd'])) return false; } if(($crea_cache)&&(!empty($id))) { if(!$this->crea_cache()) return false; } elseif(($crea_cache)&&($reference_ok)) { if(!$this->get_rubriques_reference(true)) return false; } elseif(($crea_cache)&&($id==0)) { if(!$this->crea_cache(true)) return false; } else return false; } include($fichier); if(empty($t)) return false; else { $i=0; foreach($t as $key => $value) { if((is_array($value))&&(!empty($value["id_rubrique"]))) //cela doit être l'id d'une des rubriques filles... { $fille=new FclFlux_rubrique(); $fille->id_rubrique=$value["id_rubrique"]; $fille_infos=$fille->get_infos_cache($crea_cache); if(!empty($fille_infos)) { $fille_infos["id_rubrique"]=$value["id_rubrique"]; $liste_rubriques[$i]=$fille_infos; $i++; } unset($fille); } } } if(empty($liste_rubriques)) return false; else return $liste_rubriques; } /** * Méthode ouvrant le fichier cache contenant la liste des hubs classés dans une rubrique * * @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) { global $Bd; if(empty($this->id_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval($this->id_rubrique); $fichier=CACHE_REP."/".CACHE_REP_RUBRIQUES."/".$id[0]."/hubs-$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->get_liste_hubs(true)) return false; } else return false; } include($fichier); if(empty($t)) return false; else { $i=0; foreach($t as $key => $value) { if((is_array($value))&&(!empty($value["id_hub"]))&&(isset($value["reference_ok"]))) { $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"]; $hub_infos["reference_ok"]=$value["reference_ok"]; $liste[$i]=$hub_infos; $i++; } unset($hub); } } } if(empty($liste)) return false; else return $liste; } /** * Méthode ouvrant le fichier cache d'une rubrique pour en sortir les rubriques supérieures * * @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 supérieures fournies par le fichier (si trouvé), false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_meres_cache($crea_cache=false) { global $Bd; if(empty($this->id_rubrique)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $id=strval($this->id_rubrique); $fichier=CACHE_REP."/".CACHE_REP_RUBRIQUES."/".$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 { $meres=array(); $i=0; $mere_id=$t["mere_id"]; while(!empty($mere_id)) { $mere=new FclFlux_rubrique(); $mere->id_rubrique=$mere_id; $mere_info=$mere->get_infos_cache($crea_cache); if(!empty($mere_info)) { $mere_info["id_rubrique"]=$mere_id; $meres[$i]=$mere_info; $mere_id=$mere_info["mere_id"]; unset($mere_info); $i++; } else $mere_id=0; } } if(empty($meres)) return false; else return array_reverse($meres); } }//fin de la classe