begin process at 2012 05 27 22:08:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASS CALENDRIER ET JOURS FÉRIÉS

CLASS CALENDRIER ET JOURS FÉRIÉS


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :jours fériés, calendrier, class, dates calendrier, générateur Niveau :Débutant Date de création :05/10/2010 Date de mise à jour :11/10/2010 15:53:52 Vu / téléchargé :2 375 / 212

Auteur : beemoon

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Je me teste à la POO en php voici donc ma première réalisation qui est une n_ieme class pour un calendrier. C'est plus pour un exercice et des commentaires pour progresser que je mets ce code.

Il ne permet pas de générer graphiquement un calendrier mais de générer des dates pour les exploiter après.
Les dates sont configurables par fichier le conf.ini
Vous pouvez générer la plage de calendrier que vous voulez.
un fichier mainTest.php est joint pour tester et une démo de ce qui peut etre généré.

NB: Il faudrait revoir tout le code pour passer au Datetime, donc pour une peut etre future version.

Source

  • ==> Clas
  • <?php
  • /**
  • * Generation des dates pour realiser un calendrier
  • *
  • * Cette class genere toutes les dates necessaire pour realiser un calendrier
  • * les dates sont retournees sous forme array()
  • * les dates generees sont :
  • * - tous les jours de la periode du calendrier passee en parametre
  • * - tous les weekends de la periode du calendrier passee en parametre
  • * - tous les jours feries fixes francais de la periode du calendrier passee en parametre
  • * - tous les jours feries variables (paques, pentecote,ascension) de la periode du calendrier passee en parametre
  • * - le cumul par ordre chronologique croissant des jours feries
  • *
  • * @version 1.0
  • * @author BRIZARD Olivier <o.brizard@gmail.com>
  • * @link http://www.beemoon.fr
  • * @copyright Copyright (c) 2010, BRIZARD Olivier
  • * @license http://creativecommons.org/licenses/by-sa/2.0/fr/
  • */
  • class Calendrier{
  • // Les attributs prives retournes par __get()
  • private $_lesJours;
  • private $_lesWeekends;
  • private $_lesAnnees;
  • private $_lesFeriesFixes;
  • private $_lesFeriesVariables;
  • private $_tousLesFeries;
  • private $_toutLeCalendrier;
  • // Les attributs prives non retournes
  • private $_dateDeb;
  • private $_dateFin;
  • private $_config = "conf.ini";
  • private $configFile = array();
  • public function __construct($date_deb,$date_fin){
  • // Controle que le module Calendar est chargé
  • if (!extension_loaded("calendar")) {echo "Cette class utilise les fonctions de Calendar.";exit();}
  • // Chargement du fichier de configuration des jours feries
  • if (file_exists($this->_config)) {
  • $this->configFile = parse_ini_file($this->_config,true);
  • $this->displayDate = $this->configFile['displayDate'];
  • // Fixe la timezone
  • $this->timezoneTmp = $this->configFile['fuseauHoraire'];
  • if (isset($this->timezoneTmp[timezone])){
  • date_default_timezone_set($this->timezoneTmp[timezone]);
  • //echo $this->timezoneTmp[timezone]. '<br />';
  • }
  • }else{
  • echo "Il n'existe pas de fichier de configuration des dates f&eacute;ri&eacute;es<br/>";
  • echo "Ce fichier doit se nommer 'joursFeries.ini' avec la m&ecirc;me synthaxe que le fichier php.ini<br/>";
  • echo "Vous pouvez renommer le fichier 'joursFeries.ini.sample'<br/>";
  • exit();
  • }
  • // ==> Fin de chargement du fichier des jours feries
  • // Controle les arguments d'instanciation
  • $i = func_num_args();
  • switch ($i) {
  • case 0:
  • $this->_dateDeb = '01-01-'.date('Y');
  • $this->_dateFin = '31-12-'.date('Y');
  • break;
  • case 2:
  • if (strtotime ($date_fin) - strtotime ($date_deb) < 0) {
  • $this->_dateDeb = $date_fin;
  • $this->_dateFin = $date_deb;
  • }else{
  • $this->_dateDeb = $date_deb;
  • $this->_dateFin = $date_fin;
  • }
  • break;
  • default:
  • echo 'Les arguments d\'instanciations sont incorrects<br/>';
  • echo 'Sans argument le calendrier s\'&eacute;tendra du 1er janvier au 31 d&eacute;cembre de l\'ann&eacute;e en cours<br/>';
  • echo '<br/>';
  • echo 'usage: $ma_variable = new Calendrier()<br/>';
  • echo 'usage: $ma_variable = new Calendrier(\'date_deb\',\'date_fin\');';
  • exit();
  • }
  • // ==> Fin de controle les arguments d'instanciation
  • // ==> initialisation des variables
  • $this->_lesJours = $this->jours();
  • $this->_lesWeekends = $this->weekends();
  • $this->_lesAnnees = $this->annees();
  • $this->_lesFeriesFixes = $this->feriesFixes();
  • $this->_lesFeriesVariables = $this->feriesVariables();
  • $this->_tousLesFeries = $this->tousLesFeries();
  • $this->_toutLeCalendrier = $this->toutLeCalendrier();
  • }
  • /**
  • * Calcule tous les jours de la periode demandees
  • *
  • * @param void
  • * @return array
  • */
  • private function jours(){
  • $date1= strtotime($this->_dateDeb);
  • $date2= strtotime($this->_dateFin);
  • $nbjour=($date2-$date1)/60/60/24;
  • for($i=1;$i<=$nbjour+1;$i++){
  • if($this->displayDate[unixTime]=='0'){
  • $numDay=jddayofweek(unixtojd($date1));
  • $jours[date('d-m-Y',$date1)]=$this->labelJour($numDay);
  • }else{
  • $numDay=jddayofweek(unixtojd($date1));
  • $jours[$date1]=$this->labelJour($numDay);
  • }
  • $date1= strtotime('+1 day', $date1);
  • }
  • return $jours;
  • }
  • /**
  • * Calcule tous les weekends de la periode demandee
  • *
  • * @param void
  • * @return array
  • */
  • private function weekends(){
  • $lesJours = $this->_lesJours;
  • foreach ($lesJours as $key=>$value) {
  • if($this->displayDate[unixTime]=='0'){
  • if(jddayofweek(unixtojd(strtotime($key)))==0) {$weekend[$key]=$this->labelJour(jddayofweek(unixtojd(strtotime($key))));}
  • if(jddayofweek(unixtojd(strtotime($key)))==6) {$weekend[$key]=$this->labelJour(jddayofweek(unixtojd(strtotime($key))));}
  • }else{
  • if(jddayofweek(unixtojd($key))==0) {$weekend[$key]=$this->labelJour(jddayofweek(unixtojd($key)));}
  • if(jddayofweek(unixtojd($key))==6) {$weekend[$key]=$this->labelJour(jddayofweek(unixtojd($key)));}
  • }
  • }
  • unset($key);
  • unset($value);
  • return $weekend;
  • }
  • /**
  • * Recupere les annees de la periode demandee
  • *
  • * @param void
  • * @return array
  • */
  • private function annees(){
  • $lesJours = $this->_lesJours;
  • $i=0;
  • foreach ($lesJours as $key=>$value) {
  • if($this->displayDate[unixTime]=='0'){
  • $anneeTmp = date('Y',strtotime($key));
  • }else{
  • $anneeTmp = date('Y',$key);
  • }
  • if (!in_array($anneeTmp, $annee)) {
  • $annee[$i]=$anneeTmp;
  • $i++;
  • }
  • }
  • unset($key);
  • unset($value);
  • return $annee;
  • }
  • /**
  • * Recupere les jours feriees fixes de la periode demandee
  • *
  • * @param void
  • * @return array
  • */
  • private function feriesFixes(){
  • $lesJours = $this->_lesJours;
  • $annee = $this->_lesAnnees;
  • $feriesFixes=array();
  • $joursFeriesFixes=$this->configFile['joursFeriesFixes'];
  • $feriesFixes=array();
  • foreach ($annee as $value) {
  • foreach ($joursFeriesFixes as $labelJour => $dateJour) {
  • if($this->displayDate[unixTime]=='0'){
  • $formatDate=$dateJour.'-'.$value;
  • }else{
  • $formatDate=strtotime($dateJour.'-'.$value);
  • }
  • if (in_array($formatDate, array_keys($lesJours))) {
  • if($this->displayDate[unixTime]=='0'){
  • $feriesFixes[$dateJour.'-'.$value]= $labelJour;
  • }else{
  • $feriesFixes[strtotime($dateJour."-".$value)]= $labelJour;
  • }
  • }
  • }
  • unset($labelJour);
  • unset($dateJour);
  • }
  • unset($value);
  • return $feriesFixes;
  • }
  • /**
  • * Calcule le jour de Paques
  • *
  • * @param annee
  • * @return date formatee "d-m-Y"
  • */
  • private function paques($annee){
  • $paques = date("d-m-Y", easter_date($annee));
  • $lundipaques = date("d-m-Y",strtotime('+1 day', easter_date($annee)));
  • return array($paques,$lundipaques);
  • }
  • /**
  • * Calcule le jour de l'ascension
  • * Jour de paques + 39 jours
  • *
  • * @param annee
  • * @return date formatee "d-m-Y"
  • */
  • private function ascension($annee){
  • $ascension = date("d-m-Y",easter_date($annee)+(60*60*24*39));
  • return $ascension;
  • }
  • /**
  • * Calcule le jour du lundi de Pentecote
  • * Jour de paques + 49 jours
  • *
  • * @param annee
  • * @return date formatee "d-m-Y"
  • */
  • private function pentecote($annee){
  • $pentecote = date("d-m-Y",easter_date($annee)+(60*60*24*49));
  • $lundipentecote = date("d-m-Y",strtotime('+1 day', easter_date($annee)+(60*60*24*49)));
  • return array($pentecote,$lundipentecote);
  • }
  • /**
  • * Recupere les jours feriees variables de la periode demandee
  • *
  • * @param void
  • * @return array
  • */
  • private function feriesVariables(){
  • $lesJours = $this->_lesJours;
  • $annee = $this->_lesAnnees;
  • $feriesVariables=array();
  • $joursFeriesVariables=$this->configFile['joursFeriesVariables'];
  • foreach ($annee as $value) {
  • if($this->displayDate[unixTime]=='0'){
  • if($joursFeriesVariables['lundi de Paques']=='1'){
  • $tmp = $this->paques($value);
  • $feriesVariablesTmp[$tmp[0]]='P&acirc;ques';
  • $feriesVariablesTmp[$tmp[1]]='lundi de P&acirc;ques';
  • }
  • if($joursFeriesVariables[Ascension]=='1'){
  • $feriesVariablesTmp[$this->ascension($value)]='Ascension';
  • }
  • if($joursFeriesVariables['lundi de Pentecote']=='1'){
  • $tmp = $this->pentecote($value);
  • $feriesVariablesTmp[$tmp[0]]='Pentecote';
  • $feriesVariablesTmp[$tmp[1]]='lundi de Pentecote';
  • }
  • }else{
  • if($joursFeriesVariables['lundi de Paques']=='1'){
  • $tmp = $this->paques($value);
  • $feriesVariablesTmp[$tmp[0]]='P&acirc;ques';
  • $feriesVariablesTmp[$tmp[1]]='lundi de P&acirc;ques';
  • }
  • if($joursFeriesVariables[Ascension]=='1'){
  • $feriesVariablesTmp[strtotime($this->ascension($value))]='Ascension';
  • }
  • if($joursFeriesVariables['lundi de Pentecote']=='1'){
  • $tmp = $this->pentecote($value);
  • $feriesVariablesTmp[$tmp[0]]='Pentecote';
  • $feriesVariablesTmp[$tmp[1]]='lundi de Pentecote';
  • }
  • }
  • }
  • unset($value);
  • $feriesVariables=array();
  • foreach ($feriesVariablesTmp as $key => $label) {
  • if (in_array($key, array_keys($lesJours))) {
  • $feriesVariables[$key]=$label;
  • }
  • }
  • unset($key);
  • unset($label);
  • return $feriesVariables;
  • }
  • /**
  • * Recupere tous les jours feriees fixes et variables de la periode demandee
  • *
  • * @param void
  • * @return array
  • */
  • private function tousLesFeries(){
  • $feries=array();
  • // dates et labels
  • $joursFeriesVariables=$this->_lesFeriesVariables;
  • $joursFeriesFixes=$this->_lesFeriesFixes;
  • // Que les dates
  • $listeDatesFixes=array_keys($joursFeriesFixes);
  • $listeDatesVariables=array_keys($joursFeriesVariables);
  • if($this->displayDate[unixTime]=='0'){
  • foreach ($listeDatesFixes as $key=>$value) {
  • $listeDatesFixes[$key]=strtotime($value);
  • }
  • unset($key);
  • unset($value);
  • foreach ($listeDatesVariables as $key=>$value) {
  • $listeDatesVariables[$key]=strtotime($value);
  • }
  • unset($key);
  • unset($value);
  • if(count($listeDatesFixes)>0 AND count($listeDatesVariables)>0){
  • $toutesDates=array_merge($listeDatesFixes,$listeDatesVariables);
  • $tousLabel=array_merge($joursFeriesFixes,$joursFeriesVariables);
  • $feries=array_combine($toutesDates,$tousLabel);
  • }else{
  • if(count($listeDatesFixes)==0){
  • $toutesDates=$listeDatesVariables;
  • $tousLabel=$joursFeriesVariables;
  • $feries=array_combine($toutesDates,$tousLabel);
  • }else{
  • $toutesDates=$listeDatesFixes;
  • $tousLabel=$joursFeriesFixes;
  • $feries=array_combine($toutesDates,$tousLabel);
  • }
  • }
  • // On trie sur les dates (keys) au format timestamp unix
  • // puis on les convertit en date formatee "d-m-Y"
  • ksort($feries);
  • $tmp1=array_keys($feries);
  • $tmp2=array_values($feries);
  • foreach ($tmp1 as $key=>$value) {
  • $tmp3[$key]=date("d-m-Y",$value);
  • }
  • unset($key);
  • unset($value);
  • $feries=array_combine($tmp3,$tmp2);
  • }else{
  • if(count($listeDatesFixes)>0 AND count($listeDatesVariables)>0){
  • $toutesDates=array_merge($listeDatesFixes,$listeDatesVariables);
  • $tousLabel=array_merge($joursFeriesFixes,$joursFeriesVariables);
  • $feries=array_combine($toutesDates,$tousLabel);
  • }else{
  • if(count($listeDatesFixes)==0){
  • $feries=$joursFeriesVariables;
  • }else{
  • $feries=$joursFeriesFixes;
  • }
  • }
  • ksort($feries);
  • }
  • return $feries;
  • }
  • /**
  • * Toutes les dates et labels des dates dans un tableau de la periode demandee
  • *
  • * @param void
  • * @return array
  • */
  • private function toutLeCalendrier(){
  • $lesJours=$this->_lesJours;
  • $lesWeekends=$this->_lesWeekends;
  • $lesAnnees=$this->_lesAnnees;
  • $tousLesFeries=$this->_tousLesFeries;
  • $datesFeries=array_keys($tousLesFeries);
  • foreach($lesAnnees as $annee){
  • foreach ($lesJours as $keyJours=>$valueJours) {
  • if (date("Y",strtotime($keyJours)) == $annee) {
  • $anneeTmp = date("Y",strtotime($keyJours));
  • $moisTmp = date("m",strtotime($keyJours));
  • $joursTmp = date("j",strtotime($keyJours));
  • $joursTmp2 = date("d-m-Y",strtotime($keyJours));
  • if (!in_array($joursTmp2, $datesFeries)) {
  • $explodeCalendar[$annee][$moisTmp][$joursTmp]=$valueJours;
  • }
  • else{
  • $explodeCalendar[$annee][$moisTmp][$joursTmp][$valueJours]=$tousLesFeries[$joursTmp2];
  • }
  • }
  • }
  • }
  • return $explodeCalendar;
  • }
  • /**
  • * Acces aux attributs prives du calendrier
  • *
  • * @param nom de l'attribut
  • * @return array
  • */
  • public function __get($nameAttribut) {
  • $temp='_'.$nameAttribut;
  • return $this->$temp;
  • }
  • /**
  • * Converti le label des jours
  • *
  • * @param int valeur numerique du jour entre 0 et 6
  • * @return string chaine de caracteres du jour
  • */
  • public function labelJour($numJour){
  • $test=preg_match("/^0/",$numJours);
  • if($test){$numJour=preg_replace('/^0/',"", $numJour);}
  • $strJours = $this->configFile['labelsJours'];
  • return $strJours[$numJour];
  • }
  • /**
  • * Conversion des mois numériques en chaine de caracteres
  • *
  • * @param int valeur numerique du mois entre 1 et 12
  • * @return string chaine de caracteres du mois
  • */
  • public function labelMois($numMois) {
  • $test=preg_match("/^0/",$numMois);
  • if($test){$numMois=preg_replace('/^0/',"", $numMois);}
  • $strMois = $this->configFile['labelsMois'];
  • return $strMois[$numMois];
  • }
  • }
  • ?>
  • ==> Config
  • ; Ceci est un fichier de configuration
  • ; Les commentaires commencent par ';', comme dans php.ini
  • [fuseauHoraire]
  • ; Fixe le fuseau horaire à utiliser
  • ; par defaut c'est celui du php.ini qui sera utilisé
  • ; liste des fuseaux supportés : http://www.php.net/manual/fr/timezones.php
  • timezone=Europe/Paris
  • [displayDate]
  • ; Permet de choisir le choix du format de date utilisé
  • ; ATTENTION ne pas changer le format une fois que le calendrier est utilisé
  • ; 1 = Fomat Unix timestamp.
  • ; 0 = Format lisible par l'humain (j-m-Y)
  • ; 1 = par défaut
  • unixTime=0
  • [labelsJours]
  • ; Convertie les jours numériques en équivalent en chaine de caractère
  • 0=Di
  • 1=Lu
  • 2=Ma
  • 3=Me
  • 4=Je
  • 5=Ve
  • 6=Sa
  • [labelsMois]
  • ; Convertie les mois numériques en équivalent en chaine de caractère
  • 1=Janvier
  • 2=Fevrier
  • 3=Mars
  • 4=Avril
  • 5=Mai
  • 6=Juin
  • 7=Juillet
  • 8=Aout
  • 9=Septembre
  • 10=Octobre
  • 11=Novembre
  • 12=Decembre
  • [joursFeriesFixes]
  • ; ==== ATTENTION =====
  • ; indiquez le jour et le mois du jour ferie sur 2 digits (jj-mm)
  • Jour de l'an=01-01
  • Fete du travail=01-05
  • 8 mai 1945=08-05
  • Fete Nationale=14-07
  • Assomption=15-08
  • La Toussaint=01-11
  • Armistice=11-11
  • Noel=25-12
  • [joursFeriesVariables]
  • ; En cas de supression du ou des jours feries variable
  • ; 0 = férie supprime
  • ; 1 = férié
  • ; 0 = par defaut
  • lundi de Paques=1
  • Ascension=1
  • lundi de Pentecote=1
