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
 
10 jpm 27
include_once 'HTML/Table.php';
2 jpm 28
 
29
/**
30
*classe calendrier pour gerer le calendrier pour un mois et une annee
31
*donne
32
*@param annee
33
*@param mois
34
*@param premier jour du mois
35
*@param semaine
36
*@param l'url du resultat affiche
37
*@param liste de noms des jours
38
*@param liste de noms des mois
39
*@param liste des jours feries du mois
40
*/
41
class Calendrier
42
{
43
 
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";
58
 
59
 
60
/**
61
*constructeur de la classe calendrier
62
*toutes les variables sont initialises 	avec les donnees
63
*de la date du jour si on ne passe aucune date en parametre
64
*sinon on initialise le calendrier avec
65
*@param semaine
66
*@param annee
67
*/
68
function Calendrier($url,$semaine,$annee)
69
{
70
    $tableau=&Calendrier::LundiEtDimancheSemaine($semaine,$annee);
71
    $this->semaine=$semaine;
72
    $this->mois=date('n',mktime(0,0,0,1,$tableau[0],$annee));
73
    $this->jour=date('d',mktime(0,0,0,1,$tableau[0],$annee));
74
    $this->annee=date('Y',mktime(0,0,0,1,$tableau[0],$annee));
75
    //$this->annee=$annee;
76
    $this->url=$url;
77
    $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);
78
    $this->nom_mois=array(1 => "Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet",
79
"Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre");
80
    $this->liste_feries =&Calendrier::calculJoursFeries($this->annee);
81
    //echo  $this->nom_mois[$this->mois];//date('M',mktime(0,0,0,1,$tableau[0],$annee));
82
    //echo " $this->annee";
83
}
84
 
85
/**
86
*fonction calculant les dates des jours feries en france
87
*renvoie un tableau contenant la liste de dates par mois
88
*les dates sont de la forme timestamp unix
89
*
90
*@param $annee
91
*@return tableaude dates
92
*/
93
 
94
function calculJoursFeries($annee)
95
{
96
  $paques=&Calendrier::paques($annee);
97
  $ascension=&Calendrier::ascension($annee);
98
  $pentecote=&Calendrier::pentecote($annee);
99
 
100
  $tab=array(mktime(0,0,0,1,1,$annee),
101
             $paques,
102
             mktime(0,0,0,5,1,$annee),
103
	     mktime(0,0,0,5,8,$annee),
104
	     $ascension,
105
	     $pentecote,
106
	     mktime(0,0,0,7,14,$annee),
107
	     mktime(0,0,0,8,15,$annee),
108
	     mktime(0,0,0,11,1,$annee),
109
	     mktime(0,0,0,11,11,$annee),
110
	     mktime(0,0,0,12,25,$annee));
111
 
112
return $tab;
113
 
114
 }
115
 
116
/**
117
*fonction calculant le premier jour du mois
118
*@param: annee, mois
119
*/
120
 
121
function premierJourMois($argMois,$argAnnee)
122
{
123
 $intPremierJour = date("w",mktime(0,0,0,$argMois,1,$argAnnee));
124
 if($intPremierJour == 0) $intPremierJour = 7; // si c'est un dimanche
125
 return $intPremierJour;
126
}
127
 
128
/**
129
*fonction calculat le dernier jour du mois
130
*@param : annee, mois
131
*renvoie un entier
132
*/
133
function dernierJourMois($argMois,$argAnnee)
134
{
135
    $h=&Calendrier::nbJourMois($argMois,$argAnnee);
136
    $intDernierJour=date("w",mktime(0,0,0,$argMois,$h,$argAnnee));
137
    if($intDernierJour == 0) $intDernierJour = 7; // si c'est un dimanche
138
     return $intDernierJour;
139
}
140
/**
141
*fonction calculant le nombre de jours dans un mois
142
*@param annee, mois
143
*/
144
function nbJourMois($argMois,$argAnnee)
145
{
146
 return date("t", mktime(0,0,0,$argMois,1,$argAnnee));
147
 }
