349 lines
10 KiB
PHP
349 lines
10 KiB
PHP
|
<?php
|
|||
|
/**
|
|||
|
* cette classe g<EFBFBD>n<EFBFBD>rique va g<EFBFBD>rer les principales informations relatives <EFBFBD> un utilisateur
|
|||
|
* on ne se pr<EFBFBD>occupe pas ici de la fa<EFBFBD>on dont les donn<EFBFBD>es sont stock<EFBFBD>es (bd et/ou fichier)
|
|||
|
* ni des sp<EFBFBD>cificit<EFBFBD>s de l'application
|
|||
|
*
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
require_once("journal_erreurs.php");//pour les bugs...
|
|||
|
class Utilisateur
|
|||
|
{
|
|||
|
public $id_utilisateur;//identifant num<75>rique de l'utilisateur
|
|||
|
protected $pseudo;
|
|||
|
protected $passe; // le mot de passe en clair
|
|||
|
protected $chiffre; // le mot de passe chiffr<66>
|
|||
|
protected $email;
|
|||
|
protected $statut; // les droits sur l'application : s'agit-il d'un administrateur ? d'un simple utilisateur ?
|
|||
|
protected $presentation; // texte de pr<70>sentation pouvant <20>tre saisi par l'utilisateur.
|
|||
|
protected $illustration; // nom du fichier image servant <20> illustrer le profil de l'utilisateur.
|
|||
|
protected $origine; // indique l'origine de l'utilisateur, par exemple site partenaire, campagne emailing...
|
|||
|
protected $ip_crea; // adresse IP de l'utilisateur lors de la cr<63>ation de son compte.
|
|||
|
protected $time_crea; // timestamp de la cr<63>ation du compte utilisateur
|
|||
|
protected $time_validation; // timestamp de la validation du compte utilisateur
|
|||
|
public $erreurs=array(); // collecte les erreurs rencontr<74>es <20> l'appel des diff<66>rentes m<>thodes
|
|||
|
public $connexion_ok; // bool<6F>en : l'utilisateur est-il connect<63> <20> son compte
|
|||
|
/**
|
|||
|
* Constructeur qui initialise certains attributs en testant les valeurs fournies
|
|||
|
*
|
|||
|
* @param infos_utilisateur tableau contenant les diff<EFBFBD>rentes donn<EFBFBD>es correspondant aux attributs homonymes.
|
|||
|
* @return null
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function __construct($infos_utilisateur=null)
|
|||
|
{
|
|||
|
if((!empty($infos_utilisateur))&&(is_array($infos_utilisateur)))
|
|||
|
{
|
|||
|
$erreur_ok=false;
|
|||
|
foreach ($infos_utilisateur 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<EFBFBD>thode testant la validit<EFBFBD> d'un pseudo et l'attribuant <EFBFBD> l'objet si ok
|
|||
|
*
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function set_pseudo($pseudo)
|
|||
|
{
|
|||
|
$pseudo=strip_tags(strval(trim($pseudo)));
|
|||
|
$longueur=strlen($pseudo);
|
|||
|
if(($longueur<UTILISATEUR_MIN_PSEUDO)||($longueur>UTILISATEUR_MAX_PSEUDO))
|
|||
|
{
|
|||
|
$this->erreurs=array_merge($this->erreurs,(array) ERREUR_UTILISA_PSEUDO_LONG);
|
|||
|
return false;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$this->pseudo=$pseudo;
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode testant la validit<EFBFBD> d'un mot de passe avant de le chiffrer et de l'attribuer <EFBFBD> l'objet si ok
|
|||
|
*
|
|||
|
* @param mot de passe non chiffr<EFBFBD>
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function set_passe($passe)
|
|||
|
{
|
|||
|
$passe=strval(trim($passe));
|
|||
|
$longueur=strlen($passe);
|
|||
|
if(($longueur<UTILISATEUR_MIN_PASSE)||($longueur>UTILISATEUR_MAX_PASSE))
|
|||
|
{
|
|||
|
$this->erreurs=array_merge($this->erreurs,(array) ERREUR_UTILISA_PASSE_LONG);
|
|||
|
return false;
|
|||
|
}
|
|||
|
$chiffre=chiffrement($passe);
|
|||
|
if($chiffre!=false)
|
|||
|
{
|
|||
|
$this->passe=$passe;
|
|||
|
$this->chiffre=$chiffre;
|
|||
|
return true;
|
|||
|
}
|
|||
|
else
|
|||
|
return false;
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode testant la validit<EFBFBD> d'un email et l'affectant <EFBFBD> l'objet si ok
|
|||
|
*
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function set_email($email)
|
|||
|
{
|
|||
|
$email=strip_tags(strval(trim($email)));
|
|||
|
$longueur=strlen($email);
|
|||
|
if($longueur>UTILISATEUR_MAX_EMAIL)
|
|||
|
$messages[]=ERREUR_UTILISA_EMAIL_LONG;
|
|||
|
if(!filter_var($email,FILTER_VALIDATE_EMAIL))
|
|||
|
$messages[]=ERREUR_EMAIL_ADRESSE_FORMAT;
|
|||
|
if(empty($messages))
|
|||
|
{
|
|||
|
$this->email=$email;
|
|||
|
return true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$this->erreurs=array_merge($this->erreurs,$messages);
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode testant la validit<EFBFBD> du statut et l'affectant <20> l'objet si ok
|
|||
|
*
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function set_statut($statut)
|
|||
|
{
|
|||
|
$valeurs_ok=explode("|",UTILISATEUR_STATUTS);
|
|||
|
if(empty($valeurs_ok))
|
|||
|
{
|
|||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_UTILISA_STATUTS_EXISTE));
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (!in_array($statut,$valeurs_ok))
|
|||
|
{
|
|||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_UTILISA_STATUT_VALIDE." >> $statut"));
|
|||
|
return false;
|
|||
|
}
|
|||
|
$this->statut=$statut;
|
|||
|
return true;
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode testant le texte de description avant de l'attribuer
|
|||
|
*
|
|||
|
* @return false si valeur non accept<EFBFBD>e, true sinon
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function set_presentation($presentation)
|
|||
|
{
|
|||
|
if(!empty($presentation))
|
|||
|
{
|
|||
|
$presentation=strip_tags(strval(trim($presentation)));
|
|||
|
$longueur=strlen($presentation);
|
|||
|
if($longueur>UTILISATEUR_MAX_PRESENTATION)
|
|||
|
{
|
|||
|
$this->erreurs=array_merge($this->erreurs,(array) ERREUR_UTILISA_PRESENTATION_LONG);
|
|||
|
return false;
|
|||
|
}
|
|||
|
$this->presentation=$presentation;
|
|||
|
return true;
|
|||
|
}
|
|||
|
else
|
|||
|
return true;
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode testant la validit<EFBFBD> d'un fichier image (nom, format, taille...)
|
|||
|
* Si ok, une miniature est cr<EFBFBD><EFBFBD>e localement et son adresse affect<EFBFBD>e <EFBFBD> l'objet
|
|||
|
* ! le pseudo doit donc <EFBFBD>tre attribu<EFBFBD> <EFBFBD> l'objet avant car il sert <EFBFBD> nommer le fichier image
|
|||
|
*
|
|||
|
* @param $fichier : les infos du fichier qui vient d'<EFBFBD>tre t<EFBFBD>l<EFBFBD>charg<EFBFBD>
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>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->pseudo))
|
|||
|
{
|
|||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_UTILISA_PSEUDO_ABSENT));
|
|||
|
return false;
|
|||
|
}
|
|||
|
$extension=strtolower(strrchr($fichier["name"],"."));
|
|||
|
if (strpos(UTILISATEUR_ILLUS_EXTENSIONS,$extension)===false)
|
|||
|
$messages[]=ERREUR_IMAGE_FORMAT;
|
|||
|
$taille_max=min(intval(str_replace("M","000000",ini_get("upload_max_filesize"))),UTILISATEUR_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))
|
|||
|
{
|
|||
|
$pseudo=nettoye_chaine(strtolower($this->pseudo));
|
|||
|
$adresse_illustration=UTILISATEUR_ILLUS_REP."/".$pseudo[0]."/".$pseudo.$extension;
|
|||
|
$i=1;
|
|||
|
while(file_exists($adresse_illustration))
|
|||
|
{
|
|||
|
$i++;
|
|||
|
$adresse_illustration=UTILISATEUR_ILLUS_REP."/".$pseudo[0]."/".$pseudo.$i.$extension;
|
|||
|
}
|
|||
|
if(!file_exists(UTILISATEUR_ILLUS_REP."/".$pseudo[0]."/"))
|
|||
|
{
|
|||
|
if(!mkdir(UTILISATEUR_ILLUS_REP."/".$pseudo[0]."/",UTILISATEUR_ILLUS_REP_CHMOD,true))
|
|||
|
{
|
|||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_CREA." >> ".UTILISATEUR_ILLUS_REP."/".$pseudo[0]."/"));
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
if((import_image($adresse_temp,$adresse_illustration,0,UTILISATEUR_ILLUS_MAX_LARGEUR)===true))
|
|||
|
{
|
|||
|
$this->illustration=substr(strrchr($adresse_illustration,"/"),1);
|
|||
|
return true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_IMAGE_CREATION));
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$this->erreurs=array_merge($this->erreurs,$messages);
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
$this->illustration="";
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode testant la validit<EFBFBD> d'une origine et l'affectant <EFBFBD> l'objet si ok
|
|||
|
* la valeur fournie doit faire partie de celles d<EFBFBD>clar<EFBFBD>es ou <EFBFBD>tre nulle
|
|||
|
*
|
|||
|
* @param origin chaine de caract<EFBFBD>res
|
|||
|
* @return bool<EFBFBD>en
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function set_origine($origine)
|
|||
|
{
|
|||
|
if(!empty($origine))
|
|||
|
{
|
|||
|
$valeurs_ok=explode("|",UTILISATEUR_ORIGINES);
|
|||
|
if(empty($valeurs_ok))
|
|||
|
{
|
|||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_UTILISA_ORIGINES_EXISTE));
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (!in_array($origine,$valeurs_ok))
|
|||
|
{
|
|||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_UTILISA_ORIGINE_VALIDE." >> $origine"));
|
|||
|
return false;
|
|||
|
}
|
|||
|
$this->origine=$origine;
|
|||
|
return true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$this->origine="inconnue";
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode supprimant le fichier image d'un utilisateur
|
|||
|
*
|
|||
|
* @param null
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function suppr_illustration()
|
|||
|
{
|
|||
|
if(!empty($this->illustration))
|
|||
|
{
|
|||
|
$fichier=$this->illustration;
|
|||
|
$adresse_illustration=UTILISATEUR_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<EFBFBD>thode supprimant toutes les fichiers illustration des utilisateurs + les sous-r<EFBFBD>pertoires
|
|||
|
*
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
static function suppr_illustrations()
|
|||
|
{
|
|||
|
if(supprime_repertoire(UTILISATEUR_ILLUS_REP."/",false))
|
|||
|
return true;
|
|||
|
else
|
|||
|
return false;
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode retournant la valeur des attributs d'un utilisateur dans un tableau
|
|||
|
*
|
|||
|
* @param attributs : tableau php listant le nom des attributs que je souhaite exporter
|
|||
|
* @return tableau php contenant les attributs et leurs valeurs. false si erreur.
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function export_utilisateur($attributs)
|
|||
|
{
|
|||
|
if(!is_array($attributs))
|
|||
|
{
|
|||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
|||
|
return false;
|
|||
|
}
|
|||
|
foreach ($attributs as $attribut)
|
|||
|
{
|
|||
|
if (isset($this->$attribut))
|
|||
|
$tab[$attribut]=$this->$attribut;
|
|||
|
}
|
|||
|
return $tab;
|
|||
|
}
|
|||
|
/**
|
|||
|
* Affichage par d<EFBFBD>faut d'un objet
|
|||
|
*
|
|||
|
* @return cha<EFBFBD>ne de caract<EFBFBD>res listant la valeur de chaque attribut
|
|||
|
* @author Fabrice PENHO<EFBFBD>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;
|
|||
|
}
|
|||
|
}
|