==> Clas

<?php
/**
* Generation des dates pour realiser un calendrier
*
* Cette class genere toutes les dates necessaire pour realiser un calendrier
* les dates sont retournees sous forme array()
* les dates generees sont :
* 		- tous les jours de la periode du calendrier passee en parametre
* 		- tous les weekends de la periode du calendrier passee en parametre
* 		- tous les jours feries fixes francais de la periode du calendrier passee en parametre
* 		- tous les jours feries variables (paques, pentecote,ascension) de la periode du calendrier passee en parametre
*		- le cumul par ordre chronologique croissant des jours feries
*
* @version 1.0
* @author BRIZARD Olivier <o.brizard@gmail.com>
* @link http://www.beemoon.fr
* @copyright Copyright (c) 2010, BRIZARD Olivier
* @license http://creativecommons.org/licenses/by-sa/2.0/fr/
*/

class Calendrier{
	
	// Les attributs prives retournes par __get()
	private $_lesJours;
	private $_lesWeekends;
	private $_lesAnnees;
	private $_lesFeriesFixes;
	private $_lesFeriesVariables;
	private $_tousLesFeries;
	private $_toutLeCalendrier;
	
	// Les attributs prives non retournes
	private $_dateDeb;
	private $_dateFin;	
	private $_config = "conf.ini";	     
	private $configFile = array();
	    
