Subversion Repositories Applications.gtt

Rev

Rev 2 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 jpm 1
<?php
2
 
3
// +------------------------------------------------------------------------------------------------------+
4
// | PHP version 4.1                                                                                      |
5
// +------------------------------------------------------------------------------------------------------+
6
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
7
// +------------------------------------------------------------------------------------------------------+
8
// | This library is free software; you can redistribute it and/or                                        |
9
// | modify it under the terms of the GNU Lesser General Public                                           |
10
// | License as published by the Free Software Foundation; either                                         |
11
// | version 2.1 of the License, or (at your option) any later version.                                   |
12
// |                                                                                                      |
13
// | This library is distributed in the hope that it will be useful,                                      |
14
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
15
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
16
// | Lesser General Public License for more details.                                                      |
17
// |                                                                                                      |
18
// | You should have received a copy of the GNU Lesser General Public                                     |
19
// | License along with this library; if not, write to the Free Software                                  |
20
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
21
// +------------------------------------------------------------------------------------------------------+
22
// | Auteur : Dorian Bannier (dbannier@aol.com)                             	|
23
 
24
// |@author ABDOOL RAHEEM shaheen <shaheenar50@hotmail.com>                                                 |
25
// |@version 3                                                                                            |
26
 
5 jpm 27
require_once 'HTML/Table.php';
28
require_once 'gtt_config.inc.php';
29
require_once CHEMIN_LANGUES.'gtt_langue_fr.inc.php';
2 jpm 30
 
31
/**
32
*classe calendrier pour gerer le calendrier pour un mois et une annee
33
*donne
34
*@param annee
35
*@param mois
36
*@param premier jour du mois
37
*@param semaine
38
*@param l'url du resultat affiche
39
*@param liste de noms des jours
40
*@param liste de noms des mois
41
*@param liste des jours feries du mois
42
*/
5 jpm 43
class Calendrier {
44
	var $annee=null;
45
	var $mois=null;
46
	var $jour=null;
47
	var $semaine=null;
48
	var $url =null;
49
	var $nom_jours=array();
50
	var $nom_mois=array();
51
	var $liste_feries=array();
52
	/** contient le nom des variables que recevra l'url spécifié
53
	* @var string
54
	*/
55
	var $var_jour = "jour";
56
	var $var_mois = "mois";
57
	var $var_annee = "annee";
2 jpm 58
 
5 jpm 59
	/**
60
	*Constructeur de la classe calendrier
61
	*toutes les variables sont initialises 	avec les donnees
62
	*de la date du jour si on ne passe aucune date en parametre
63
	*sinon on initialise le calendrier avec
64
	*@param semaine
65
	*@param annee
66
	*/
67
	function Calendrier($url,$semaine,$annee)
68
	{
69
		$tableau=&Calendrier::LundiEtDimancheSemaine($semaine,$annee);
70
		$this->semaine=$semaine;
71
		$this->mois=date('m',mktime(0,0,0,1,$tableau[0],$annee));
72
		$this->jour=date('d',mktime(0,0,0,1,$tableau[0],$annee));
73
		$this->annee=date('Y',mktime(0,0,0,1,$tableau[0],$annee));
74
		//$this->annee=$annee;
75
		$this->url=$url;
76
		$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);
77
		$this->nom_mois=array(1 => "Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet",
78
		"Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre");
79
		$this->liste_feries =&Calendrier::calculJoursFeries($this->annee);
80
		echo date('M',mktime(0,0,0,1,$tableau[0],$annee));
81
		echo " $this->annee";
82
	}
2 jpm 83
 
5 jpm 84
	/**
85
	*Méthode calculant les dates des jours feries en france
86
	*renvoie un tableau contenant la liste de dates par mois
87
	*les dates sont de la forme timestamp unix
88
	*
89
	*@param $annee
90
	*@return tableaude dates
91
	*/
92
	function calculJoursFeries($annee)
