Subversion Repositories Applications.gtt

Rev

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