   	public function __construct($date_deb,$date_fin){
   		// Controle que le module Calendar est chargé
   		if (!extension_loaded("calendar")) {echo "Cette class utilise les fonctions de Calendar.";exit();}
   		
  		// Chargement du fichier de configuration des jours feries
  		 if (file_exists($this->_config)) {
	       $this->configFile = parse_ini_file($this->_config,true);
	       $this->displayDate = $this->configFile['displayDate']; 
	       // Fixe la timezone
	       $this->timezoneTmp = $this->configFile['fuseauHoraire'];
	       if (isset($this->timezoneTmp[timezone])){
	       	date_default_timezone_set($this->timezoneTmp[timezone]);
	       	//echo $this->timezoneTmp[timezone]. '<br />';
	       	}
	       	
	     }else{
	     	echo "Il n'existe pas de fichier de configuration des dates f&eacute;ri&eacute;es<br/>";
	     	echo "Ce fichier doit se nommer 'joursFeries.ini' avec la m&ecirc;me synthaxe que le fichier php.ini<br/>";
	     	echo "Vous pouvez renommer le fichier 'joursFeries.ini.sample'<br/>";
	     	exit();
	     } 
    	// ==> Fin de chargement du fichier des jours feries
     
     	// Controle les arguments d'instanciation
		$i = func_num_args();        
		switch ($i) {
		    case 0:
		        $this->_dateDeb = '01-01-'.date('Y');
       			$this->_dateFin = '31-12-'.date('Y');
		        break;
		    case 2:
		        if (strtotime ($date_fin) - strtotime ($date_deb) < 0) {
		          $this->_dateDeb = $date_fin;
		          $this->_dateFin = $date_deb;
		        }else{
			      $this->_dateDeb = $date_deb;
       			  $this->_dateFin = $date_fin;
		        }
		        break;
		    default:
		       echo 'Les arguments d\'instanciations sont incorrects<br/>';
		       echo 'Sans argument le calendrier s\'&eacute;tendra du 1er janvier au 31 d&eacute;cembre de l\'ann&eacute;e en cours<br/>';
		       echo '<br/>';
		       echo 'usage: $ma_variable = new Calendrier()<br/>';
	           echo 'usage: $ma_variable = new Calendrier(\'date_deb\',\'date_fin\');';
	           exit();
		}
		// ==> Fin de controle les arguments d'instanciation
		
		// ==> initialisation des variables		
		$this->_lesJours = $this->jours();
		$this->_lesWeekends = $this->weekends();
		$this->_lesAnnees = $this->annees();
		$this->_lesFeriesFixes = $this->feriesFixes();
		$this->_lesFeriesVariables = $this->feriesVariables();
		$this->_tousLesFeries = $this->tousLesFeries();
		$this->_toutLeCalendrier = $this->toutLeCalendrier();

      } 
     
/**
* Calcule tous les jours de la periode demandees
*
* @param void
* @return array
*/      
	private function jours(){
		 $date1= strtotime($this->_dateDeb);
	     $date2= strtotime($this->_dateFin);	    
	     $nbjour=($date2-$date1)/60/60/24;
	    
	     for($i=1;$i<=$nbjour+1;$i++){
	     	if($this->displayDate[unixTime]=='0'){
	     		$numDay=jddayofweek(unixtojd($date1));
	     		$jours[date('d-m-Y',$date1)]=$this->labelJour($numDay);
	     	}else{
	     		$numDay=jddayofweek(unixtojd($date1));
				$jours[$date1]=$this->labelJour($numDay);
	     	}
				$date1= strtotime('+1 day', $date1);
	     }	     
	     return $jours;
	}


/**
* Calcule tous les weekends de la periode demandee
*
* @param void
* @return array
*/
	private function weekends(){
		$lesJours = $this->_lesJours;
	
		foreach ($lesJours as $key=>$value) {
			if($this->displayDate[unixTime]=='0'){
				if(jddayofweek(unixtojd(strtotime($key)))==0) {$weekend[$key]=$this->labelJour(jddayofweek(unixtojd(strtotime($key))));}
				if(jddayofweek(unixtojd(strtotime($key)))==6) {$weekend[$key]=$this->labelJour(jddayofweek(unixtojd(strtotime($key))));}
			}else{
				if(jddayofweek(unixtojd($key))==0) {$weekend[$key]=$this->labelJour(jddayofweek(unixtojd($key)));}
				if(jddayofweek(unixtojd($key))==6) {$weekend[$key]=$this->labelJour(jddayofweek(unixtojd($key)));}
			}
		}
		unset($key);
		unset($value);
		
		return $weekend;
	}


/**
* Recupere les annees de la periode demandee
*
* @param void
* @return array
*/
	private function annees(){
		$lesJours = $this->_lesJours;
		
		$i=0;
		foreach ($lesJours as $key=>$value) {
			if($this->displayDate[unixTime]=='0'){
		    	$anneeTmp = date('Y',strtotime($key));
			}else{
				$anneeTmp = date('Y',$key);
			}
		    if (!in_array($anneeTmp, $annee)) {
			    $annee[$i]=$anneeTmp;
			    $i++;
			}
		}
		unset($key);
		unset($value);
		
		return $annee;
	}
	

/**
* Recupere les jours feriees fixes de la periode demandee
*
* @param void
* @return array
*/
	private function feriesFixes(){
		$lesJours = $this->_lesJours;
		$annee = $this->_lesAnnees;
		
		$feriesFixes=array();
		$joursFeriesFixes=$this->configFile['joursFeriesFixes'];	
		$feriesFixes=array();
		foreach ($annee as $value) {
			foreach ($joursFeriesFixes as $labelJour => $dateJour) {
				if($this->displayDate[unixTime]=='0'){
					$formatDate=$dateJour.'-'.$value;
				}else{
					$formatDate=strtotime($dateJour.'-'.$value);
				}
				if (in_array($formatDate, array_keys($lesJours))) {
					if($this->displayDate[unixTime]=='0'){
						$feriesFixes[$dateJour.'-'.$value]= $labelJour;
					}else{
						$feriesFixes[strtotime($dateJour."-".$value)]= $labelJour;
					}
				}
			}
			unset($labelJour);
			unset($dateJour);
		}
		unset($value);
		return $feriesFixes;
	}


/**
* Calcule le jour de Paques
*
* @param annee
* @return date formatee "d-m-Y"
*/
	private function paques($annee){
		$paques =  date("d-m-Y", easter_date($annee));
		$lundipaques = date("d-m-Y",strtotime('+1 day',  easter_date($annee)));
		return array($paques,$lundipaques);
	}
	

/**
* Calcule le jour de l'ascension
* Jour de paques + 39 jours
*
* @param annee
* @return date formatee "d-m-Y"
*/
	private function ascension($annee){
		$ascension = date("d-m-Y",easter_date($annee)+(60*60*24*39));
		return $ascension;
	}


/**
* Calcule le jour du lundi de Pentecote
* Jour de paques + 49 jours
*
* @param annee
* @return date formatee "d-m-Y"
*/	
	private function pentecote($annee){
		$pentecote = date("d-m-Y",easter_date($annee)+(60*60*24*49));
		$lundipentecote = date("d-m-Y",strtotime('+1 day', easter_date($annee)+(60*60*24*49)));
		return array($pentecote,$lundipentecote);
	}


/**
* Recupere les jours feriees variables de la periode demandee
*
* @param void
* @return array
*/
	private function feriesVariables(){
		$lesJours = $this->_lesJours;
		$annee = $this->_lesAnnees;
		
		$feriesVariables=array();	
		$joursFeriesVariables=$this->configFile['joursFeriesVariables'];
		
		foreach ($annee as $value) {
			if($this->displayDate[unixTime]=='0'){	
				if($joursFeriesVariables['lundi de Paques']=='1'){
				$tmp = $this->paques($value);
				$feriesVariablesTmp[$tmp[0]]='P&acirc;ques';
				$feriesVariablesTmp[$tmp[1]]='lundi de P&acirc;ques';
				}
				if($joursFeriesVariables[Ascension]=='1'){
				$feriesVariablesTmp[$this->ascension($value)]='Ascension';
				}
				if($joursFeriesVariables['lundi de Pentecote']=='1'){
				$tmp = $this->pentecote($value);
				$feriesVariablesTmp[$tmp[0]]='Pentecote';
				$feriesVariablesTmp[$tmp[1]]='lundi de Pentecote';	
				}
				
			}else{
			
				if($joursFeriesVariables['lundi de Paques']=='1'){
				$tmp = $this->paques($value);
				$feriesVariablesTmp[$tmp[0]]='P&acirc;ques';
				$feriesVariablesTmp[$tmp[1]]='lundi de P&acirc;ques';
				}
				if($joursFeriesVariables[Ascension]=='1'){
				$feriesVariablesTmp[strtotime($this->ascension($value))]='Ascension';
				}
				if($joursFeriesVariables['lundi de Pentecote']=='1'){
				$tmp = $this->pentecote($value);
				$feriesVariablesTmp[$tmp[0]]='Pentecote';
				$feriesVariablesTmp[$tmp[1]]='lundi de Pentecote';	
				}
			}		 
		}
		unset($value);
		
		$feriesVariables=array();
		foreach ($feriesVariablesTmp as $key => $label) {
			if (in_array($key, array_keys($lesJours))) {
				$feriesVariables[$key]=$label;
			}
		}	
		unset($key);
		unset($label);
		
		return $feriesVariables;
	}


/**
* Recupere tous les jours feriees fixes et variables de la periode demandee
*
* @param void
* @return array
*/
	private function tousLesFeries(){
		
		$feries=array();
		
		// dates et labels
		$joursFeriesVariables=$this->_lesFeriesVariables;
		$joursFeriesFixes=$this->_lesFeriesFixes;
		
		// Que les dates
		$listeDatesFixes=array_keys($joursFeriesFixes);
		$listeDatesVariables=array_keys($joursFeriesVariables);	
			
					
		 if($this->displayDate[unixTime]=='0'){
			foreach ($listeDatesFixes as $key=>$value) {
				$listeDatesFixes[$key]=strtotime($value);
			}
			unset($key);
			unset($value);
						
			foreach ($listeDatesVariables as $key=>$value) {
				$listeDatesVariables[$key]=strtotime($value);
			}
			unset($key);
			unset($value);
			
			if(count($listeDatesFixes)>0 AND count($listeDatesVariables)>0){
				$toutesDates=array_merge($listeDatesFixes,$listeDatesVariables);
				$tousLabel=array_merge($joursFeriesFixes,$joursFeriesVariables);
				$feries=array_combine($toutesDates,$tousLabel);
				
			}else{
				if(count($listeDatesFixes)==0){
					$toutesDates=$listeDatesVariables;
					$tousLabel=$joursFeriesVariables;
					$feries=array_combine($toutesDates,$tousLabel);
					
				}else{
					$toutesDates=$listeDatesFixes;
					$tousLabel=$joursFeriesFixes;
					$feries=array_combine($toutesDates,$tousLabel);
				}
			}
			// On trie sur les dates (keys) au format timestamp unix
			// puis on les convertit en date formatee "d-m-Y"	
			ksort($feries);			
			$tmp1=array_keys($feries);      
	       	$tmp2=array_values($feries);
	       	foreach ($tmp1 as $key=>$value) {
					$tmp3[$key]=date("d-m-Y",$value);
				}
			unset($key);
			unset($value); 
	       	$feries=array_combine($tmp3,$tmp2);
	       	       
		}else{

			if(count($listeDatesFixes)>0 AND count($listeDatesVariables)>0){
				$toutesDates=array_merge($listeDatesFixes,$listeDatesVariables);
				$tousLabel=array_merge($joursFeriesFixes,$joursFeriesVariables);
				$feries=array_combine($toutesDates,$tousLabel);			
			}else{
				if(count($listeDatesFixes)==0){
					$feries=$joursFeriesVariables;			
				}else{
					$feries=$joursFeriesFixes;
				}
			}
			
			ksort($feries);			
		}
		return $feries;
	}
	

/**
* Toutes les dates et labels des dates dans un tableau de la periode demandee
*
* @param void
* @return array
*/
	private function toutLeCalendrier(){
		$lesJours=$this->_lesJours;
		$lesWeekends=$this->_lesWeekends;
		$lesAnnees=$this->_lesAnnees;
		$tousLesFeries=$this->_tousLesFeries;
		$datesFeries=array_keys($tousLesFeries);
		
		foreach($lesAnnees as $annee){
			foreach ($lesJours as $keyJours=>$valueJours) {
		    	if (date("Y",strtotime($keyJours)) == $annee) {	
		    		$anneeTmp = date("Y",strtotime($keyJours));		    		
					$moisTmp = date("m",strtotime($keyJours)); 			
					$joursTmp = date("j",strtotime($keyJours));
					$joursTmp2 = date("d-m-Y",strtotime($keyJours)); 			
					if (!in_array($joursTmp2, $datesFeries)) {				    
					    $explodeCalendar[$annee][$moisTmp][$joursTmp]=$valueJours;
					}
					else{
						$explodeCalendar[$annee][$moisTmp][$joursTmp][$valueJours]=$tousLesFeries[$joursTmp2];
					}			
		    	}
			}
		}
		
		return $explodeCalendar;	
	}
	
	
		
/**
* Acces aux attributs prives du calendrier
*
* @param nom de l'attribut
* @return array
*/ 
	public function __get($nameAttribut) {
	    $temp='_'.$nameAttribut;
	    return $this->$temp;
	  }


/**
* Converti le label des jours
*
* @param int valeur numerique du jour entre 0 et 6
* @return string chaine de caracteres du jour
*/ 
	public function labelJour($numJour){
		$test=preg_match("/^0/",$numJours);		
		if($test){$numJour=preg_replace('/^0/',"", $numJour);}
		
		$strJours = $this->configFile['labelsJours'];	
		return $strJours[$numJour];			
	}
	
		  
/**
* Conversion des mois numériques en chaine de caracteres
*
* @param int valeur numerique du mois entre 1 et 12
* @return string chaine de caracteres du mois
*/ 	  
	