148
 
149
 
150
 
151
/*
152
**fonction calculant la date du lundi de paques pour une annee
153
*renvoie un timestamp
154
*/
155
 
156
function paques($annee)
157
{
158
   $date_paques=easter_date($annee);
159
   $lundi_paques=mktime(date("H", $date_paques),
160
   date("i", $date_paques),
161
   date("s", $date_paques),
162
   date("m", $date_paques),
163
   date("d", $date_paques) + 1,
164
   date("Y", $date_paques)
165
  );
166
 
167
  return $lundi_paques;
168
 
169
}
170
/*
171
*fonction calculant la date du lundi de l'ascension
172
*renvoie un timestamp
173
*renvoie la date
174
*/
175
function ascension($annee)
176
{
177
   $date_paques=easter_date($annee);
178
   $date_ascension = mktime(date("H", $date_paques),
179
  date("i", $date_paques),
180
  date("s", $date_paques),
181
  date("m", $date_paques),
182
  date("d", $date_paques) + 39,
183
  date("Y", $date_paques)
184
  );
185
  return $date_ascension;
186
 
187
 
188
}
189
 
190
/*
191
*fonction calculant la date du lundi de la pentecote
192
*renvoie un timestamp
193
*renvoie cette derniere
194
*/
195
function pentecote($annee)
196
{
197
    $date_paques=easter_date($annee);
198
    $date_ascension=&Calendrier::ascension($annee);
199
    $date_pentecote = mktime(date("H", $date_ascension),
200
  date("i", $date_ascension),
201
  date("s", $date_ascension),
202
  date("m", $date_ascension),
203
  date("d", $date_ascension) + 11,
204
  date("Y", $date_ascension)
205
  );
206
  return $date_pentecote;
207
}
208
 
209
/**
210
*fonction affichant un calendrier naviguable par semaine
211
*option pour cliquer sur une semaine donnee
212
*utilisation de la bibliotheque HTML/TABLE de PEAR
213
*@param numero de semaine et annee
214
*/
215
 
