Rev 2 | Blame | Last modification | View Log | RSS feed
<?php// +------------------------------------------------------------------------------------------------------+// | PHP version 4.1 |// +------------------------------------------------------------------------------------------------------+// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |// +------------------------------------------------------------------------------------------------------+// | This library is free software; you can redistribute it and/or |// | modify it under the terms of the GNU Lesser General Public |// | License as published by the Free Software Foundation; either |// | version 2.1 of the License, or (at your option) any later version. |// | |// | This library 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 |// | Lesser General Public License for more details. |// | |// | You should have received a copy of the GNU Lesser General Public |// | License along with this library; if not, write to the Free Software |// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |// +------------------------------------------------------------------------------------------------------+// | Auteur : Dorian Bannier (dbannier@aol.com) |// |@author ABDOOL RAHEEM shaheen <shaheenar50@hotmail.com> |// |@version 3 |include_once 'HTML/Table.php';/***classe calendrier pour gerer le calendrier pour un mois et une annee*donne*@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{var $annee=null;var $mois=null;var $jour=null;var $semaine=null;var $url =null;var $nom_jours=array();var $nom_mois=array();var $liste_feries=array();/** contient le nom des variables que recevra l'url spécifié* @var string*/var $var_jour = "jour";var $var_mois = "mois";var $var_annee = "annee";/***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*/function Calendrier($url,$semaine,$annee){$tableau=&Calendrier::LundiEtDimancheSemaine($semaine,$annee);$this->semaine=$semaine;$this->mois=date('n',mktime(0,0,0,1,$tableau[0],$annee));$this->jour=date('d',mktime(0,0,0,1,$tableau[0],$annee));$this->annee=date('Y',mktime(0,0,0,1,$tableau[0],$annee));//$this->annee=$annee;$this->url=$url;$this->nom_jours=array (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 =&Calendrier::calculJoursFeries($this->annee);//echo $this->nom_mois[$this->mois];//date('M',mktime(0,0,0,1,$tableau[0],$annee));//echo " $this->annee";}/***fonction calculant les dates des jours feries en france*renvoie un tableau contenant la liste de dates par mois*les dates sont de la forme timestamp unix**@param $annee*@return tableaude dates*/function calculJoursFeries($annee){$paques=&Calendrier::paques($annee);$ascension=&Calendrier::ascension($annee);$pentecote=&Calendrier::pentecote($annee);$tab=array(mktime(0,0,0,1,1,$annee),$paques,mktime(0,0,0,5,1,$annee),mktime(0,0,0,5,8,$annee),$ascension,$pentecote,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;}/***fonction calculant le premier jour du mois*@param: annee, mois*/function premierJourMois($argMois,$argAnnee){$intPremierJour = date("w",mktime(0,0,0,$argMois,1,$argAnnee));if($intPremierJour == 0) $intPremierJour = 7; // si c'est un dimanchereturn $intPremierJour;}/***fonction calculat le dernier jour du mois*@param : annee, mois*renvoie un entier*/function dernierJourMois($argMois,$argAnnee){$h=&Calendrier::nbJourMois($argMois,$argAnnee);$intDernierJour=date("w",mktime(0,0,0,$argMois,$h,$argAnnee));if($intDernierJour == 0) $intDernierJour = 7; // si c'est un dimanchereturn $intDernierJour;}/***fonction calculant le nombre de jours dans un mois*@param annee, mois*/function nbJourMois($argMois,$argAnnee){return date("t", mktime(0,0,0,$argMois,1,$argAnnee));}/***fonction calculant la date du lundi de paques pour une annee*renvoie un timestamp*/function paques($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;}/**fonction calculant la date du lundi de l'ascension*renvoie un timestamp*renvoie la date*/function ascension($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;}/**fonction calculant la date du lundi de la pentecote*renvoie un timestamp*renvoie cette derniere*/function pentecote($annee){$date_paques=easter_date($annee);$date_ascension=&Calendrier::ascension($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;}/***fonction affichant un calendrier naviguable par semaine*option pour cliquer sur une semaine donnee*utilisation de la bibliotheque HTML/TABLE de PEAR*@param numero de semaine et annee*/function afficherCalendrier($annee){$id="CALENDRIER";$text=/*"</tr></td>".*/"<div id=\"calendrier\">";//initialisation des donnees$intPremierJour = &Calendrier::premierJourMois($this->mois,$this->annee);$intNbJoursMois = &Calendrier::nbJourMois($this->mois,$this->annee);$prevMonth=&Calendrier::prevMonth($this->mois,$this->annee);$intNbJourPrec=&Calendrier::nbJourMois($prevMonth[0],$prevMonth[1]);$intDernierJour=&Calendrier::dernierJourMois($this->mois,$this->annee);//calcul du lundi et dimanche de la semaine courante//calcul de l'annee$tabLundiDimanche=&Calendrier::lundiEtDimancheSemaine($this->semaine,$annee);//creation de la table HTML representant le calendrier$tableAttrs = array("class" =>$id,"width" => "300");//creation de la barre de navigation//semaine precedente$tabPrevWeek=&Calendrier::prevWeek();$text.="<a href=".$GLOBALS['urlBase'].GESTION_TRAVAIL."&semaine=";$text.=$tabPrevWeek[0]."&annee=".$tabPrevWeek[1].">";$text.="<<"."</a>";//semaine courante$text.='<button>';$text.=date('d/m/y',mktime(0,0,0,1,$tabLundiDimanche[0],$annee));$text.=' -- ';$text.=date('d/m/y',mktime(0,0,0,1,$tabLundiDimanche[1],$annee));$text.='</button>';//semaine suivante$tabNextWeek= &Calendrier::nextWeek();$text.="<a href=".$GLOBALS['urlBase'].GESTION_TRAVAIL."&semaine=";$text.=$tabNextWeek[0]."&annee=".$tabNextWeek[1].">";$text.=">>"."</a>";$table = new HTML_Table($tableAttrs);$table -> setAutoGrow(true);$table->addRow($this->nom_jours);//remplissage de la premiere ligne//test si on est dans la semaine courante//si dimanche egale a la fin de la semaine$semCourante=(date('d',mktime(0,0,0,1,$tabLundiDimanche[1],$annee))==(7-$intPremierJour+1));$p=1;for($i=1; $i<=7;$i++){if ($i<$intPremierJour and $semCourante)//mois prec et semaine courante{$elem[$i-1]="<div id=\"moisprecedent\">".($intNbJourPrec-$intPremierJour+$i+1);}elseif ($i<$intPremierJour and !$semCourante)//mois prec et pas semaien courante{$semaineL=date('W',mktime(0,0,0,$prevMonth[0],($intNbJourPrec-$intPremierJour+$i+1),$prevMonth[1]));$elem[$i-1]= "<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL"."&annee=$prevMonth[1]".">".($intNbJourPrec-$intPremierJour+$i+1)."</a>";}elseif($i>=$intPremierJour and $semCourante)//mois courant et semaine courante{$elem[$i-1] = "<div id=\"jourcourant\">".$p."</div>";$p++;}else {//mois courant et pas semaine courante$semaineL=date('W',mktime(0,0,0,$this->mois,$p,$this->annee));$elem[$i-1] = "<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL";$elem[$i-1] .="&annee=".$this->annee.">".$p."</a>";$p++;}}$table->addRow($elem);//remplissage du reste des lignes$i=0; //indice du tableau//lundi de la semaien courante// $t=&Calendrier::lundiEtDimancheSemaine($this->semaine,$this->annee);$lundiCourant=date('d',mktime(0,0,0,1,$tabLundiDimanche[0],$annee));$semCourante2=0;for ($f=$p; $f<=$intNbJoursMois ; $f++){if ($f==$lundiCourant and $i==0){$semCourante2=1;//booleen}//calcul de la semaine courante$semaineL2=date('W',mktime(0,0,0,$this->mois,$f,$this->annee));if ($semCourante2==1){$elem[$i]= "<div id=\"jourcourant\">".$f."</div>";}else{$elem[$i]="<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL2";$elem[$i].="&annee=".$this->annee.">".$f."</a>";}if ($i==6){$i=0;if ($semCourante2==1){$semCourante2=0;}$table->addRow($elem);}else $i++;}//remplissage de la derniere ligne$semaineL3=date('W',mktime(0,0,0,$this->mois,$intNbJoursMois,$this->annee));if ($semCourante2==0){for ($d=$i; $d<=6;$d++){$s=$d-$i+1;$elem[$d]="<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL2";$elem[$d].="&annee=".$this->annee.">".$s."</a>";}}else {for ($d=$i; $d<=6;$d++){$elem[$d]= ($d-$i+1);}}$table->addRow($elem);$text.=$table->toHtml();$text .= "</div>";return $text;}/***fonction calculant la semaine suivante*/function nextWeek(){if ($this->semaine==date('W',mktime(0,0,0,12,31,$this->annee))){$tab[0]=$nextWeek=1;$tab[1]=$nextAnnee=$this->annee+1;}else {$tab[0]=$nextWeek=$this->semaine+1;$tab[1]=$nextAnnee=$this->annee;}return $tab;}/***fonction calulant lasemaine precedeente*/function prevWeek(){if ($this->semaine==1){$tab[0]=$prevWeek=date('W',mktime(0,0,0,12,31,($this->annee-1)));$tab[1]=$prevAnnee=$this->annee-1;} else{$tab[0]=$prevWeek=$this->semaine -1 ;$tab[1]=$prevAnnee=$this->annee;}return $tab;}/***fonction caluculant le mois suivant*renvoie l'annee et le mois suivant sous forme de chiffre*dans un tableau*/function nextMonth(){if ($this->mois==12){$tab[0]=$nextMois=1;$tab[1]=$nextAnnee=$this->annee+1;}else{$tab[0]=$nextMois=$this->mois+1;$tab[1]=$nextAnnee=$this->annee;}return $tab;}/***fonction calculant le mois precedent*renvoie l'annee et le mois precedent sous forme de chiffre*/function prevMonth(){if ($this->mois==1){$tab[0]=$prevMois=12;$tab[1]=$prevAnnee=$this->annee-1;}else{$tab[0]=$prevMois=$this->mois-1;$tab[1]=$prevAnnee=$this->annee;}return $tab;}/***fonction renvoyant la date du lundi d'une semaine*a partir du numero de semaine*@param numero de semaine*@praam annee*@return un tableau contenat le timestamp unix de lenudi et dimanche*de la semaine en question*/function lundiEtDimancheSemaine($semaine,$annee) {if ((date("w", mktime(0,0,0,1,1,$annee)) <= 4) && (date("w", mktime(0,0,0,1,1,$annee)) != 0)){$nbre_jour = ($semaine-1)*7;}else{$nbre_jour = ($semaine)*7;}if (date("w", mktime(0,0,0,1,1,$annee)) == 0){$nbre_jour +=7;}else{$nbre_jour +=7-((date("w", mktime(0,0,0,1,1,$annee))-1)%7);}$nbre_jour_7 = $nbre_jour-6;//$lundi = date("d-m-Y", mktime(0,0,0,1,$nbre_jour_7,$annee) );//$dimanche = date("d-m-Y", mktime(0,0,0,1,$nbre_jour,$annee));return array($nbre_jour_7,$nbre_jour);}/***fonction indiquant si une date est feriee ou non*renvoie 1 si ferie*0 sinon*/function isFerie($date){if (in_array($date,$this->liste_feries)){return 1;}else return 0;}}?>