	public function labelMois($numMois) {
		$test=preg_match("/^0/",$numMois);		
		if($test){$numMois=preg_replace('/^0/',"", $numMois);}
		
		$strMois = $this->configFile['labelsMois'];	
		return $strMois[$numMois];	
	  }
	  
}
?>

==> Config

; Ceci est un fichier de configuration
; Les commentaires commencent par ';', comme dans php.ini

[fuseauHoraire]
; Fixe le fuseau horaire à utiliser
; par defaut c'est celui du php.ini qui sera utilisé
; liste des fuseaux supportés : http://www.php.net/manual/fr/timezones.php
timezone=Europe/Paris

[displayDate]
; Permet de choisir le choix du format de date utilisé
; ATTENTION ne pas changer le format une fois que le calendrier est utilisé
; 1 = Fomat Unix timestamp.
; 0 = Format lisible par l'humain (j-m-Y)
; 1 = par défaut
unixTime=0

[labelsJours]
; Convertie les jours numériques en équivalent en chaine de caractère
0=Di
1=Lu
2=Ma
3=Me
4=Je
5=Ve
6=Sa

[labelsMois]
; Convertie les mois numériques en équivalent en chaine de caractère
1=Janvier
2=Fevrier
3=Mars
4=Avril
5=Mai
6=Juin
7=Juillet
8=Aout
9=Septembre
10=Octobre
11=Novembre
12=Decembre


