" function cmp3($a, $b) { if ($a < $b) return "< "; if ($a == $b) return "= "; return "> "; } #Affiche les informations dans l'header print_header($day, $month, $year, $area, $type_session); #Heure de dénut du mois, cela ne sert à rien de reprndre les valeur morningstarts/eveningends $month_start = mktime(0, 0, 0, $month, 1, $year); #Dans quel colonne l'affichage commence: 0 veut dire $weekstarts $weekday_start = (date("w", $month_start) - $weekstarts + 7) % 7; $days_in_month = date("t", $month_start); $month_end = mktime(23, 59, 59, $month, $days_in_month, $year); // Si format imprimable ($_GET['pview'] = 1), on n'affiche pas cette partie if ($_GET['pview'] != 1) { #Table avec areas, rooms, minicals. echo "
";
$this_area_name = "";
$this_room_name = "";
if (isset($_SESSION['default_list_type']) or ($authentification_obli==1))
$area_list_format = $_SESSION['default_list_type'];
else
$area_list_format = getSettingValue("area_list_format");
#Affiche une liste déroulante ou bien un liste HTML
if ($area_list_format != "list")
{
echo make_area_select_html('month.php', $area, $year, $month, $day, $session_login); # from functions.inc.php
echo make_room_select_html('month.php', $area, $room, $year, $month, $day);
}
else
{
echo "
| \n";
#Affiche le calendrier des 3 mois
minicals($year, $month, $day, $area, $room, 'month');
echo "
<< $vocab[monthbefore] | $vocab[monthafter] >> |
DEBUG: month=$month year=$year start=$weekday_start range=$month_start:$month_end\n";
#Remplace l'espace pour qu'il n'y ai pas de problèmes
$all_day = ereg_replace(" ", " ", $vocab["all_day"]);
#Récupérer toutes les réservations pour le mois de la room affichée
# row[0] = Début de réservation
# row[1] = Fin de réservation
# row[2] = ID de la réservation
# row[3] = Nom de la réservation
# row[4] = Auteur de la réservation
$sql = "SELECT start_time, end_time, id, name, create_by
FROM grr_entry
WHERE room_id=$room
AND start_time <= $month_end AND end_time > $month_start
ORDER by 1";
# Contruit un array des informations de chaques jours dans le mois
# Ces informations sont sauvegardées:
# d[monthday]["id"][] = ID de chaque réservation, pour le lien
# d[monthday]["data"][] = Début et fin pour chaque réservation
$res = sql_query($sql);
if (! $res)
echo sql_error();
else for ($i = 0; ($row = sql_row($res, $i)); $i++)
{
$sql_creator = "SELECT prenom, nom FROM grr_utilisateurs WHERE login = '$row[4]'";
$res_creator = sql_query($sql_creator);
if ($res_creator)
$row_user = sql_row($res_creator, 0);
if ($debug_flag)
echo "
DEBUG: result $i, id $row[2], starts $row[0], ends $row[1]\n";
#Remplir tous les jours ou cette réservation s'opère
$t = max((int)$row[0], $month_start);
$end_t = min((int)$row[1], $month_end);
$day_num = date("j", $t);
$midnight = mktime(0, 0, 0, $month, $day_num, $year);
while ($t < $end_t)
{
if ($debug_flag) echo "
DEBUG: Entry $row[2] day $day_num\n";
$d[$day_num]["id"][] = $row[2];
$d[$day_num]["who"][] = $row[3]." - ".$vocab["created_by"].$row_user[0]." ".$row_user[1];
$d[$day_num]["who1"][] = $row[3];
$midnight_tonight = $midnight + 86400;
#Début et fin pour tous les jours
#9 cas: Début < = ou > minuit
# Fin < = ou > minuit
#Utiliser ~ (pas -) pour séparer l'heure de début et de fin (MSIE)
switch (cmp3($row[0], $midnight) . cmp3($row[1], $midnight_tonight))
{
case "> < ": #Début après minuit, fin avant minuit
case "= < ": #Début à minuit, fin avant minuit
$d[$day_num]["data"][] = date(hour_min_format(), $row[0]) . "~" . date(hour_min_format(), $row[1]);
break;
case "> = ": #Début après minuit, fin à minuit
$d[$day_num]["data"][] = date(hour_min_format(), $row[0]) . "~24:00";
break;
case "> > ": #Début après minuit, continue le lendemain
$d[$day_num]["data"][] = date(hour_min_format(), $row[0]) . "~====>";
break;
case "= = ": #Début à minuit, fin à minuit
$d[$day_num]["data"][] = $all_day;
break;
case "= > ": #Début à minuit, continue le lendemain
$d[$day_num]["data"][] = $all_day . "====>";
break;
case "< < ": #Début avant aujourdhui, fin avant minuit
$d[$day_num]["data"][] = "<====~" . date(hour_min_format(), $row[1]);
break;
case "< = ": #Début avant aujourd'hui', fin à minuit
$d[$day_num]["data"][] = "<====" . $all_day;
break;
case "< > ": #Début avant aujourd'hui', continue le lendemain
$d[$day_num]["data"][] = "<====" . $all_day . "====>";
break;
}
#Seulement si l'heure de fin est pares minuit, on continue le jour prochain.
if ($row[1] <= $midnight_tonight) break;
$day_num++;
$t = $midnight = $midnight_tonight;
}
}
if ($debug_flag)
{
echo "
DEBUG: Array of month day data:
\n"; for ($i = 1; $i <= $days_in_month; $i++) { if (isset($d[$i]["id"])) { $n = count($d[$i]["id"]); echo "Day $i has $n entries:\n"; for ($j = 0; $j < $n; $j++) echo " ID: " . $d[$i]["id"][$j] . " Data: " . $d[$i]["data"][$j] . "\n"; } } echo "\n"; } echo "
" . day_name(($weekcol + $weekstarts)%7) . " | "; } echo "|
---|---|
\n"; } #Afficher le jour du mois for ($cday = 1; $cday <= $days_in_month; $cday++) { if ($weekcol == 0) echo " | |
\n";
# Anything to display for this day?
if (isset($d[$cday]["id"][0]))
{
echo "";
$n = count($d[$cday]["id"]);
#Affiche l'heure de début et de fin, 2 par lignes avec lien pour voie la reservation
#Si il y en a plus que 123, on affiche "..." après le 11ème
for ($i = 0; $i < $n; $i++)
{
if ($i == 11 && $n > 12)
{
echo " ...\n";
break;
}
if ($i > 0) echo " "; else echo " "; echo "". $d[$cday]["data"][$i] . " " . "" . htmlspecialchars($d[$cday]["who1"][$i]) . " "; } echo ""; } echo " | \n";
if (++$weekcol == 7) $weekcol = 0;
}
#Ne tiens pas en compte les journées après le derbier jour du mois
if ($weekcol > 0) for (; $weekcol < 7; $weekcol++)
{
echo "\n"; } echo " |