hellofacteurV1/modele/rubrique.php

157 lines
4.5 KiB
PHP
Raw Permalink Normal View History

2021-11-02 11:23:49 +01:00
<?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;
}
}