Subversion Repositories Applications.gtt

Rev

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