hellofacteurV1/modele/agenda.php

156 lines
4.4 KiB
PHP
Raw Normal View History

2021-11-02 11:23:49 +01:00
<?php
/**
* classe minimaliste permettant de g<EFBFBD>rer un agenda
* on ne traite pas ici le stockage des donn<EFBFBD>es
* n<EFBFBD>cessite la classe utilisateur pour d<EFBFBD>signer le propri<EFBFBD>taire de l'agenda
*
* @author Fabrice PENHO<EFBFBD>T
**/
require_once("utilisateur.php");
class Agenda
{
protected $designation; // intitul<75> de l'entr<74>e de l'agenda
protected $time_debut;// timestamp de d<>but
protected $time_fin;// timestamp de fin
protected $proprietaire;// l'auteur de l'entr<74>e de l'agenda (classe Utilisateur)
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)))
{
$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> d'un intitul<75> et l'attribuant <EFBFBD> l'objet si ok
*
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
* @author Fabrice PENHO<EFBFBD>T
**/
public function set_designation($designation)
{
$designation=strip_tags(strval(trim($designation)));
$longueur=strlen($designation);
if(($longueur<AGENDA_MIN_DESIGNATION)||($longueur>AGENDA_MAX_DESIGNATION))
{
$this->erreurs=array_merge($this->erreurs,(array) ERREUR_AGENDA_DESIGNATION_LONG);
return false;
}
else
{
$this->designation=$designation;
return true;
}
}
/**
* M<EFBFBD>thode testant la validit<EFBFBD> d'une date de d<EFBFBD>but fournie
* et la transformant en timestamp unix si ok pour l'attribuer <20> l'objet
*
* @param date de d<EFBFBD>but au format JJ/MM/AAAA
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
* @author Fabrice PENHO<EFBFBD>T
**/
public function set_time_debut($date_debut)
{
if(preg_match(DATE_FORMAT_EREG,$date_debut)==0)
{
$this->erreurs=array_merge($this->erreurs,(array) ERREUR_AGENDA_DATE_DEBUT_FORMAT);
return false;
}
$tab_debut=explode("/",$date_debut);
$time_debut=mktime(0,0,0,$tab_debut[1],$tab_debut[0],$tab_debut[2]);
if($time_debut===false) return false;
$this->time_debut=$time_debut;
return true;
}
/**
* M<EFBFBD>thode testant la validit<EFBFBD> d'une date de fin fournie
* et la transformant en timestamp unix si ok pour l'attribuer <20> l'objet
*
* @param date de fin au format JJ/MM/AAAA
* @return bool<EFBFBD>en suivant succ<EFBFBD>s
* @author Fabrice PENHO<EFBFBD>T
**/
public function set_time_fin($date_fin)
{
if(!isset($this->time_debut))
{
$this->erreurs=array_merge($this->erreurs,(array) ERREUR_AGENDA_DATE_FIN_DEBUT_ABSENT);
return false;
}
if(preg_match(DATE_FORMAT_EREG,$date_fin)==0)
{
$this->erreurs=array_merge($this->erreurs,(array) ERREUR_AGENDA_DATE_FIN_FORMAT);
return false;
}
$tab_fin=explode("/",$date_fin);
$time_fin=mktime(0,0,0,$tab_fin[1],$tab_fin[0],$tab_fin[2]);
if($time_fin===false) return false;
if($time_fin<$this->time_debut)
{
$this->erreurs=array_merge($this->erreurs,(array) ERREUR_AGENDA_DATE_FIN_AVANT_DEBUT);
return false;
}
$this->time_fin=$time_fin;
return true;
}
/**
* M<EFBFBD>thode testant la validit<EFBFBD> du propri<EFBFBD>taire fourni
*
* @param user : une instance de l'objet Utilisateur
* @return false si valeur non accept<EFBFBD>e, true sinon
* @author Fabrice PENHO<EFBFBD>T
**/
public function set_proprietaire($user)
{
if(!($user instanceof 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;
}
$this->proprietaire=$user;
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;
}
}