349 lines
13 KiB
PHP
Executable File
349 lines
13 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* classe dérivée de la classe Lien décrivant les liens sauvegardés par l'utilisateur
|
|
* ils peuvent être saisis à "nu" ou via la récupération des infos d'un lien originaire d'un flux
|
|
* l'utilisateur peut lancer une recherche parmi ses marque-pages
|
|
* il a la haute main pour les actualiser/supprimer comme souhaité
|
|
* on a besoin de la classe FclFlux_lien pour désigner l'éventuelle origine du lien.
|
|
* + la classe FclFlux_utilisateur pour désigner son propriétaire
|
|
*
|
|
* @author Fabrice PENHOËT
|
|
**/
|
|
require_once("lien.php");
|
|
require_once("FclFlux_utilisateur.php");
|
|
require_once("FclFlux_lien.php");
|
|
class FclFlux_marque_page extends Lien
|
|
{
|
|
public $id_marque_page;
|
|
protected $origine;// objet de type FclFlux_lien désignant l'éventuel lien à l'origine du marque-page
|
|
protected $motscles;// mots-clés décrivant le lien (utile pour recherche)
|
|
protected $time_crea;// timestamp de l'enregistrement du lien
|
|
protected $time_maj;// timestamp de la dernière mise à jour du lien
|
|
protected $proprietaire;// objet de type FclFlux_utilisateur désigant le propriétaire du lien
|
|
/**
|
|
* Constructeur qui initialise certains attributs en testant les valeurs fournies
|
|
* copier/ coller de la classe héritée mais méthodes contrôlant des champs supplémentaires
|
|
*
|
|
* @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)))
|
|
{
|
|
//les limites doivent être connues avant le reste
|
|
if(!empty($infos["limites"]))
|
|
$this->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(($longueur<MP_MIN_RECHERCHE)||($longueur>MP_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="<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
|