157 lines
4.5 KiB
PHP
157 lines
4.5 KiB
PHP
|
<?php
|
|||
|
/**
|
|||
|
* classe minimaliste permettant une arborescence de dossiers / rubriques
|
|||
|
* utilis<EFBFBD>e pour classer d'autres objets
|
|||
|
*
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
class Rubrique
|
|||
|
{
|
|||
|
protected $nom; // d<>signation de la rubrique.
|
|||
|
protected $description; // texte de description.
|
|||
|
protected $rubrique_sup; // la rubrique sup<75>rieure
|
|||
|
public $limites=array(); // tailles limites des attributs
|
|||
|
public $erreurs=array(); // erreurs rencontr<74>es dans les m<>thodes.
|
|||
|
/**
|
|||
|
* Constructeur qui initialise certains attributs en testant les valeurs fournies
|
|||
|
*
|
|||
|
* @param infos tableau contenant les diff<EFBFBD>rentes donn<EFBFBD>es correspondant aux attributs (suppos<EFBFBD>s homonymes)
|
|||
|
* @return null
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function __construct($infos=null)
|
|||
|
{
|
|||
|
if((!empty($infos))&&(is_array($infos)))
|
|||
|
{
|
|||
|
//les limites doivent <20>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<EFBFBD>thode testant la validit<EFBFBD> du nom de la rubrique
|
|||
|
* et l'attribuant <20> l'objet si ok
|
|||
|
*
|
|||
|
* @param le nom <EFBFBD> contr<EFBFBD>ler
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>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_RUBRIQUE_NOM_LONG)));
|
|||
|
return false;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$this->nom=$nom;
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode testant la validit<EFBFBD> de la description de la rubrique
|
|||
|
* et l'attribuant <20> l'objet si ok
|
|||
|
*
|
|||
|
* @param la description <EFBFBD> cont<EFBFBD>ler
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function set_description($description)
|
|||
|
{
|
|||
|
$long_min=(!empty($this->limites["description_long_min"]))?$this->limites["description_long_min"]:0;
|
|||
|
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((($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;
|
|||
|
}
|
|||
|
$description=strip_tags(strval(trim($description)));
|
|||
|
$longueur=strlen($description);
|
|||
|
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_RUBRIQUE_DESCRIPTION_LONG)));
|
|||
|
return false;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$this->description=$description;
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* M<EFBFBD>thode testant la validit<EFBFBD> de la rubrique sup<EFBFBD>rieure
|
|||
|
* et l'attribuant <20> l'objet si ok
|
|||
|
* la valeur peut <EFBFBD>tre nulle si on d<EFBFBD>crit une rubrique racine
|
|||
|
*
|
|||
|
* @param la valeur <EFBFBD> contr<EFBFBD>ler
|
|||
|
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
|
|||
|
* @author Fabrice PENHO<EFBFBD>T
|
|||
|
**/
|
|||
|
public function set_rubrique_sup($rubrique_sup=null)
|
|||
|
{
|
|||
|
if((!empty($rubrique_sup))&&(!($rubrique_sup instanceof Rubrique)))
|
|||
|
{
|
|||
|
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
|
|||
|
return false;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$this->rubrique_sup=$rubrique_sup;
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* 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;
|
|||
|
}
|
|||
|
}
|