93
	{
94
		$paques=&Calendrier::paques($annee);
95
		$ascension=&Calendrier::ascension($annee);
96
		$pentecote=&Calendrier::pentecote($annee);
97
 
98
		$tab=array(	mktime(0,0,0,1,1,$annee),
99
					$paques,
100
					mktime(0,0,0,5,1,$annee),
101
					mktime(0,0,0,5,8,$annee),
102
					$ascension,
103
					$pentecote,
104
					mktime(0,0,0,7,14,$annee),
105
					mktime(0,0,0,8,15,$annee),
106
					mktime(0,0,0,11,1,$annee),
107
					mktime(0,0,0,11,11,$annee),
108
					mktime(0,0,0,12,25,$annee));
109
		return $tab;
110
	}
2 jpm 111
 
112
/**
113
*fonction calculant le premier jour du mois
114
*@param: annee, mois
115
*/
116
 
117
function premierJourMois($argMois,$argAnnee)
118
{
119
 $intPremierJour = date("w",mktime(0,0,0,$argMois,1,$argAnnee));
120
 if($intPremierJour == 0) $intPremierJour = 7; // si c'est un dimanche
121
 return $intPremierJour;
122
}
123
 
124
/**
125
*fonction calculat le dernier jour du mois
126
*@param : annee, mois
127
*renvoie un entier
128
*/
129
function dernierJourMois($argMois,$argAnnee)
130
{
131
    $h=&Calendrier::nbJourMois($argMois,$argAnnee);
132
    $intDernierJour=date("w",mktime(0,0,0,$argMois,$h,$argAnnee));
133
    if($intDernierJour == 0) $intDernierJour = 7; // si c'est un dimanche
134
     return $intDernierJour;
135
}
136
/**
137
*fonction calculant le nombre de jours dans un mois
138
*@param annee, mois
139
*/
140
function nbJourMois($argMois,$argAnnee)
141
{
142
 return date("t", mktime(0,0,0,$argMois,1,$argAnnee));
143
 }
144
 
145
 
146
 
147
/*
148
**fonction calculant la date du lundi de paques pour une annee
149
*renvoie un timestamp
150
*/
151
 
152
function paques($annee)
153
{
154
   $date_paques=easter_date($annee);
155
   $lundi_paques=mktime(date("H", $date_paques),
156
   date("i", $date_paques),
157
   date("s", $date_paques),
158
   date("m", $date_paques),
159
   date("d", $date_paques) + 1,
160
   date("Y", $date_paques)
161
  );
162
 
163
  return $lundi_paques;
164
 
165
}
166
/*
167
*fonction calculant la date du lundi de l'ascension
168
*renvoie un timestamp
169
*renvoie la date
170
*/
171
function ascension($annee)
172
{
173
   $date_paques=easter_date($annee);
174
   $date_ascension = mktime(date("H", $date_paques),
175
  date("i", $date_paques),
176
  date("s", $date_paques),
177
  date("m", $date_paques),
178
  date("d", $date_paques) + 39,
179
  date("Y", $date_paques)
180
  );
181
  return $date_ascension;
182
 
183
 
184
}
185
 
186
/*
187
*fonction calculant la date du lundi de la pentecote
188
*renvoie un timestamp
189
*renvoie cette derniere
190
*/
191
function pentecote($annee)
192
{
193
    $date_paques=easter_date($annee);
194
    $date_ascension=&Calendrier::ascension($annee);
195
    $date_pentecote = mktime(date("H", $date_ascension),
196
  date("i", $date_ascension),
197
  date("s", $date_ascension),
198
  date("m", $date_ascension),
199
  date("d", $date_ascension) + 11,
200
  date("Y", $date_ascension)
201
  );
202
  return $date_pentecote;
203
}
204
 
205
/**
206
*fonction affichant un calendrier naviguable par semaine
207
*option pour cliquer sur une semaine donnee
208
*utilisation de la bibliotheque HTML/TABLE de PEAR
209
*@param numero de semaine et annee
210
*/
211
 