[joursFeriesFixes]
;  ==== ATTENTION =====
; indiquez le jour et le mois du jour ferie sur 2 digits (jj-mm)

Jour de l'an=01-01
Fete du travail=01-05
8 mai 1945=08-05
Fete Nationale=14-07
Assomption=15-08
La Toussaint=01-11
Armistice=11-11
Noel=25-12

[joursFeriesVariables]
; En cas de supression du ou des jours feries variable
; 0 = férie supprime
; 1 = férié
; 0 = par defaut

lundi de Paques=1
Ascension=1
lundi de Pentecote=1


 Conclusion

Le niveau du script? je ne sais pas à vous de me dire.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

05 octobre 2010 15:45:25 :
correction orthographique et précision
08 octobre 2010 13:28:35 :
correction de variable pour évaluer la date de début et fin du calendrier
11 octobre 2010 15:53:53 :
Ajout de méthodes publiques (conversion de mois et jours en chaine de caractère, un array qui résume tout le calendrier) Correction de date fériée (lundi de paque et lundi de pentecote) Ajout de script démo pour générer du html prise en compte de la time zone test du chargement du module calendar nouveau paramètre du fichier de configuration.

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

REDIMENSIONNEMENT D'IMAGE PHP par JStevens
Source avec Zip MY.DEVIANTART API par inwebo
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42
CLASS CALENDRIER AVEC AFFICHAGE D'UN INTERVALE DE JOURS DÉFI... par caviar
Source avec Zip Source avec une capture GÉNÉRATEUR D'IMAGES GIF AFFICHANT UN CALENDRIER TYPE FEUILLE... par webrunner

