hellofacteurV1/modele/agenda.php

156 lines
4.4 KiB
PHP
Executable File

<?php
/**
* classe minimaliste permettant de gérer un agenda
* on ne traite pas ici le stockage des données
* nécessite la classe utilisateur pour désigner le propriétaire de l'agenda
*
* @author Fabrice PENHOËT
**/
require_once("utilisateur.php");
class Agenda
{
protected $designation; // intitulé de l'entrée de l'agenda
protected $time_debut;// timestamp de début
protected $time_fin;// timestamp de fin
protected $proprietaire;// l'auteur de l'entrée de l'agenda (classe Utilisateur)
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)))
{
$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é d'un intitulé et l'attribuant à l'objet si ok
*
* @return booléen suivant succès
* @author Fabrice PENHOË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éthode testant la validité d'une date de début fournie
* et la transformant en timestamp unix si ok pour l'attribuer à l'objet
*
* @param date de début au format JJ/MM/AAAA
* @return booléen suivant succès
* @author Fabrice PENHOË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éthode testant la validité d'une date de fin fournie
* et la transformant en timestamp unix si ok pour l'attribuer à l'objet
*
* @param date de fin au format JJ/MM/AAAA
* @return booléen suivant succès
* @author Fabrice PENHOË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éthode testant la validité du propriétaire fourni
*
* @param user : une instance de l'objet Utilisateur
* @return false si valeur non acceptée, true sinon
* @author Fabrice PENHOË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é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;
}
}