Subversion Repositories Applications.gtt

Rev

Rev 162 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?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é...
                                                // Est re-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;
                }
        }
}
?>