216
function afficherCalendrier($annee)
217
{
218
  $id="CALENDRIER";
219
  $text=/*"</tr></td>".*/"<div id=\"calendrier\">";
220
  //initialisation des donnees
221
  $intPremierJour = &Calendrier::premierJourMois($this->mois,$this->annee);
222
  $intNbJoursMois = &Calendrier::nbJourMois($this->mois,$this->annee);
223
  $prevMonth=&Calendrier::prevMonth($this->mois,$this->annee);
224
  $intNbJourPrec=&Calendrier::nbJourMois($prevMonth[0],$prevMonth[1]);
225
  $intDernierJour=&Calendrier::dernierJourMois($this->mois,$this->annee);
226
  //calcul du lundi et dimanche de la semaine courante
227
  //calcul de l'annee
228
 
229
  $tabLundiDimanche=&Calendrier::lundiEtDimancheSemaine($this->semaine,$annee);
230
 
231
 //creation de la table HTML representant le calendrier
232
  $tableAttrs = array("class" =>$id,"width" => "300");
233
  //creation de la barre de navigation
234
  //semaine precedente
235
  $tabPrevWeek=&Calendrier::prevWeek();
236
  $text.="<a href=".$GLOBALS['urlBase'].GESTION_TRAVAIL."&semaine=";
237
  $text.=$tabPrevWeek[0]."&annee=".$tabPrevWeek[1].">";
238
  $text.="<<"."</a>";
239
 
240
 
241
  //semaine courante
242
  $text.='<button>';
243
  $text.=date('d/m/y',mktime(0,0,0,1,$tabLundiDimanche[0],$annee));
244
  $text.='  --  ';
245
  $text.=date('d/m/y',mktime(0,0,0,1,$tabLundiDimanche[1],$annee));
246
  $text.='</button>';
247
  //semaine suivante
248
  $tabNextWeek= &Calendrier::nextWeek();
249
  $text.="<a href=".$GLOBALS['urlBase'].GESTION_TRAVAIL."&semaine=";
250
  $text.=$tabNextWeek[0]."&annee=".$tabNextWeek[1].">";
251
  $text.=">>"."</a>";
252
 
253
  $table = new HTML_Table($tableAttrs);
254
  $table -> setAutoGrow(true);
255
 
256
  $table->addRow($this->nom_jours);
257
 
258
  //remplissage de la premiere ligne
259
  //test si on est dans la semaine courante
260
  //si dimanche egale a la fin de la semaine
261
 $semCourante=(date('d',mktime(0,0,0,1,$tabLundiDimanche[1],$annee))==(7-$intPremierJour+1));
262
 $p=1;
263
 
264
 for($i=1; $i<=7;$i++)
265
 {
266
    if ($i<$intPremierJour and $semCourante)//mois prec et semaine courante
267
    {
268
	$elem[$i-1]="<div id=\"moisprecedent\">".($intNbJourPrec-$intPremierJour+$i+1);
269
    }elseif ($i<$intPremierJour and !$semCourante)//mois prec et pas semaien courante
270
    {
271
	$semaineL=date('W',mktime(0,0,0,$prevMonth[0],($intNbJourPrec-$intPremierJour+$i+1),$prevMonth[1]));
272
	$elem[$i-1]= "<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL"."&annee=$prevMonth[1]".">".($intNbJourPrec-$intPremierJour+$i+1)."</a>";
273
    }elseif($i>=$intPremierJour and $semCourante)//mois courant et semaine courante
274
    {
275
	$elem[$i-1] = "<div id=\"jourcourant\">".$p."</div>";
276
	$p++;
277
    }else {//mois courant et pas semaine courante
278
	 $semaineL=date('W',mktime(0,0,0,$this->mois,$p,$this->annee));
279
	 $elem[$i-1] = "<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL";
280
	 $elem[$i-1] .="&annee=".$this->annee.">".$p."</a>";
281
	 $p++;
282
       }
283
 }
284
  $table->addRow($elem);
285
 
286
  //remplissage du reste des lignes
287
  $i=0; //indice du tableau
288
  //lundi de la semaien courante
289
 // $t=&Calendrier::lundiEtDimancheSemaine($this->semaine,$this->annee);
290
  $lundiCourant=date('d',mktime(0,0,0,1,$tabLundiDimanche[0],$annee));
291
  $semCourante2=0;
292
  for ($f=$p; $f<=$intNbJoursMois ; $f++)
293
  {
294
 
295
   if ($f==$lundiCourant and $i==0)
296
   {
297
       $semCourante2=1;//booleen
298
   }
299
   //calcul de la semaine courante
300
   $semaineL2=date('W',mktime(0,0,0,$this->mois,$f,$this->annee));
301
 
302
   if ($semCourante2==1)
303
   {
304
       $elem[$i]= "<div id=\"jourcourant\">".$f."</div>";
305
   }else{
306
       $elem[$i]="<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL2";
307
       $elem[$i].="&annee=".$this->annee.">".$f."</a>";
308
   }
309
   if ($i==6)
310
   {
311
      $i=0;
312
      if ($semCourante2==1)
313
      {
314
	  $semCourante2=0;
315
      }
316
      $table->addRow($elem);
317
   }else $i++;
318
  }
319
 
320
  //remplissage de la derniere ligne
321
  $semaineL3=date('W',mktime(0,0,0,$this->mois,$intNbJoursMois,$this->annee));
322
  if ($semCourante2==0)
323
    {
324
	for ($d=$i; $d<=6;$d++)
325
     {
326
	$s=$d-$i+1;
327
	$elem[$d]="<a href=".$this->url."?action=".GESTION_TRAVAIL."&semaine=$semaineL2";
328
	$elem[$d].="&annee=".$this->annee.">".$s."</a>";
329
     }
330
     }else {
331
	for ($d=$i; $d<=6;$d++)
332
     {
333
	$elem[$d]= ($d-$i+1);
334
     }
335
     }
336
   $table->addRow($elem);
337
 
338
   $text.=$table->toHtml();
339
   $text .= "</div>";
340
   return $text;
341
 
342
}
343
 
