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 lien existant * et lui attribuant l'origine du marque-page si c'est le cas * * @param la valeur à contrôler (peut être nulle si saisie libre d'un lien) * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_origine($lien) { if(empty($lien)) $this->origine=null; else { if(!($lien instanceof FclFlux_lien)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if(empty($lien->id_lien)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if(!(FclFlux_lien::recherche($lien->id_lien,"id_lien","id_lien"))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($lien->id_lien))); return false; } else $this->origine=$lien; } return true; } /** * Méthode test la valeur fournie pour les mots-clés du marque-pages * * @param les mots-clés à contôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_motscles($motscles) { if(empty($this->limites["motscles_long_max"])) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $long_max=$this->limites["motscles_long_max"]; if(!is_int($long_max)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $motscles=strip_tags(strval(trim($motscles))); if(empty($motscles)) $this->motscles=null; else $this->motscles=strip_tags(strval(trim($motscles))); 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 cherchant un marque-page dans le bd via via son id_marque_page, seul identifiant unique * * @param l'id du marque-page 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(!($proprietaire instanceof FclFlux_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } if(!isset($proprietaire->id_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $prepare=$Bd->prepare("SELECT $champ_sortie FROM utilisateurs_marque_pages WHERE id_marque_page=:valeur and utilisateur_id=:id"); $recherche=$prepare->execute(array(":valeur"=>$valeur,":id"=>$proprietaire->id_utilisateur)); 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 marque-pages 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 utilisateurs_marque_pages WHERE utilisateur_id=:id ORDER BY time_crea DESC;"); $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 if($crea_cache) return crea_cache(CACHE_REP_UTILISATEURS."/".$id[0]."/MP-$id.txt",$resultat); else return $resultat; } /** * Méthode enregistrant un nouveau marque-page * * @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->url))||(empty($this->designation))||(empty($this->proprietaire))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(!empty($this->origine)) $id_origine=$this->origine->id_lien; else $id_origine=null; $prepare=$Bd->prepare("INSERT INTO utilisateurs_marque_pages (ancre,url,utilisateur_id,description,motscles,lien_id,time_crea,time_maj) VALUES (:ancre,:url,:utilisateur_id,:description,:motscles,:lien_id,:date_actuelle,:date_actuelle)"); $ajout=$prepare->execute(array(':ancre'=>$this->designation,':url'=>$this->url,':utilisateur_id'=>$this->proprietaire->id_utilisateur,':description'=>$this->description,':motscles'=>$this->motscles,':lien_id'=>$id_origine,':date_actuelle'=>time())); if((test_requete(__FILE__,__LINE__,$ajout,$prepare)===false)) return false; $prepare=null; $this->get_liste(true); return true; } /** * Méthode modifiant les informations d'un marque-page * seul le propriétaire du lien doit pouvoir faire cette opération * * @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->url))||(empty($this->designation))||(empty($this->id_marque_page))||(empty($this->proprietaire))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT." >> ".intval($this->id_marque_page))); return false; } $lien_infos=self::recherche($this->id_marque_page,$this->proprietaire,"id_marque_page"); if(empty($lien_infos)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_ENREG_ABSENT." >> ".intval($this->id_marque_page).",".intval($this->proprietaire->id_utilisateur))); return false; } $prepare=$Bd->prepare("UPDATE utilisateurs_marque_pages SET ancre=:designation,url=:url,description=:description,motscles=:motscles,time_maj=:time WHERE id_marque_page=:id and utilisateur_id=:utilisateur_id;"); $maj=$prepare->execute(array(':designation'=>$this->designation,':url'=>$this->url,':description'=>$this->description,':motscles'=>$this->motscles,':id'=>$this->id_marque_page,':utilisateur_id'=>$this->proprietaire->id_utilisateur,':time'=>time())); if((test_requete(__FILE__,__LINE__,$maj,$prepare)===false)) return false; $nb_enreg=$prepare->rowCount(); $prepare=null; if($nb_enreg==0) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_SQL_MAJ." >> ".intval($this->id_marque_page))); return false; } $this->get_liste(true); return true; } /** * Méthode supprimant l'enregistrement d'un marque-page * seul le propriétaire du lien 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_marque_page))||(empty($this->proprietaire))) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT." >> ".intval($this->id_marque_page))); return false; } $prepare=$Bd->prepare("DELETE FROM utilisateurs_marque_pages WHERE id_marque_page=:id and utilisateur_id=:id_utilisateur LIMIT 1;"); $suppr=$prepare->execute(array(':id'=>$this->id_marque_page,':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_marque_page))); return false; } $this->get_liste(true); return true; } /** * Méthode de recherche parmi les marque-pages de l'utilisateur pour un mots-clés donné * * @param le mot recherché, l'utilisateur concerné, 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,$user,$champ_sortie="*",$debut=0,$fin=30) { global $Bd; if((isset_connexion(__FILE__,__LINE__)===false)) return false; if(empty($user->id_utilisateur)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $recherche=strip_tags(strval(trim($recherche))); $longueur=strlen($recherche); if(($longueurMP_MAX_RECHERCHE)) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_RECHERCHE_LONG); return false; } $recherche="%".str_replace(" ","%",$recherche)."%"; if(!intval($debut)) $debut=0; if((!intval($fin))||($fin<=$debut)) $fin=$debut+10; $prepare=$Bd->prepare("SELECT $champ_sortie FROM utilisateurs_marque_pages WHERE (ancre LIKE :recherche OR url LIKE :recherche OR description LIKE :recherche OR motscles LIKE :recherche) and (utilisateur_id=:id) ORDER BY time_crea DESC LIMIT $debut,$fin;"); $recherche=$prepare->execute(array(":recherche"=>$recherche,":id"=>$user->id_utilisateur)); 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; } /** * 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="

".__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