hellofacteurV1/modele/rubrique.php

157 lines
4.5 KiB
PHP
Executable File

<?php
/**
* classe minimaliste permettant une arborescence de dossiers / rubriques
* utilisée pour classer d'autres objets
*
* @author Fabrice PENHOËT
**/
class Rubrique
{
protected $nom; // désignation de la rubrique.
protected $description; // texte de description.
protected $rubrique_sup; // la rubrique supérieure
public $limites=array(); // tailles limites des attributs
public $erreurs=array(); // erreurs rencontrées dans les méthodes.
/**
* Constructeur qui initialise certains attributs en testant les valeurs fournies
*
* @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 testant la validité du nom de la rubrique
* et l'attribuant à l'objet si ok
*
* @param le nom à contrôler
* @return booléen suivant succès
* @author Fabrice PENHOË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éthode testant la validité de la description de la rubrique
* et l'attribuant à l'objet si ok
*
* @param la description à contôler
* @return booléen suivant succès
* @author Fabrice PENHOË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éthode testant la validité de la rubrique supérieure
* et l'attribuant à l'objet si ok
* la valeur peut être nulle si on décrit une rubrique racine
*
* @param la valeur à contrôler
* @return booléen suivant succès
* @author Fabrice PENHOË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é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;
}
}