344
   /**
345
   *fonction calculant la semaine suivante
346
   */
347
   function nextWeek()
348
   {
349
    if ($this->semaine==date('W',mktime(0,0,0,12,31,$this->annee)))
350
    {
351
	$tab[0]=$nextWeek=1;
352
	$tab[1]=$nextAnnee=$this->annee+1;
353
    }else {
354
      $tab[0]=$nextWeek=$this->semaine+1;
355
      $tab[1]=$nextAnnee=$this->annee;
356
    }
357
    return $tab;
358
   }
359
   /**
360
   *fonction calulant lasemaine precedeente
361
   */
362
   function prevWeek()
363
   {
364
    if ($this->semaine==1)
365
    {
366
     $tab[0]=$prevWeek=date('W',mktime(0,0,0,12,31,($this->annee-1)));
367
     $tab[1]=$prevAnnee=$this->annee-1;
368
    } else{
369
       $tab[0]=$prevWeek=$this->semaine -1 ;
370
       $tab[1]=$prevAnnee=$this->annee;
371
    }
372
    return $tab;
373
   }
374
   /**
375
   *fonction caluculant le mois suivant
376
   *renvoie l'annee et le mois suivant sous forme de chiffre
377
   *dans un tableau
378
   */
379
   function nextMonth()
380
   {
381
    if ($this->mois==12)
382
    {
383
	$tab[0]=$nextMois=1;
384
	$tab[1]=$nextAnnee=$this->annee+1;
385
    }else
386
    {
387
	$tab[0]=$nextMois=$this->mois+1;
388
	$tab[1]=$nextAnnee=$this->annee;
389
    }
390
    return $tab;
391
   }
392
 
393
   /**
394
   *fonction calculant le mois precedent
395
   *renvoie l'annee et le mois precedent sous forme de chiffre
396
   */
397
   function prevMonth()
398
   {
399
     if ($this->mois==1)
400
    {
401
	$tab[0]=$prevMois=12;
402
	$tab[1]=$prevAnnee=$this->annee-1;
403
    }else
404
    {
405
	$tab[0]=$prevMois=$this->mois-1;
406
	$tab[1]=$prevAnnee=$this->annee;
407
    }
408
    return $tab;
409
   }
410
 
411
   /**
412
   *fonction renvoyant la date du lundi d'une semaine
413
   *a partir du numero de semaine
414
   *@param numero de semaine
415
   *@praam annee
416
   *@return un tableau contenat le timestamp unix de lenudi et dimanche
417
   *de la semaine en question
418
   */
419
function lundiEtDimancheSemaine($semaine,$annee) {
420
 
421
if ((date("w", mktime(0,0,0,1,1,$annee)) <= 4) && (date("w", mktime(0,0,0,1,1,$annee)) != 0))
422
 {
423
   $nbre_jour = ($semaine-1)*7;
424
  }else{
425
    $nbre_jour = ($semaine)*7;
426
        }
427
 
428
if (date("w", mktime(0,0,0,1,1,$annee)) == 0)
429
{
430
  $nbre_jour +=7;
431
}else{
432
$nbre_jour +=7-((date("w", mktime(0,0,0,1,1,$annee))-1)%7);
433
}
434
 
435
$nbre_jour_7 = $nbre_jour-6;
436
 
437
//$lundi = date("d-m-Y", mktime(0,0,0,1,$nbre_jour_7,$annee) );
438
//$dimanche = date("d-m-Y", mktime(0,0,0,1,$nbre_jour,$annee));
439
 
440
return array($nbre_jour_7,$nbre_jour);
441
}
442
/**
443
*fonction indiquant si une date est feriee ou non
444
*renvoie 1 si ferie
445
*0 sinon
446
*/
447
function isFerie($date)
448
{
449
   if (in_array($date,$this->liste_feries))
450
   {
451
       return 1;
452
   }else return 0;
453
}
454
 
455
}
456
?>