212
function afficherCalendrier($annee)
213
{
214
  $id="CALENDRIER";
215
  $text="<div id=\"calendrier\">";
216
  //initialisation des donnees
217
  $intPremierJour = &Calendrier::premierJourMois($this->mois,$this->annee);
218
  $intNbJoursMois = &Calendrier::nbJourMois($this->mois,$this->annee);
219
  $prevMonth=&Calendrier::prevMonth($this->mois,$this->annee);
220
  $intNbJourPrec=&Calendrier::nbJourMois($prevMonth[0],$prevMonth[1]);
221
  $intDernierJour=&Calendrier::dernierJourMois($this->mois,$this->annee);
222
  //calcul du lundi et dimanche de la semaine courante
223
  //calcul de l'annee
224
 
225
  $tabLundiDimanche=&Calendrier::lundiEtDimancheSemaine($this->semaine,$annee);
226
 //creation de la table HTML representant le calendrier
227
  $tableAttrs = array("class" =>$id,"width" => "200");
228
 
229
  $table = new HTML_Table($tableAttrs);
230
  $table -> setAutoGrow(true);
231
 
232
  $table->addRow($this->nom_jours);
233
 
234
 
235
  //remplissage de la premiere ligne
236
  //test si on est dans la semaine courante
237
  //si dimanche egale a la fin de la semaine
238
 $semCourante=(date('d',mktime(0,0,0,1,$tabLundiDimanche[1],$annee))==(7-$intPremierJour+1));
239
 $p=1;
240
 
241
 for($i=1; $i<=7;$i++)
242
 {
243
    if ($i<$intPremierJour and $semCourante)//mois prec et semaine courante
244
    {
245
	$elem[$i-1]="<div id=\"moisprecedent\">".($intNbJourPrec-$intPremierJour+$i+1);
246
    }elseif ($i<$intPremierJour and !$semCourante)//mois prec et pas semaien courante
247
    {
248
	$semaineL=date('W',mktime(0,0,0,$prevMonth[0],($intNbJourPrec-$intPremierJour+$i+1),$prevMonth[1]));
249
	$elem[$i-1]= "<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL"."&annee=$prevMonth[1]".">".($intNbJourPrec-$intPremierJour+$i+1)."</a>";
250
    }elseif($i>=$intPremierJour and $semCourante)//mois courant et semaine courante
251
    {
252
	$elem[$i-1] = "<div id=\"jourcourant\">".$p."</div>";
253
	$p++;
254
    }else {//mois courant et pas semaine courante
255
	 $semaineL=date('W',mktime(0,0,0,$this->mois,$p,$this->annee));
256
	 $elem[$i-1] = "<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL";
257
	 $elem[$i-1] .="&annee=".$this->annee.">".$p."</a>";
258
	 $p++;
259
       }
260
 }
261
  $table->addRow($elem);
262
 
263
  //remplissage du reste des lignes
264
  $i=0; //indice du tableau
265
  //lundi de la semaien courante
266
 // $t=&Calendrier::lundiEtDimancheSemaine($this->semaine,$this->annee);
267
  $lundiCourant=date('d',mktime(0,0,0,1,$tabLundiDimanche[0],$annee));
268
  $semCourante2=0;
269
  for ($f=$p; $f<=$intNbJoursMois ; $f++)
270
  {
271
 
272
   if ($f==$lundiCourant and $i==0)
273
   {
274
       $semCourante2=1;//booleen
275
   }
276
   //calcul de la semaine courante
277
   $semaineL2=date('W',mktime(0,0,0,$this->mois,$f,$this->annee));
278
 
279
   if ($semCourante2==1)
280
   {
281
       $elem[$i]= "<div id=\"jourcourant\">".$f."</div>";
282
   }else{
283
       $elem[$i]="<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL2";
284
       $elem[$i].="&annee=".$this->annee.">".$f."</a>";
285
   }
286
   if ($i==6)
287
   {
288
      $i=0;
289
      if ($semCourante2==1)
290
      {
291
	  $semCourante2=0;
292
      }
293
      $table->addRow($elem);
294
   }else $i++;
295
  }
296
 
297
  //remplissage de la derniere ligne
298
  $semaineL3=date('W',mktime(0,0,0,$this->mois,$intNbJoursMois,$this->annee));
299
  if ($semCourante2==0)
300
    {
301
	for ($d=$i; $d<=6;$d++)
302
     {
303
	$s=$d-$i+1;
304
	$elem[$d]="<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL2";
305
	$elem[$d].="&annee=".$this->annee.">".$s."</a>";
306
     }
307
     }else {
308
	for ($d=$i; $d<=6;$d++)
309
     {
310
	$elem[$d]= ($d-$i+1);
311
     }
312
     }
313
   $table->addRow($elem);
314
 
315
   $text.=$table->toHtml();
316
   $text .= "</div>";
317
   return $text;
318
 
319
}
320
 
