<?php
// +------------------------------------------------------------------------------------------------------+
// | PHP version 5.1.1                                                                                    |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2006 Tela Botanica (accueil@tela-botanica.org)                                         |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of eFlore.                                                                         |
// |                                                                                                      |
// | Foobar is free software; you can redistribute it and/or modify                                       |
// | it under the terms of the GNU General Public License as published by                                 |
// | the Free Software Foundation; either version 2 of the License, or                                    |
// | (at your option) any later version.                                                                  |
// |                                                                                                      |
// | Foobar is distributed in the hope that it will be useful,                                            |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
// | GNU General Public License for more details.                                                         |
// |                                                                                                      |
// | You should have received a copy of the GNU General Public License                                    |
// | along with Foobar; if not, write to the Free Software                                                |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id$
/**
* Classe Calendrier
*
* Description
*
*@package Calendrier
//Auteur original :
*@version 1
*@author        Dorian BANNIER <dbannier@aol.com>
//Autres auteurs :
*@version 3
*@author        Shaheen ABDOOL RAHEEM <shaheenar50@hotmail.com>
*@version 4
*@author        Jean-Pascal MILCENT <jpm@clapas.org>
*@author        aucun
*@copyright     Tela-Botanica 2000-2006
*@version       $Revision$ $Date$
// +------------------------------------------------------------------------------------------------------+
*/

/**
* Classe calendrier pour gerer le calendrier pour un mois et une annee 
*
*@param annee
*@param mois 
*@param premier jour du mois 
*@param semaine
*@param l'url du resultat affiche
*@param liste de noms des jours
*@param liste de noms des mois
*@param liste des jours feries du mois
*/
class Calendrier
{
	private $annee;   
	private $mois;
	private $semaine;
	private $jour; 
	private $nom_jours = array();
	private $nom_mois = array();
	private $liste_feries = array();  
	
	/**
	*constructeur de la classe calendrier
	*toutes les variables sont initialises 	avec les donnees 
	*de la date du jour si on ne passe aucune date en parametre
	*sinon on initialise le calendrier avec 
	*@param semaine
	*@param annee
	*/
	public function __construct($jour = null, $semaine = null, $mois = null, $annee = null)
	{
		if (is_null($jour)) {
			$jour = date('d', time());
		}
		$this->jour = $jour;
		if (is_null($semaine)) {
			$semaine = date('W', time());
		}
		$this->semaine = $semaine;
		if (is_null($mois)) {
			$mois = date('m', time());
		}
		$this->mois = $mois;
		if (is_null($annee)) {
			// TODO : vérifier le standard ISO-8601
			$annee = date('Y', time());
		}
		$this->annee = $annee;
		
		$this->nom_jours = array (1 => GESTION_LUN_A, GESTION_MAR_A, GESTION_MER_A, GESTION_JEU_A, GESTION_VEN_A, GESTION_SAM_A ,GESTION_DIM_A);
		$this->nom_jours_long = array (1 => GESTION_LUN_L, GESTION_MAR_L, GESTION_MER_L, GESTION_JEU_L, GESTION_VEN_L, GESTION_SAM_L ,GESTION_DIM_L); 
		$this->nom_mois = array(1 => "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
		
		$this->liste_feries = $this->calculerJoursFeries($this->annee);
	}
	
	public function getAnnee()
	{
		return $this->annee;
	}
	
	public function getMois()
	{
		return $this->mois;
	}
	
	public function getSemaine()
	{
		return $this->semaine;
	}
	
	public function getJour()
	{
		return $this->jour;
	}
	
	public function getNomJours($j = null)
	{
		if (is_null($j)) {
			return $this->nom_jours;
		}
		return $this->nom_jours[$j];
	}
	
	public function getNomJoursLong($j = null)
	{
		if (is_null($j)) {
			return $this->nom_jours_long;
		}
		return $this->nom_jours_long[$j];
	}

	public function getNomMois($m = null)
	{
		if (is_null($m)) {
			return $this->nom_mois;
		}
		return $this->nom_mois[$m];
	}
	
	public function getListeFeries()
	{
		return $this->liste_feries;
	}
	
	/**
	*Calcule les dates des jours fériés pour la france.
	*Renvoie un tableau contenant la liste de dates par mois.
	*Les dates sont de la forme timestamp unix.
	*
	*@param integer l'année pour laquelle on veut les jours fériés.
	*@return array tableau des dates fériées.
	*/
	public function calculerJoursFeries($annee)
	{
		$tab = array(	mktime(0,0,0,1,1,$annee), 
						$this->donnerDatePaques($annee),
						mktime(0,0,0,5,1,$annee),
	     				mktime(0,0,0,5,8,$annee),
	     				$this->donnerDateAscension($annee),
	     				// TODO : gérer les jours fériès depuis l'interface d'admin...
	     				// N'est plus un jour férié...
	     				$this->donnerDatePentecote($annee),
	     				mktime(0,0,0,7,14,$annee),
	     				mktime(0,0,0,8,15,$annee),
	     				mktime(0,0,0,11,1,$annee),
	     				mktime(0,0,0,11,11,$annee),
	     				mktime(0,0,0,12,25,$annee));
		return $tab;
	} 
	
	/**
	*Calcule la date du lundi de Pâques.
	*
	*@param integer l'année pour laquelle on veut connaître la date de Pâques
	*@return integer le timestamp du lundi de Pâques
	*/
	public function donnerDatePaques($annee)
	{
		$date_paques = easter_date($annee);
		$lundi_paques = mktime(	date("H", $date_paques),
								date("i", $date_paques),
								date("s", $date_paques),
								date("m", $date_paques),
								date("d", $date_paques) + 1,
								date("Y", $date_paques));
		return $lundi_paques;
	}
	/**
	*Calcule la date de l'ascension.
	*
	*@param integer l'année pour laquelle on veut connaître la date de l'ascencion
	*@return integer le timestamp de l'ascencion
	*/
	public function donnerDateAscension($annee)
	{
		$date_paques = easter_date($annee);
		$date_ascension = mktime(	date("H", $date_paques),
									date("i", $date_paques),
									date("s", $date_paques),
									date("m", $date_paques),
									date("d", $date_paques) + 39,
									date("Y", $date_paques));
		return $date_ascension;
	}

	/**
	*Calcule la date du lundi de la pentecote
	*Renvoie un timestamp
	*renvoie cette derniere
	*/
	public function donnerDatePentecote($annee)
	{
		$date_paques = easter_date($annee);
		$date_ascension = $this->donnerDateAscension($annee);
		$date_pentecote = mktime(	date("H", $date_ascension),
									date("i", $date_ascension),
									date("s", $date_ascension),
									date("m", $date_ascension),
									date("d", $date_ascension) + 11,
									date("Y", $date_ascension)); 
		return $date_pentecote;
	}

	/**
	*Indique si une date est fériée ou non
	*
	*@param integer le timestamp de la date à vérifier
	*@return boolean true si vrai, false si le jour n'est pas férié.
	*/
	function etreFerie($date)
	{
		if (in_array($date, $this->liste_feries)) {
			return true;
		} else {
			return false;
		}
	}
}
?>