Commentaires et avis

Commentaire de neigedhiver le 05/10/2010 18:48:56

Salut,

Ok pour l'exercice... Je vais donc m'adonner à celui que j'aime sur ce site : critiquer ^^

Dans le constructeur, tu utilises echo si le fichier de configuration n'est pas trouvé. C'est une mauvaise chose, parce que tu ne laisses pas à l'utilisateur la possibilité de gérer lui-même et comme il l'entend les erreurs qui sont produites. Le mieux est de lever une exception. Cela aura pour effet d'interrompre l'exécution du code de la classe, donc son instanciation (ce que tu fais avec exit). L'exception sera attrapable avec un bloc try...catch et pourra être gérée comme l'utilisateur le souhaite (par exemple, enregistrer l'erreur dans un fichier de log, envoyer un mail pour prévenir l'admin, afficher une erreur qui n'indique pas d'informations sur les fichiers, etc). QUant au message d'erreur associé à l'exception, l'utilisateur sera libre d'en faire ce qu'il veut.

Au lieu de compter les arguments, tu devrais utiliser des valeurs par défaut (NULL par exemple) et tester ces valeurs. C'est un peu moins lourd et quand même plus esthétique.

On vient d'avoir un grand débat sur l'utilisation de strtotime() sur le forum. Depuis PHP5.1, le fait de ne pas préciser le fuseau horaire provoque une erreur (qu'on peut ne pas afficher avec error_reporting(0), mais c'est crade). Il faut utiliser date_default_timezone_set() pour définir le fuseau horaire que PHP utilisera (sinon, il prendra le fuseau horaire par défaut dans le php.ini, mais déclenchera quand même l'erreur).

De même, si les arguments sont incorrects, plutôt que d'écrire du texte, il est préférable de lever une exception. Il en existe même une faite exprès pour ce cas précis : BadMethodCallException. Si les arguments ne sont pas du type attendu (mauvais format de date, etc), il existe InvalidArgumentException. Ces exceptions spécialisées permettent au développeur de contrôler le plus finement possible les erreurs qui surviennent lors de l'exécution de son code.

Tu utilises, entre autres, la fonction easter_date() qui nécessite que l'extension calendar soit installée. C'est le cas sur Windows par défaut, mais pas sur Linux/Unix... Tu devrais au début de ton script vérifier que toutes les fonctions dont tu as besoin sont disponibles (avec function_exists('easter_date') par exemple, ou, plus rigoureux : extension_loaded('calendar'))

J'ai pas regardé plus en détails, ni testé. Au niveau du code, c'est propre, lisible, commenté.
Quitte à faire de l'objet, je pense qu'il peut être intéressant d'utiliser l'objet DateTime.

Voilà voilà.

Commentaire de beemoon le 08/10/2010 13:25:15

Merci pour toutes ces remarques très instructives. Je ne me suis pas encore aventuré sur les exceptions... chaque chose en son temps.

Le coup du easter je ne savais pas car sur MAMP sous OSX c'est présent donc je ne pensais pas que la fonction pouvait ne pas etre disponible.

Je regarde pour le reste (strtotime, DateTime...)

Commentaire de neigedhiver le 08/10/2010 13:47:52

Concernant les exceptions, rien de terrible. Au lieu d'écrire du texte avec echo, il suffit de faire ça :

throw new Exception("Message d'erreur");

C'est à l'utilisateur de gérer l'exception que tu as levée. Concrètement, pour ce cas précis, tu n'as pas "besoin" d'en savoir plus => tu pourras prendre le temps plus tard de te pencher dessus plus sérieusement, c'est pas un soucis ;)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

