Subversion Repositories Applications.gtt

Rev

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&eacute;vrier","Mars","Avril","Mai","Juin","Juillet",
"Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;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 dimanche
 return $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 dimanche
     return $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;
}

}   
?>