321
   /**
322
   *fonction calculant la semaine suivante
323
   */
324
   function nextWeek($semaine, $annee)
325
   {
326
    if ($this->semaine==53)
327
    {
328
	$tab[0]=$nextWeek=1;
329
	$tab[1]=$nextAnnee=$this->annee+1;
330
    }else {
331
      $tab[0]=$nextWeek=$this->semaine+1;
332
      $tab[1]=$nextAnnee=$this->annee;
333
    }
334
    return $tab;
335
   }
336
   /**
337
   *fonction caluculant le mois suivant
338
   *renvoie l'annee et le mois suivant sous forme de chiffre
339
   *dans un tableau
340
   */
341
   function nextMonth($mois,$annee)
342
   {
343
    if ($mois==12)
344
    {
345
	$tab[0]=$nextMois=1;
346
	$tab[1]=$nextAnnee=$annee+1;
347
    }else
348
    {
349
	$tab[0]=$nextMois=$mois+1;
350
	$tab[1]=$nextAnnee=$annee;
351
    }
352
    return $tab;
353
   }
354
 
355
   /**
356
   *fonction calculant le mois precedent
357
   *renvoie l'annee et le mois precedent sous forme de chiffre
358
   */
359
   function prevMonth($mois,$annee)
360
   {
361
     if ($mois==1)
362
    {
363
	$tab[0]=$prevMois=12;
364
	$tab[1]=$prevAnnee=$annee-1;
365
    }else
366
    {
367
	$tab[0]=$prevMois=$mois-1;
368
	$tab[1]=$prevAnnee=$annee;
369
    }
370
    return $tab;
371
   }
372
 
373
   /**
374
   *fonction renvoyant la date du lundi d'une semaine
375
   *a partir du numero de semaine
376
   *@param numero de semaine
377
   *@praam annee
378
   *@return un tableau contenat le timestamp unix de lenudi et dimanche
379
   *de la semaine en question
380
   */
381
function lundiEtDimancheSemaine($semaine,$annee) {
382
 
383
if ((date("w", mktime(0,0,0,1,1,$annee)) <= 4) && (date("w", mktime(0,0,0,1,1,$annee)) != 0))
384
 {
385
   $nbre_jour = ($semaine-1)*7;
386
  }else{
387
    $nbre_jour = ($semaine)*7;
388
        }
389
 
390
if (date("w", mktime(0,0,0,1,1,$annee)) == 0)
391
{
392
  $nbre_jour +=7;
393
}else{
394
$nbre_jour +=7-((date("w", mktime(0,0,0,1,1,$annee))-1)%7);
395
}
396
 
397
$nbre_jour_7 = $nbre_jour-6;
398
 
399
//$lundi = date("d-m-Y", mktime(0,0,0,1,$nbre_jour_7,$annee) );
400
//$dimanche = date("d-m-Y", mktime(0,0,0,1,$nbre_jour,$annee));
401
 
402
return array($nbre_jour_7,$nbre_jour);
403
}
404
/**
405
*fonction indiquant si une date est feriee ou non
406
*renvoie 1 si ferie
407
*0 sinon
408
*/
409
function isFerie($date)
410
{
411
   if (in_array($date,$this->liste_feries))
412
   {
413
       return 1;
414
   }else return 0;
415
  /* for($h==0;$h<count($this->liste_feries);$h++)
416
   {
417
    if ($date==$this->liste_feries[$h])
418
      {
419
	$res= 1;
420
      }
421
   }
422
   return $res;*/
423
 
424
}
425
 
426
}
427
?>