class,PDF,XLS et boucles..... [ par booth ] bonjour!j'ai un méga problème...je dois générer un PDF et une grillle excel toutes deux issues d'un moteur de recherche...pour le moteur de recherche Retouches sur un scripts [ par apz ] salut,ce script php, un guestbook, est le livre d'or que je cherchais.mais voila il se base sur les Class, que je ne connais pas desormais.alors je vo Je trouve pas l'erreur sur mon script [ par Akash ] Salut à tous j'espère que vous pourrez m'aider. Voila le problème :Pour mon script de calendrier evenementiel j'ai besoin d'afficher des évènements pa Calendrier dynamique [ par pyranhaz ] Bonjour,je cherche à me faire un calendrier dynamique dans lequel un simple fichier de création normal de calendrier (les 12 mois de l'année, les 30 o fatal error sur chargement de class [ par fabrice_pi ] salut à tous,j'utilise une classe PHP pour faire mes taleaux en html. depuis peu j'ai l'erreur suivante :Fatal error: Cannot instantiate non-existent problemes de lien dans un calendrier [ par hysteria74000 ] qulequ'un peut me dire pourquoi mes liens, dans mon calendrier, SUIVANT et PRECEDENT ne fonctionnent pas.Voici le code php::$lien=date("Y+m+d", mktime Class POO retourné le nom de l'objet [ par MeTh ] Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci Include, class et array [ par Hades5k ] Bonjour! J'ai un petit problème à utiliser un array dans un fichier que j'inclus... voici un peu le code : &lt;?php $classNames = array(); include_onc Un calendrier ? [ par Anthotill ] Salut à tous !Je voudrais savoir si vous connaisseriez un bon script de calendrier, ou l'on peut ajouter un évenement en étant l'administrateur seulem scripts calendrier evenements [ par aquewel ] est ce que quelqu'un connait un script qui permet de gérer des evenements par periodicité ??????? tous les premiers L | M | M | J | V | S | D de chaqu


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales