<?PHP
/**
* Génération de l'image du calendrier des congés.
*
* Le calendrier généré au moyen de la bibliothèque GD est une image PNG.
*
* @version 1.2.0
* @author Emmanuel Delage <[email protected]>
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
* @copyright CNRS (c) 2010<br>LPC Clermont-Ferrand UMR6533<br>
* 24 Av des Landais<br>Aubière
* @package phpMyLab
* @subpackage Conges
*/
error_reporting(E_ALL ^ E_NOTICE);
$imColor = hex2int(validHexColor('dddddd'));
include_once 'connectionPHPMYLABDB.php';
//Connection a la bdd et requetes
$link = mysqli_connect($mysql_location,$mysql_user,$mysql_password,$mysql_base) or die('Connection impossible: ' . mysqli_error($link));
$query="SELECT NOM, PRENOM, GROUPE FROM T_UTILISATEUR";
if(!(empty($_REQUEST['groupe']) || $_REQUEST['groupe']=="tout le monde"))
$query.=" WHERE GROUPE='".$_REQUEST['groupe']."' ORDER BY NOM";
else
$query.=" WHERE ADMIN!=1 ORDER BY GROUPE, NOM";
$result = $link->query($query);
// Step 1. Create a new blank image
$hauteur_ligne=20;
$hauteur=41+mysqli_num_rows($result)*$hauteur_ligne;
$largeur_groupe=100;
$largeur_nom=200;
$nombre_de_mois=2;
$largeur_mois=1200/$nombre_de_mois;
$largeur_tableau=$largeur_groupe+$largeur_nom+$nombre_de_mois*$largeur_mois;
$largeur=$largeur_tableau+20;
$im = imageCreate($largeur,$hauteur+5);
// Step 2. Set background to 'color'
$background = imageColorAllocate($im, 255, 255, 255);
$background = imageColorTransparent($im,$background);
$annee=(int)$_REQUEST['uneannee'];//ou fonction intval(str);
//inclure de façon inconditionnel (sans if) ; bonne pratique avec require_once
require_once("calendrier_variables.php");
$orange = imagecolorallocate($im, 255, 102, 0); // Couleur orange
$noir = imagecolorallocate($im, 0, 0, 0); // noir
$ferie = imagecolorallocate($im, 182, 182, 182); // gris foncé
$attente = imagecolorallocate($im, 254,204,83); // jaune
$we = imagecolorallocate($im, 150, 150, 150); // gris
$rtt = imagecolorallocate($im, 100, 190, 21); // vert
$cp = imagecolorallocate($im, 77, 129, 173); // bleu
$entre = imagecolorallocate($im, 35, 80, 129); // bleu foncé
imagesetthickness($im, 1); // Epaisseur de 1px
$moisdemande=(int)$_REQUEST['mois'];
$scale=0;
for($i=0;$i<12;$i++)
$largeur_jour[$i]=$largeur_mois/$dureeMois[$i];
if($moisdemande<(13-$nombre_de_mois))
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$i]." ".$annee,$blanc) ;
for($j=0;$j<$dureeMois[$i];$j++)
{
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$i],40,$noir);
imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$i],32,"".$j+1,$noir) ;
}
$scale++;
}
}
else
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
$indice=$i;
if($i>=12)
{
$annee++;
$indice=0;
}
imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$indice]." ".$annee,$blanc) ;
for($j=0;$j<$dureeMois[$indice];$j++)
{
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$indice],40,$noir);
imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$indice],32,"".$j+1,$noir) ;
}
$scale++;
}
}
$k=0;
while($ligne = mysqli_fetch_array($result)) //Pour chaque personne dans le groupe visé
{
//on créer le tableau
imagefilledrectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$entre);
imagerectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$noir);
imageString($im,2,$largeur_groupe+5,45+$k*$hauteur_ligne,$ligne['NOM']." ".ucfirst(strtolower($ligne['PRENOM'])),$blanc);
$k++;
$scale=0;
$jourj=0;
for($w=0;$w<$moisdemande;$w++)
$jourj+=$dureeMois[$w];
if($moisdemande<(13-$nombre_de_mois))
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
for($j=0;$j<$dureeMois[$i];$j++)
{
$couleur2=$blanc;
//si c'est un jour ferie
for($w=0;$w<sizeof($feries);$w++)
if($i==$feries[$w][1] && $j==$feries[$w][0])
$couleur2=$ferie;
//si c'est le WE
$jourj++;
if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
$couleur2=$we;
imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],41+$k*$hauteur_ligne,$couleur2);
//si c'est aujourd'hui
if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
$couleur=$orange;
else
$couleur=$noir;
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],40+$k*$hauteur_ligne,
$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i]+$largeur_jour[$i],40,$couleur);
}
$scale++;
}
}
else
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
$indice=$i;
if($i>=12)
{
$annee++;
$indice=0;
}
for($j=0;$j<$dureeMois[$indice];$j++)
{
$couleur2=$blanc;
//si c'est un jour ferie
for($w=0;$w<sizeof($feries);$w++)
if($indice==$feries[$w][1] && $j==$feries[$w][0])
$couleur2=$ferie;
//si c'est le WE
$jourj++;
if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
$couleur2=$we;
//si c'est aujourd'hui
if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
$couleur=$orange;
else
$couleur=$noir;
imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],41+$k*$hauteur_ligne,$couleur2);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],40+$k*$hauteur_ligne,
$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice]+$largeur_jour[$indice],40,$couleur);
}
$scale++;
}
}
//on regarde si elle est en congés
$query="SELECT T_UTILISATEUR.NOM as nom, T_UTILISATEUR.PRENOM as prenom, T_CONGE.DEBUT_DATE as date_debut, T_CONGE.FIN_DATE as date_fin, T_CONGE.DEBUT_AM as debut_am, T_CONGE.FIN_PM as fin_pm, T_CONGE.VALIDE as valide, T_CONGE.type as type FROM T_CONGE JOIN T_UTILISATEUR WHERE T_CONGE.utilisateur=T_UTILISATEUR.utilisateur AND valide!=-1 AND valide!=-2";
$resulT_CONGEs = $link->query($query);
while($ligne_conge = mysqli_fetch_array($resulT_CONGEs))
{
$annee_deb_conge=(int)($ligne_conge[2][0].$ligne_conge[2][1].$ligne_conge[2][2].$ligne_conge[2][3]);
$mois_deb_conge=(int)($ligne_conge[2][5].$ligne_conge[2][6])-1;
$jour_deb_conge=(int)($ligne_conge[2][8].$ligne_conge[2][9]);
$annee_fin_conge=(int)($ligne_conge[3][0].$ligne_conge[3][1].$ligne_conge[3][2].$ligne_conge[3][3]);
$mois_fin_conge=(int)($ligne_conge[3][5].$ligne_conge[3][6])-1;
$jour_fin_conge=(int)($ligne_conge[3][8].$ligne_conge[3][9]);
$x1=$largeur_groupe+$largeur_nom+($mois_deb_conge-$moisdemande)*$largeur_mois+($jour_deb_conge)*$largeur_jour[$mois_deb_conge];
if($annee_fin_conge>$annee_deb_conge)
$x2=$largeur_tableau;
else
$x2=$largeur_groupe+$largeur_nom+($mois_fin_conge-$moisdemande)*$largeur_mois+($jour_fin_conge)*$largeur_jour[$mois_fin_conge];
if($x2<($largeur_groupe+$largeur_nom))
$x2=($largeur_groupe+$largeur_nom);
if($x1<($largeur_groupe+$largeur_nom))
$x1=($largeur_groupe+$largeur_nom);
if($x2>$largeur_tableau)
$x2=$largeur_tableau;
//imageString($im,2,10+$x2*2,250,"x1 : ".$x1,$noir);
//imageString($im,2,10+$x2*2,280,"x2 : ".$x2,$noir);
if($ligne_conge[6]==0)
$couleur=$attente;
elseif($ligne_conge[7]==1)
$couleur=$rtt;
else
$couleur=$cp;
if($annee_deb_conge==$annee && $ligne_conge['nom']==$ligne['NOM'])
{
if($jour_deb_conge==$jour_fin_conge)
{
if($ligne_conge[4]==0 && $x1>($largeur_groupe+$largeur_nom))
{
$points=array($x1-$largeur_jour[$mois_deb_conge],40+($k-1+1)*$hauteur_ligne,
$x1,40+($k-1+1)*$hauteur_ligne,
$x1,40+($k-1)*$hauteur_ligne);
imagefilledpolygon ($im, $points, 3, $couleur);
}
if($ligne_conge[5]==1 && $x2>($largeur_groupe+$largeur_nom) && $x2<$largeur_tableau)
{
$points=array($x2-$largeur_jour[$mois_fin_conge],40+($k-1)*$hauteur_ligne,
$x2,40+($k-1)*$hauteur_ligne,
$x2-$largeur_jour[$mois_fin_conge],40+($k-1+1)*$hauteur_ligne);
imagefilledpolygon ($im, $points, 3, $couleur);
}
}
else
{
if($ligne_conge[4]==0)
{
if($x1>($largeur_groupe+$largeur_nom))
imagefilledrectangle($im,$x1-$largeur_jour[$mois_deb_conge],41+($k-1)*$hauteur_ligne,$x1,41-2+($k-1+1)*$hauteur_ligne,$couleur);
}
else
{
if($x1>($largeur_groupe+$largeur_nom))
{
$points=array($x1-$largeur_jour[$mois_deb_conge],41-2+($k-1+1)*$hauteur_ligne,
$x1,41-2+($k-1+1)*$hauteur_ligne,
$x1,41+($k-1)*$hauteur_ligne);
imagefilledpolygon ($im, $points, 3, $couleur);
}
}
if($ligne_conge[5]==1)
{
if($x2>($largeur_groupe+$largeur_nom) && $x2<$largeur_tableau)
imagefilledrectangle($im,$x2,42+($k-1)*$hauteur_ligne,$x2,41-2+($k-1+1)*$hauteur_ligne,$couleur);
}
else
{
if($x2>($largeur_groupe+$largeur_nom) && $x2<$largeur_tableau)
{
$points=array($x2-$largeur_jour[$mois_fin_conge],41+($k-1)*$hauteur_ligne,
$x2,41-2+($k-1)*$hauteur_ligne,
$x2-$largeur_jour[$mois_fin_conge],41-2+($k-1+1)*$hauteur_ligne);
imagefilledpolygon ($im, $points, 3, $couleur);
}
}
if($x1>($largeur_groupe+$largeur_nom) && $x1<$largeur_tableau && $x2-$largeur_jour[$mois_fin_conge]>($largeur_groupe+$largeur_nom) && $x2-$largeur_jour[$mois_fin_conge]<$largeur_tableau)
imagefilledrectangle($im,$x1,41+($k-1)*$hauteur_ligne,$x2-$largeur_jour[$mois_fin_conge],41-2+($k-1+1)*$hauteur_ligne,$couleur);
}
}
}
}
if(empty($_REQUEST['groupe']) || $_REQUEST['groupe']=="tout le monde")
{
$y1=40;
$y2=40;
$query2="SELECT count(*), GROUPE FROM T_UTILISATEUR WHERE ADMIN!=1 GROUP BY GROUPE";
$result2 = $link->query($query2);
while($ligne2 = mysqli_fetch_array($result2))
{
$y2+=$hauteur_ligne*$ligne2[0];
imagefilledrectangle($im,0,$y1,$largeur_groupe,$y2,$entre);
imagerectangle($im,0,$y1,$largeur_groupe,$y2,$noir);
imageline($im,0,$y1+1,$largeur_tableau,$y1+1,$noir);
imageline($im,0,$y2+1,$largeur_tableau,$y2+1,$noir);
if(strlen($ligne2[1])>16)
{
// Met la portion de chaine dans $chaine
$chaine=substr($ligne2[1],0,16);
// position du dernier espace
$espace=strrpos($chaine," ");
// test si il ya un espace
if($espace)
$chaine=substr($chaine,0,$espace);
$chaine_tab[0] = $chaine;
$chaine_tab[1] = substr($ligne2[1],$espace+1,$espace+16);
imageString($im,2,5,(($y1+$y2)/2)-10,$chaine_tab[0],$blanc);
imageString($im,2,5,(($y1+$y2)/2),$chaine_tab[1],$blanc);
}
else
{
imageString($im,2,5,(($y1+$y2)/2)-6,$ligne2[1],$blanc);
}
$y1+=$hauteur_ligne*$ligne2[0];
}
}
mysql_close($link);
imagefill($im,0,0,$blanc);
// Step 3. Send the headers (at last possible time)
header('Content-type: image/png');
// Step 4. Output the image as a PNG/JPEG
//imagePNG($im);
imageJPEG($im);
// Step 5. Delete the image from memory
imageDestroy($im);
/**
* Convertit un hexa en 3 int pour RBG
*
* @param string 6-digit hexadecimal color
* @return array 3 elements 'r', 'g', & 'b'
*/
function hex2int($hex) {
return array( 'r' => hexdec(substr($hex, 0, 2)), // 1st pair of digits
'g' => hexdec(substr($hex, 2, 2)), // 2nd pair
'b' => hexdec(substr($hex, 4, 2)) // 3rd pair
);
}
/**
* Vérifie si la valeur hexadécimale est correcte pour une couleur
*
* @param string 6-digit hexadecimal string to be validated
* @param string default color to be returned if $input isn't valid
* @return string the validated 6-digit hexadecimal color
*/
function validHexColor($input = '000000', $default = '000000') {
// A valid Hexadecimal color is exactly 6 characters long
// and eigher a digit or letter from a to f
return (preg_match('#^[0-9a-fA-F]{6}$#', $input)) ? $input : $default ;
}
?>
<?PHP
//Tableau d'exemple
for ($i=0; $i<90; $i++)
{
$exemple[$i] = array(
UTILISATEUR => 'toto'.$i,
NOM => 'nom'.$i,
PRENOM => 'prenom'.$i,
);
}
$lesMois2=array("Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre");
$dureeMois=array(31,28,31,30,31,30,31,31,30,31,30,31);
// Step 1. Create a new blank image
$hauteur_ligne=20;
$hauteur=41+90*$hauteur_ligne;
$largeur_groupe=100;
$largeur_nom=200;
$nombre_de_mois=2;
$largeur_mois=1200/$nombre_de_mois;
$largeur_tableau=$largeur_groupe+$largeur_nom+$nombre_de_mois*$largeur_mois;
$largeur=$largeur_tableau+20;
$im = imageCreate($largeur,$hauteur+5);
// Step 2. Set background to 'color'
$background = imageColorAllocate($im, 255, 255, 255);
$background = imageColorTransparent($im,$background);
$annee=(int)$_REQUEST['uneannee'];
$orange = imagecolorallocate($im, 255, 102, 0); // Couleur orange
$noir = imagecolorallocate($im, 0, 0, 0); // noir
$ferie = imagecolorallocate($im, 182, 182, 182); // gris foncé
$attente = imagecolorallocate($im, 254,204,83); // jaune
$we = imagecolorallocate($im, 150, 150, 150); // gris
$rtt = imagecolorallocate($im, 100, 190, 21); // vert
$cp = imagecolorallocate($im, 77, 129, 173); // bleu
$entre = imagecolorallocate($im, 35, 80, 129); // bleu foncé
imagesetthickness($im, 1); // Epaisseur de 1px
$moisdemande=(int)$_REQUEST['mois'];
$scale=0;
for($i=0;$i<12;$i++)
$largeur_jour[$i]=$largeur_mois/$dureeMois[$i];
if($moisdemande<(13-$nombre_de_mois))
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$i]." ".$annee,$blanc) ;
for($j=0;$j<$dureeMois[$i];$j++)
{
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$i],40,$noir);
imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$i],32,"".$j+1,$noir) ;
}
$scale++;
}
}
else
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
$indice=$i;
if($i>=12)
{
$annee++;
$indice=0;
}
imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$indice]." ".$annee,$blanc) ;
for($j=0;$j<$dureeMois[$indice];$j++)
{
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$indice],40,$noir);
imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$indice],32,"".$j+1,$noir) ;
}
$scale++;
}
}
$k=0;
//while($ligne = mysqli_fetch_array($result)) //Pour chaque personne dans le groupe visé
foreach( $exemple as $ligne)
{
//on créer le tableau
imagefilledrectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$entre);
imagerectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$noir);
imageString($im,2,$largeur_groupe+5,45+$k*$hauteur_ligne,$ligne['NOM']." ".ucfirst(strtolower($ligne['PRENOM'])),$blanc);
$k++;
$scale=0;
$jourj=0;
for($w=0;$w<$moisdemande;$w++)
$jourj+=$dureeMois[$w];
if($moisdemande<(13-$nombre_de_mois))
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
for($j=0;$j<$dureeMois[$i];$j++)
{
$couleur2=$blanc;
//si c'est un jour ferie
for($w=0;$w<sizeof($feries);$w++)
if($i==$feries[$w][1] && $j==$feries[$w][0])
$couleur2=$ferie;
//si c'est le WE
$jourj++;
if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
$couleur2=$we;
imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],41+$k*$hauteur_ligne,$couleur2);
//si c'est aujourd'hui
if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
$couleur=$orange;
else
$couleur=$noir;
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],40+$k*$hauteur_ligne,
$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i]+$largeur_jour[$i],40,$couleur);
}
$scale++;
}
}
else
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
$indice=$i;
if($i>=12)
{
$annee++;
$indice=0;
}
for($j=0;$j<$dureeMois[$indice];$j++)
{
$couleur2=$blanc;
//si c'est un jour ferie
for($w=0;$w<sizeof($feries);$w++)
if($indice==$feries[$w][1] && $j==$feries[$w][0])
$couleur2=$ferie;
//si c'est le WE
$jourj++;
if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
$couleur2=$we;
//si c'est aujourd'hui
if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
$couleur=$orange;
else
$couleur=$noir;
imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],41+$k*$hauteur_ligne,$couleur2);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],40+$k*$hauteur_ligne,
$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice]+$largeur_jour[$indice],40,$couleur);
}
$scale++;
}
}
}
//mysql_close($link);
imagefill($im,0,0,$blanc);
// Step 3. Send the headers (at last possible time)
header('Content-type: image/png');
// Step 4. Output the image as a PNG/JPEG
//imagePNG($im);
imageJPEG($im);
// Step 5. Delete the image from memory
imageDestroy($im);
?>
<?PHP
$PS = 0;
$feries = array(0 => array(0 => 'Mon anniversaire', 1 =>'2013-03-20'));
//Tableau d'exemple
for ($i=0; $i<90; $i++)
{
$exemple[$i] = array(
'UTILISATEUR' => 'toto'.$i,
'NOM' => 'nom'.$i,
'PRENOM' => 'prenom'.$i,
);
}
$lesMois2=array("Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre");
$dureeMois=array(31,28,31,30,31,30,31,31,30,31,30,31);
// Step 1. Create a new blank image
$hauteur_ligne=20;
$hauteur=41+90*$hauteur_ligne;
$largeur_groupe=100;
$largeur_nom=200;
$nombre_de_mois=2;
$largeur_mois=1200/$nombre_de_mois;
$largeur_tableau=$largeur_groupe+$largeur_nom+$nombre_de_mois*$largeur_mois;
$largeur=$largeur_tableau+20;
$im = imagecreate($largeur,$hauteur+5);
// Step 2. Set background to 'color'
$background = imagecolorallocate($im, 255, 255, 255);
$background = imagecolortransparent($im,$background);
$annee=(int)$_REQUEST['uneannee'];
$blanc = imagecolorallocate($im, 255, 255, 255); // Couleur blanc
$orange = imagecolorallocate($im, 255, 102, 0); // Couleur orange
$noir = imagecolorallocate($im, 0, 0, 0); // noir
$ferie = imagecolorallocate($im, 182, 182, 182); // gris foncé
$attente = imagecolorallocate($im, 254,204,83); // jaune
$we = imagecolorallocate($im, 150, 150, 150); // gris
$rtt = imagecolorallocate($im, 100, 190, 21); // vert
$cp = imagecolorallocate($im, 77, 129, 173); // bleu
$entre = imagecolorallocate($im, 35, 80, 129); // bleu foncé
imagesetthickness($im, 1); // Epaisseur de 1px
$moisdemande=(int)$_REQUEST['mois'];
$scale=0;
for($i=0;$i<12;$i++) {
$largeur_jour[$i] = $largeur_mois/$dureeMois[$i];
if($moisdemande < (13-$nombre_de_mois)) {
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++) {
imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
imagestring($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$i]." ".$annee,$blanc) ;
for($j=0;$j<$dureeMois[$i];$j++) {
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$i],40,$noir);
imagestring($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$i],32,"".$j+1,$noir) ;
}
$scale++;
}
} else {
for($i2=$moisdemande;$i2<$nombre_de_mois+$moisdemande;$i2++) {
$indice = $i;
if($i>=12) {
$annee++;
$indice=0;
}
imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
imagestring($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$indice]." ".$annee,$blanc) ;
for($j=0;$j<$dureeMois[$indice];$j++) {
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$indice],40,$noir);
imagestring($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$indice],32,"".$j+1,$noir) ;
}
$scale++;
}
}
}
$k=0;
//while($ligne = mysqli_fetch_array($result)) //Pour chaque personne dans le groupe visé
foreach($exemple as $ligne) {
//on créer le tableau
imagefilledrectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$entre);
imagerectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$noir);
imagestring($im,2,$largeur_groupe+5,45+$k*$hauteur_ligne,$ligne['NOM']." ".ucfirst(strtolower($ligne['PRENOM'])),$blanc);
$k++;
$scale=0;
$jourj=0;
for($w=0;$w<$moisdemande;$w++) {
$jourj += $dureeMois[$w];
if($moisdemande < (13-$nombre_de_mois)) {
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++) {
for($j=0;$j<$dureeMois[$i];$j++) {
$couleur2 = $blanc;
//si c'est un jour ferie
for($w=0;$w<sizeof($feries);$w++) {
if($i==$feries[$w][1] && $j==$feries[$w][0]) $couleur2=$ferie;
//si c'est le WE
$jourj++;
}
if(($jourj%7)==$PS || ($jourj%7)==($PS+1)) $couleur2 = $we;
imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],41+$k*$hauteur_ligne,$couleur2);
//si c'est aujourd'hui
$couleur = ((date("j") == $j+1) && (date("n") == $i+1) && (date("Y") == $annee)) ? $orange : $noir;
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],40+$k*$hauteur_ligne, $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i]+$largeur_jour[$i],40,$couleur);
}
$scale++;
}
} else {
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++) {
$indice = $i;
if($i >= 12) {
$annee++;
$indice = 0;
}
for($j=0; $j<$dureeMois[$indice]; $j++) {
$couleur2 = $blanc;
//si c'est un jour ferie
/*for($w=0;$w<=count($feries);$w++) {
// if(($indice == $feries[$w][1]) && ($j == $feries[$w][0])) $couleur2 = $blanc; //$ferie;
}
//si c'est le WE
$jourj++;
//if(($jourj%7) == $PS || ($jourj%7) == ($PS+1)) $couleur2 = $blanc; //$we;
//si c'est aujourd'hui*/
$couleur = ((date("j") == $j+1) && (date("n") == $i+1) && (date("Y") == $annee)) ? $orange : $noir;
imagefill($im, $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice], 41+$k*$hauteur_ligne, $couleur2);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice]+$largeur_jour[$indice],40,$couleur);
}
$scale++;
}
}
}
}
//mysql_close($link);
imagefill($im,0,0,$blanc);
// Step 3. Send the headers (at last possible time)
header('Content-type: image/png');
// Step 4. Output the image as a PNG/JPEG
//imagePNG($im);
imagejpeg($im);
// Step 5. Delete the image from memory
imagedestroy($im);
?>
<?PHP
//Tableau d'exemple
$PS = 0;
$feries = array(0 => array(0 => 'Mon anniversaire', 1 =>'2013-03-20'));
for ($i=0; $i<90; $i++)
{
$exemple[$i] = array(
UTILISATEUR => 'toto'.$i,
NOM => 'nom'.$i,
PRENOM => 'prenom'.$i,
);
}
$lesMois2=array("Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre");
$dureeMois=array(31,28,31,30,31,30,31,31,30,31,30,31);
// Step 1. Create a new blank image
$hauteur_ligne=20;
$hauteur=41+90*$hauteur_ligne;
$largeur_groupe=100;
$largeur_nom=200;
$nombre_de_mois=2;
$largeur_mois=1200/$nombre_de_mois;
$largeur_tableau=$largeur_groupe+$largeur_nom+$nombre_de_mois*$largeur_mois;
$largeur=$largeur_tableau+20;
$im = imageCreate($largeur,$hauteur+5);
// Step 2. Set background to 'color'
$background = imageColorAllocate($im, 255, 255, 255);
$background = imageColorTransparent($im,$background);
$annee=(int)$_REQUEST['uneannee'];
$orange = imagecolorallocate($im, 255, 102, 0); // Couleur orange
$noir = imagecolorallocate($im, 0, 0, 0); // noir
$ferie = imagecolorallocate($im, 182, 182, 182); // gris foncé
$attente = imagecolorallocate($im, 254,204,83); // jaune
$we = imagecolorallocate($im, 150, 150, 150); // gris
$rtt = imagecolorallocate($im, 100, 190, 21); // vert
$cp = imagecolorallocate($im, 77, 129, 173); // bleu
$entre = imagecolorallocate($im, 35, 80, 129); // bleu foncé
imagesetthickness($im, 1); // Epaisseur de 1px
$moisdemande=(int)$_REQUEST['mois'];
$scale=0;
for($i=0;$i<12;$i++)
{
$largeur_jour[$i]=$largeur_mois/$dureeMois[$i];
}
if($moisdemande<(13-$nombre_de_mois))
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$i]." ".$annee,$blanc) ;
for($j=0;$j<$dureeMois[$i];$j++)
{
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$i],40,$noir);
imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$i],32,"".$j+1,$noir) ;
}
$scale++;
}
}
else
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
$indice=$i;
if($i>=12)
{
$annee++;
$indice=0;
}
imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$indice]." ".$annee,$blanc) ;
for($j=0;$j<$dureeMois[$indice];$j++)
{
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$indice],40,$noir);
imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$indice],32,"".$j+1,$noir) ;
}
$scale++;
}
}
$k=0;
//while($ligne = mysqli_fetch_array($result)) //Pour chaque personne dans le groupe visé
foreach( $exemple as $ligne)
{
//on créer le tableau
imagefilledrectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$entre);
imagerectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$noir);
imageString($im,2,$largeur_groupe+5,45+$k*$hauteur_ligne,$ligne['NOM']." ".ucfirst(strtolower($ligne['PRENOM'])),$blanc);
$k++;
$scale=0;
$jourj=0;
for($w=0;$w<$moisdemande;$w++)
{
$jourj+=$dureeMois[$w];
}
if($moisdemande<(13-$nombre_de_mois))
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
for($j=0;$j<$dureeMois[$i];$j++)
{
$couleur2=$blanc;
//si c'est un jour ferie
for($w=0;$w<sizeof($feries);$w++)
{
if($i==$feries[$w][1] && $j==$feries[$w][0])
{
$couleur2=$ferie;
}
}
//si c'est le WE
$jourj++;
if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
{
$couleur2=$we;
}
imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],41+$k*$hauteur_ligne,$couleur2);
//si c'est aujourd'hui
if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
{
$couleur=$orange;
}
else
{
$couleur=$noir;
}
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],40+$k*$hauteur_ligne,
$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i]+$largeur_jour[$i],40,$couleur);
}
$scale++;
}
}
else
{
for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
{
$indice=$i;
if($i>=12)
{
$annee++;
$indice=0;
}
for($j=0;$j<$dureeMois[$indice];$j++)
{
$couleur2=$blanc;
//si c'est un jour ferie
for($w=0;$w<sizeof($feries);$w++)
{
if($indice==$feries[$w][1] && $j==$feries[$w][0])
{
$couleur2=$ferie;
}
}
//si c'est le WE
$jourj++;
if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
{
$couleur2=$we;
}
//si c'est aujourd'hui
if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
{
$couleur=$orange;
}
else
{
$couleur=$noir;
}
imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],41+$k*$hauteur_ligne,$couleur2);
imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],40+$k*$hauteur_ligne,
$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice]+$largeur_jour[$indice],40,$couleur);
}
$scale++;
}
}
}
//mysql_close($link);
imagefill($im,0,0,$blanc);
// Step 3. Send the headers (at last possible time)
header('Content-type: image/png');
// Step 4. Output the image as a PNG/JPEG
//imagePNG($im);
imageJPEG($im);
// Step 5. Delete the image from memory
imageDestroy($im);
?>