Rev 609 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/***************************************************************************\* SPIP, Systeme de publication pour l'internet ** ** Copyright (c) 2001-2005 ** Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James ** ** Ce programme est un logiciel libre distribue sous licence GNU/GPL. ** Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *\***************************************************************************///// Ce fichier ne sera execute qu'une foisif (defined("_ECRIRE_INC_CALENDRIER")) return;define("_ECRIRE_INC_CALENDRIER", "1");include_ecrire("inc_texte.php3");// Typographie generale des calendriers de 3 type: jour/semaine/mois(ou plus)// Notes: pour toutes les fonctions ayant parmi leurs parametres// annee, mois, jour, echelle, partie_cal, script, ancre// ceux-ci apparaissent TOUJOURS dans cet ordredefine(DEFAUT_D_ECHELLE,120); # 1 pixel = 2 minutes// icones standards, fonction de la direction de la langueglobal $bleu, $vert, $jaune;$bleu = http_img_pack("m_envoi_bleu$spip_lang_rtl.gif", 'B', "class='calendrier-icone'");$vert = http_img_pack("m_envoi$spip_lang_rtl.gif", 'V', "class='calendrier-icone'");$jaune= http_img_pack("m_envoi_jaune$spip_lang_rtl.gif", 'J', "class='calendrier-icone'");//// Utilitaires sans html ni sql//// utilitaire de separation script / ancre// et de retrait des arguments a remplacerfunction calendrier_retire_args_ancre($script){$script = str_replace('?bonjour=oui&?','?',$script);if (ereg('^(.*)(#[^=&]*)$',$script, $m)) {$script = $m[1];$ancre = $m[2];} else { $ancre = ''; }if ($script[strlen($script)-1] == '?') $script = substr($script,0,-1);foreach(array('echelle','jour','mois','annee', 'type', 'partie_cal') as $arg) {$script = preg_replace("/([?&])$arg=[^&]*&/",'\1', $script);$script = preg_replace("/([?&])$arg=[^&]*$/",'\1', $script);}return array($script, $ancre);}function calendrier_args_date($annee, $mois, $jour){return 'annee=' . sprintf("%04d", $annee) . '&' .'mois=' . sprintf("%02d", $mois) . '&' .'jour=' . sprintf("%02d", $jour);}# prend une heure de debut et de fin, ainsi qu'une echelle (seconde/pixel)# et retourne un tableau compose# - taille d'une heure# - taille d'une journee# - taille de la fonte# - taille de la margefunction calendrier_echelle($debut, $fin, $echelle){if ($echelle==0) $echelle = DEFAUT_D_ECHELLE;if ($fin <= $debut) $fin = $debut +1;$duree = $fin - $debut;$dimheure = floor((3600 / $echelle));return array($dimheure,(($duree+2) * $dimheure),floor (14 / (1+($echelle/240))),floor(240 / $echelle));}# Calcule le "top" d'une heurefunction calendrier_top ($heure, $debut, $fin, $dimheure, $dimjour, $fontsize) {$h_heure = substr($heure, 0, strpos($heure, ":"));$m_heure = substr($heure, strpos($heure,":") + 1, strlen($heure));$heure100 = $h_heure + ($m_heure/60);if ($heure100 < $debut) $heure100 = ($heure100 / $debut) + $debut - 1;if ($heure100 > $fin) $heure100 = (($heure100-$fin) / (24 - $fin)) + $fin;$top = floor(($heure100 - $debut + 1) * $dimheure);return $top;}# Calcule la hauteur entre deux heuresfunction calendrier_height ($heure, $heurefin, $debut, $fin, $dimheure, $dimjour, $fontsize) {$height = calendrier_top ($heurefin, $debut, $fin, $dimheure, $dimjour, $fontsize)- calendrier_top ($heure, $debut, $fin, $dimheure, $dimjour, $fontsize);$padding = floor(($dimheure / 3600) * 240);$height = $height - (2* $padding + 2); // pour padding interieurif ($height < ($dimheure/4)) $height = floor($dimheure/4); // eviter paves totalement ecrasesreturn $height;}//// init: calcul generique des evenements a partir des tables SQL//function http_calendrier_init($time='', $ltype='', $lechelle='', $lpartie_cal='', $script='', $evt=''){global $mois, $annee, $jour, $type, $echelle, $partie_cal;if (!$time){$today=getdate(time());if (!$annee)$annee = $today["year"];if (!$mois)$mois = $today["mon"];if (!$jour)$jour = $today["mday"];$time = mktime(0,0,0,$mois, $jour, $annee);$type= 'mois';}$jour = date("d",$time);$mois = date("m",$time);$annee = date("Y",$time);if (!$ltype) $ltype = $type ? $type : 'mois';if (!$lechelle) $lechelle = $echelle;if (!$lpartie_cal) $lpartie_cal = $partie_cal;list($script, $ancre) =calendrier_retire_args_ancre($script ? $script :$GLOBALS['clean_link']->getUrl());if (!_DIR_RESTREINT) http_calendrier_titre($time, $ltype);if (!$evt) {$g = 'sql_calendrier_' . $ltype;$evt = sql_calendrier_interval($g($annee,$mois, $jour));sql_calendrier_interval_articles("'$annee-$mois-00'", "'$annee-$mois-1'", $evt[0]);// si on veut les forums, decommenter# sql_calendrier_interval_forums($g($annee,$mois,$jour), $evt[0]);}$f = 'http_calendrier_' . $ltype;return $f($annee, $mois, $jour, $lechelle, $lpartie_cal, $script, $ancre, $evt);}# titre de la page, si on est dans l'espace de redactionfunction http_calendrier_titre($time, $type){$date = date("Y-m-d", $time); # a optimiserif ($type == 'semaine') {$GLOBALS['afficher_bandeau_calendrier_semaine'] = true;$titre = _T('titre_page_calendrier',array('nom_mois' => nom_mois($date), 'annee' => annee($date)));}elseif ($type == 'jour') {$titre = nom_jour($date)." ". affdate_jourcourt($date);}else {$titre = _T('titre_page_calendrier',array('nom_mois' => nom_mois($date), 'annee' => annee($date)));}debut_page($titre, "redacteurs", "calendrier");echo "<div> </div>" ;}# affichage d'un calendrier de plusieurs semaines# si la periode est inferieure a 31 jours, on considere que c'est un moisfunction http_calendrier_mois($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt){global $spip_ecran;if (!isset($spip_ecran)) $spip_ecran = 'large';list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt;if ($sansduree)foreach($sansduree as $d => $r){$evenements[$d] = !$evenements[$d] ? $r :array_merge($evenements[$d], $r); }if (!$premier_jour) $premier_jour = '01';if (!$dernier_jour){$dernier_jour = 31;while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--;}$scriptep = $script .(ereg('[?&]$', $script) ? "" : (strpos($script,'?') ? '&' : '?')) ."echelle=$echelle&partie_cal=$partie_cal&";return"<table class='calendrier-table-$spip_ecran' cellspacing='0' cellpadding='0'>" .http_calendrier_mois_navigation($annee, $mois, $premier_jour, $dernier_jour, $echelle, $partie_cal, $script, $ancre) .http_calendrier_mois_noms($annee, $mois, $jour, $scriptep, $ancre) .http_calendrier_mois_sept($annee, $mois, $premier_jour, $dernier_jour,$evenements, $scriptep, $ancre) .'</table>' .http_calendrier_sans_date($annee, $mois, $evenements) .(_DIR_RESTREINT ? "" : http_calendrier_aide_mess());}// si la periore a plus de 31 jours, c'est du genre trimestre, semestre etc// pas de navigation suivant/precedent alorsfunction http_calendrier_mois_navigation($annee, $mois, $premier_jour, $dernier_jour, $echelle, $partie_cal, $script, $ancre){if ($dernier_jour > 31) {$prec = $suiv = '';$periode = affdate_mois_annee(date("Y-m-d", mktime(1,1,1,$mois,$premier_jour,$annee))) . ' - '. affdate_mois_annee(date("Y-m-d", mktime(1,1,1,$mois,$dernier_jour,$annee)));} else {$mois_suiv=$mois+1;$annee_suiv=$annee;$mois_prec=$mois-1;$annee_prec=$annee;if ($mois==1){$mois_prec=12;$annee_prec=$annee-1;}else if ($mois==12){$mois_suiv=1; $annee_suiv=$annee+1;}$prec = calendrier_args_date($annee_prec, $mois_prec, 1);$suiv = calendrier_args_date($annee_suiv, $mois_suiv, 1);$periode = affdate_mois_annee("$annee-$mois-1");}return"\n<tr><td colspan='7'>" .http_calendrier_navigation($annee,$mois,$jour,$echelle,$partie_cal,$periode,$script,$prec,$suiv,'mois',$ancre) ."</td></tr>";}function http_calendrier_mois_noms($annee, $mois, $jour, $script, $ancre){global $couleur_claire;$bandeau ="";for ($j=1; $j<8;$j++){$bandeau .="\n\t<th class='calendrier-th'>" ._T('date_jour_' . (($j%7)+1)) ."</th>";}return "\n<tr" .(!isset($couleur_claire) ? "" : " style='background-color: $couleur_claire'") .">$bandeau\n</tr>";}# dispose les lignes d'un calendrier de 7 colonnes (les jours)# chaque case est garnie avec les evenements du jour figurant dans $evenementsfunction http_calendrier_mois_sept($annee, $mois, $premier_jour, $dernier_jour,$evenements, $script, $ancre=''){global $couleur_claire, $spip_lang_left, $spip_lang_right;if (!ereg('[?&]$', $script))$script .= (strpos($script,'?') ? '&' : '?');// affichage du debut de semaine hors periode$init = '';$debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee));for ($i=$debut ? $debut : 7;$i>1;$i--){$init .= "\n\t<td style=\"border-bottom: 1px solid $couleur_claire;\"> </td>";}$total = '';$ligne = '';$today=date("Ymd");for ($j=$premier_jour; $j<=$dernier_jour; $j++){$nom = mktime(1,1,1,$mois,$j,$annee);$jour = date("d",$nom);$jour_semaine = date("w",$nom);$mois_en_cours = date("m",$nom);$annee_en_cours = date("Y",$nom);$amj = date("Y",$nom) . $mois_en_cours . $jour;$scriptarg = $script . calendrier_args_date($annee_en_cours, $mois_en_cours, $jour);$couleur_lien = "black";$couleur_fond = "";if ($jour_semaine == 0) $couleur_fond = $couleur_claire;else if ($jour_semaine==1){$total .= "\n<tr>$init$ligne\n</tr>";$ligne = $init = '';}if ($amj == $today) {$couleur_lien = "red";$couleur_fond = "white";}$res = '';if ($evts = $evenements[$amj]) {foreach ($evts as $evenement){$res .= isset($evenement['DTSTART']) ?http_calendrier_avec_heure($evenement, $amj) :http_calendrier_sans_heure($evenement);}}$ligne .= "\n\t\t<td\tclass='calendrier-td'style='height: 100px; border-bottom: 1px solid $couleur_claire; border-$spip_lang_right: 1px solid $couleur_claire;" .($couleur_fond ? " background-color: $couleur_fond;" : "") .($ligne ? "" :" border-$spip_lang_left: 1px solid $couleur_claire;") ."'>" .(!_DIR_RESTREINT ?(http_href($scriptarg . "&type=jour" . $ancre, $jour,'', "color: $couleur_lien",'calendrier-helvetica16') .http_calendrier_ics_message($annee_en_cours, $mois_en_cours, $jour, false)):http_calendrier_mois_clics($annee_en_cours, $mois_en_cours, $jour, $scriptarg, $ancre)) .$res ."\n\t</td>";}return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : '');}// typo pour l'espace publicfunction http_calendrier_mois_clics($annee, $mois, $jour, $script, $ancre){$d = mktime(0,0,0,$mois, $jour, $annee);$semaine = date("W", $d);return"<table width='100%'>\n<tr><td style='text-align: left'>".http_href("$script&type=jour" . $ancre,"$jour/$mois",_T('date_jour_'. (1+date('w',$d))) ." $jour " ._T('date_mois_'.(0+$mois)),'','calendrier-helvetica16') ."</td><td style='text-align: right'>" .http_href("$script&type=semaine" . $ancre,$semaine,_T('date_semaines') . " $semaine",'','calendrier-helvetica16') ."</td></tr>\n</table>";}# dispose les evenements d'une semainefunction http_calendrier_semaine($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt){global $spip_ecran;if (!isset($spip_ecran)) $spip_ecran = 'large';$init = date("w",mktime(1,1,1,$mois,$jour,$annee));$init = $jour+1-($init ? $init : 7);$scriptep = $script .(ereg('[?&]$', $script) ? "" : (strpos($script,'?') ? '&' : '?')) ."echelle=$echelle&partie_cal=$partie_cal&";return"\n<table class='calendrier-table-$spip_ecran' cellspacing='0' cellpadding='0'>" .http_calendrier_semaine_navigation($annee, $mois, $init, $echelle, $partie_cal, $script, $ancre) .http_calendrier_semaine_noms($annee, $mois, $init, $scriptep, $ancre) .http_calendrier_semaine_sept($annee, $mois, $init, $echelle, $partie_cal, $evt) ."</table>" .http_calendrier_sans_date($annee, $mois,$evt[0]) .(_DIR_RESTREINT ? "" : http_calendrier_aide_mess());}function http_calendrier_semaine_navigation($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre){$fin = mktime (1,1,1,$mois, $jour+6, $annee);$fjour = date("d",$fin);$fmois = date("m",$fin);$fannee = date("Y",$fin);$fin = date("Y-m-d", $fin);$debut = mktime (1,1,1,$mois, $jour, $annee);$djour = date("d",$debut)+0;$dmois = date("m",$debut);$dannee = date("Y",$debut);$debut = date("Y-m-d", $debut);$periode = (($dannee != $fannee) ?(affdate($debut)." - ".affdate($fin)) :(($dmois == $fmois) ?($djour ." - ".affdate_jourcourt($fin)) :(affdate_jourcourt($debut)." - ".affdate_jourcourt($fin))));return"\n<tr><td colspan='7'>" .http_calendrier_navigation($annee,$mois,$jour,$echelle,$partie_cal,$periode,$script,calendrier_args_date($dannee, $dmois, ($djour-7)),calendrier_args_date($fannee, $fmois, ($fjour+1)),'semaine',$ancre) ."</td></tr>\n";}function http_calendrier_semaine_noms($annee, $mois, $jour, $script, $ancre){global $couleur_claire;$href = $script .(ereg('[?&]$', $script) ? '' : (strpos($script,'?') ? '&' : '?')) ."type=jour&";$bandeau = '';for ($j=$jour; $j<$jour+7;$j++){$nom = mktime(0,0,0,$mois,$j,$annee);$num = intval(date("d", $nom)) ;$numois = date("m",$nom);$nomjour = _T('date_jour_'. (1+date('w',$nom)));$bandeau .="\n\t<th class='calendrier-th'>" .http_href(($href .calendrier_args_date(date("Y",$nom), $numois, $num) .$ancre),($nomjour ." " .$num .(($num == 1) ? 'er' : '') .($ancre ? ('/' . $numois) : ''))) ."</th>";}return "\n<tr" .(!isset($couleur_claire) ? "" : " style='background-color: $couleur_claire'") .">$bandeau\n</tr>";}function http_calendrier_semaine_sept($annee, $mois, $jour, $echelle, $partie_cal, $evt){global $couleur_claire, $spip_ecran, $spip_lang_left;$largeur = ($spip_ecran == "large") ? 90 : 60;$today=date("Ymd");$total = '';$style = "border-$spip_lang_left: 1px solid $couleur_claire; border-bottom: 1px solid $couleur_claire; border-top: 0px; border-right: 0px;";for ($j=$jour; $j<$jour+7;$j++){$v = mktime(0,0,0,$mois, $j, $annee);$total .= "\n<td class='calendrier-td'>" .http_calendrier_ics($annee,$mois,$j, $echelle, $partie_cal, $largeur, $evt, ($style . ( (date("w",$v)==0 && isset($couleur_claire)) ?" background-color: $couleur_claire;" :((date("Ymd", $v) == $today) ?" background-color: white;" :" background-color: #eeeeee;")))) ."\n</td>";}return "\n<tr class='calendrier-verdana10'>$total</tr>";}function http_calendrier_jour($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt){global $spip_ecran;if (!isset($spip_ecran)) $spip_ecran = 'large';$scriptep = $script .(ereg('[?&]$', $script) ? "" : (strpos($script,'?') ? '&' : '?')) ."echelle=$echelle&partie_cal=$partie_cal&";return"\n<table class='calendrier-table-$spip_ecran'>" ."\n<tr><td class='calendrier-td-gauche'></td>" ."<td colspan='5' class='calendrier-td-centre'>" .http_calendrier_navigation($annee, $mois, $jour, $echelle, $partie_cal,(nom_jour("$annee-$mois-$jour") . " " .affdate_jourcourt("$annee-$mois-$jour")),$script,calendrier_args_date($annee, $mois, ($jour-1)),calendrier_args_date($annee, $mois, ($jour+1)),'jour',$ancre) ."</td>" ."<td class='calendrier-td-droit calendrier-arial10'></td>" ."</tr>" .http_calendrier_jour_noms($annee, $mois, $jour, $scriptep, $ancre) .http_calendrier_jour_sept($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) ."</table>";}function http_calendrier_jour_noms($annee, $mois, $jour, $script, $ancre){global $spip_ecran;$gauche = (_DIR_RESTREINT || ($spip_ecran != "large"));return"\n<tr><td class='calendrier-td-gauche'>" .($gauche ? '' :http_calendrier_ics_titre($annee,$mois,$jour-1,$script)) ."</td><td colspan='5' class='calendrier-td-centre'>" .(_DIR_RESTREINT ? '' :("\n\t<div class='calendrier-titre'>" .http_calendrier_ics_message($annee, $mois, $jour, true) .'</div>')) ."</td><td class='calendrier-td-droit calendrier-arial10'> " .(_DIR_RESTREINT ? '' : http_calendrier_ics_titre($annee,$mois,$jour+1,$script)) ."</td></tr>";}function http_calendrier_jour_sept($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt){global $spip_ecran;$gauche = (_DIR_RESTREINT || ($spip_ecran != "large"));return"<tr class='calendrier-verdana10'>" .# afficher en reduction le tableau du jour precedent"\n<td class='calendrier-td-gauche'>" .($gauche ? '' :http_calendrier_ics($annee, $mois, $jour-1, $echelle, $partie_cal, 0, $evt)) ."</td><td colspan='5' class='calendrier-td-centre'>" .http_calendrier_ics($annee, $mois, $jour, $echelle, $partie_cal, 300, $evt) .'</td>' .# afficher en reduction le tableau du jour suivant"\n<td class='calendrier-td-droit'>" .(_DIR_RESTREINT ? '' :http_calendrier_ics($annee, $mois, $jour+1, $echelle, $partie_cal, 0, $evt)) .'</td>' ."\n</tr>";}// Conversion d'un tableau de champ ics en des balises div positionnees// Le champ categories indique la Classe de CSS a prendre// $echelle est le nombre de secondes representees par 1 pixelfunction http_calendrier_ics($annee, $mois, $jour,$echelle, $partie_cal, $largeur, $evt, $style='') {global $spip_lang_left;// tableauif ($partie_cal == "soir") {$debut = 12;$fin = 23;} else if ($partie_cal == "matin") {$debut = 4;$fin = 15;} else {$debut = 7;$fin =20;}if ($echelle==0) $echelle = DEFAUT_D_ECHELLE;list($dimheure, $dimjour, $fontsize, $padding) =calendrier_echelle($debut, $fin, $echelle);$modif_decalage = round($largeur/8);$date = date("Ymd", mktime(0,0,0,$mois, $jour, $annee));list($sansheure, $avecheure) = $evt;$avecheure = $avecheure[$date];$sansheure = $sansheure[$date];$total = '';if ($avecheure){$tous = 1 + count($avecheure);$i = 0;foreach($avecheure as $evenement){$d = $evenement['DTSTART'];$e = $evenement['DTEND'];$d_jour = substr($d,0,8);$e_jour = $e ? substr($e,0,8) : $d_jour;$debut_avant = false;$fin_apres = false;/* disparues sauf erreur$radius_top = " radius-top";$radius_bottom = " radius-bottom";*/if ($d_jour <= $date AND $e_jour >= $date){$i++;// Verifier si debut est jour precedentif (substr($d,0,8) < $date){$heure_debut = 0; $minutes_debut = 0;$debut_avant = true;$radius_top = "";}else{$heure_debut = substr($d,-6,2);$minutes_debut = substr($d,-4,2);}if (!$e){$heure_fin = $heure_debut ;$minutes_fin = $minutes_debut ;$bordure = "border-bottom: dashed 2px";}else{$bordure = "";if (substr($e,0,8) > $date){$heure_fin = 23; $minutes_fin = 59;$fin_apres = true;$radius_bottom = "";}else{$heure_fin = substr($e,-6,2);$minutes_fin = substr($e,-4,2);}}if ($debut_avant && $fin_apres) $opacity = "-moz-opacity: 0.6; filter: alpha(opacity=60);";else $opacity = "";$haut = calendrier_top ("$heure_debut:$minutes_debut", $debut, $fin, $dimheure, $dimjour, $fontsize);$bas = !$e ? $haut :calendrier_top ("$heure_fin:$minutes_fin", $debut, $fin, $dimheure, $dimjour, $fontsize);$hauteur = calendrier_height ("$heure_debut:$minutes_debut", "$heure_fin:$minutes_fin", $debut, $fin, $dimheure, $dimjour, $fontsize);if ($bas_prec >= $haut) $decale += $modif_decalage;else $decale = (4 * $fontsize);if ($bas > $bas_prec) $bas_prec = $bas;$url = $evenement['URL'];$desc = propre($evenement['DESCRIPTION']);$perso = $evenement['ATTENDEE'];$lieu = $evenement['LOCATION'];$sum = ereg_replace(' +',' ', typo($evenement['SUMMARY']));if (!$sum) { $sum = $desc; $desc = '';}if (!$sum) { $sum = $lieu; $lieu = '';}if (!$sum) { $sum = $perso; $perso = '';}if ($sum)$sum = "<span class='calendrier-verdana10'><b>$sum</b>$lieu $perso</span>";if (($largeur > 90) && $desc)$sum .= "\n<br /><span class='calendrier-noir'>$desc</span>";$colors = $evenement['CATEGORIES'];$total .= "\n<div class='calendrier-arial10 $colors'style='cursor: auto; position: absolute; overflow: hidden;$opacity z-index: " .$i ."; $spip_lang_left: " .$decale ."px; top: " .$haut ."px; height: " .$hauteur ."px; width: ".($largeur - 2 * ($padding+1)) ."px; font-size: ".floor($fontsize * 1.3) ."px; padding: " .$padding ."px; $bordure'onmouseover=\"this.style.zIndex=" . $tous . "\"onmouseout=\"this.style.zIndex=" . $i . "\">" .((!$url) ?$sum :http_href($url, $sum, $desc,"border: 0px",$colors)) ."</div>";}}}return"\n<div class='calendrier-jour' style='height: ${dimjour}px; font-size: ${fontsize}px;$style'>\n" .http_calendrier_ics_grille($debut, $fin, $dimheure, $dimjour, $fontsize) .$total ."\n</div>" .(!$sansheure ? "" :http_calendrier_ics_trois($sansheure, $largeur, $dimjour, $fontsize, '')) ;}# Affiche une grille horaire# Selon l'echelle demandee, on affiche heure, 1/2 heure 1/4 heure, 5minutes.function http_calendrier_ics_grille($debut, $fin, $dimheure, $dimjour, $fontsize){global $spip_lang_left, $spip_lang_right;$slice = floor($dimheure/(2*$fontsize));if ($slice%2) $slice --;if (!$slice) $slice = 1;$total = '';for ($i = $debut; $i < $fin; $i++) {for ($j=0; $j < $slice; $j++){$total .= "\n<div class='calendrier-heure" .($j ? "face" : "pile") ."' style='$spip_lang_left: 0px; top: ".calendrier_top ("$i:".sprintf("%02d",floor(($j*60)/$slice)), $debut, $fin, $dimheure, $dimjour, $fontsize) ."px;'>$i:" .sprintf("%02d",floor(($j*60)/$slice)) ."</div>";}}return "\n<div class='calendrier-heurepile' style='border: 0px; $spip_lang_left: 0px; top: 2px;'>0:00</div>" .$total ."\n<div class='calendrier-heurepile' style='$spip_lang_left: 0px; top: ".calendrier_top ("$fin:00", $debut, $fin, $dimheure, $dimjour, $fontsize)."px;'>$fin:00</div>" ."\n<div class='calendrier-heurepile' style='border: 0px; $spip_lang_left: 0px; top: ".($dimjour - $fontsize - 2) ."px;'>23:59</div>";}# si la largeur le permet, les evenements sans duree,# se placent a cote des autres, sinon en dessousfunction http_calendrier_ics_trois($evt, $largeur, $dimjour, $fontsize, $border){global $spip_lang_left;$types = array();foreach($evt as $v) $types[$v['CATEGORIES']][] = $v;$res = '';foreach ($types as $k => $v) {$res2 = '';foreach ($v as $evenement) {$res2 .= http_calendrier_sans_heure($evenement);}$res .= "\n<div class='calendrier-verdana10 calendrier-titre'>"._T($k) ."</div>" .$res2;}$pos = ((_DIR_RESTREINT || ($largeur > 90)) ? "-$dimjour" : 0);if ($largeur > 90) $largeur += (5*$fontsize);else $largeur = _DIR_RESTREINT ? (3*$fontsize) : 0;return "\n<div style='position: relative; z-index: 2; top: ${pos}px; margin-$spip_lang_left: " . $largeur . "px'>$res</div>";}function http_calendrier_ics_titre($annee, $mois, $jour,$script){$date = mktime(0,0,0,$mois, $jour, $annee);$jour = date("d",$date);$mois = date("m",$date);$annee = date("Y",$date);$l = new Link($script);$l->addvar("type","jour");return "<div class='calendrier-arial10 calendrier-titre'>" .http_href($l->getUrl() . '&' .calendrier_args_date($annee, $mois, $jour),affdate_jourcourt("$annee-$mois-$jour"),'', '', 'calendrier-noir') ."</div>";}function http_calendrier_ics_message($annee, $mois, $jour, $large){global $bleu, $vert,$jaune;$b = _T("lien_nouvea_pense_bete");$v = _T("lien_nouveau_message");$j= _T("lien_nouvelle_annonce");$href = "message_edit.php3?rv=$annee-$mois-$jour&new=oui";returnhttp_href("$href&type=pb",$bleu . ($large ? $b : ''),$b,'color: blue;','calendrier-arial10') ."\n" .http_href("$href&type=normal",$vert . ($large ? $v : ''),$v,'color: green;','calendrier-arial10') .(($GLOBALS['connect_statut'] != "0minirezo") ? "" :("\n" .http_href("$href&type=affich",$jaune . ($large ? $j : ''),$j,'color: #ff9900;','calendrier-arial10')));}function http_calendrier_sans_date($annee, $mois, $evenements){$r = $evenements[0+($annee . $mois . "00")];if (!$r) return "";$res = "\n<div class='calendrier-arial10 calendrier-titre'>"._T('info_mois_courant')."</div>";foreach ($r as $evenement) $res .= http_calendrier_sans_heure($evenement);return $res;}function http_calendrier_sans_heure($evenement){if ($evenement['CATEGORIES'] == 'info_articles')$i = 'puce-verte-breve.gif';elseif ($evenement['CATEGORIES'] == 'info_breves')$i = 'puce-blanche-breve.gif';else$i = 'puce-orange-breve.gif';$desc = propre($evenement['DESCRIPTION']);$sum = $evenement['SUMMARY'];if (!$sum) $sum = $desc;$sum = http_img_pack($i, $desc, "style='width: 8px; height: 9px; border: 0px'") . ' ' . $sum;if ($evenement['URL']) {$sum = http_href($evenement['URL'], $sum, $desc);}return "\n<div class='calendrier-noir calendrier-arial10'>$sum\n</div>\n";}function http_calendrier_avec_heure($evenement, $amj){$jour_debut = substr($evenement['DTSTART'], 0,8);$jour_fin = substr($evenement['DTEND'], 0, 8);if ($jour_fin <= 0) $jour_fin = $jour_debut;if (($jour_debut <= 0) OR ($jour_debut > $amj) OR ($jour_fin < $amj))return "";$desc = propre($evenement['DESCRIPTION']);$sum = $evenement['SUMMARY'];if (!$sum) $sum = $desc;$sum = "<span class='calendrier-noir'>" .ereg_replace(' +',' ', typo($sum)) ."</span>";if ($evenement['URL'])$sum = http_href($evenement['URL'], $sum, $desc);$opacity = "";$deb_h = substr($evenement['DTSTART'],-6,2);$deb_m = substr($evenement['DTSTART'],-4,2);$fin_h = substr($evenement['DTEND'],-6,2);$fin_m = substr($evenement['DTEND'],-4,2);if ($deb_h >0 OR $deb_m > 0) {if ((($deb_h > 0) OR ($deb_m > 0)) AND $amj == $jour_debut){ $deb = '<b>' . $deb_h . ':' . $deb_m . '</b> ';}else {$deb = '...';}if ((($fin_h > 0) OR ($fin_m > 0)) AND $amj == $jour_fin){ $fin = '<b>' . $fin_h . ':' . $fin_m . '</b> ';}else {$fin = '...';}if ($amj == $jour_debut OR $amj == $jour_fin) {$sum = "<div>$deb-$fin</div>$sum";} else {$opacity ='calendrier-opacity';}}return "\n<div class='$opacity calendrier-evenement calendrier-arial10 " . $evenement['CATEGORIES'] ."'>$sum\n</div>\n";}function http_calendrier_aide_mess(){global $bleu, $vert, $jaune, $spip_lang_left;return"\n<br /><br /><br />\n<font face='arial,helvetica,sans-serif' size='2'><table width='700'>\n<tr><th style='text-align: $spip_lang_left'> " ."<b>"._T('info_aide')."</b>" ."</th></tr><tr><td>$bleu\n"._T('info_symbole_bleu')."\n" ."</td></tr><tr><td>$vert\n"._T('info_symbole_vert')."\n" ."</th></tr><tr><td>$jaune\n"._T('info_symbole_jaune')."\n" ."</td></tr>\n</table></font>";}# Bandeau superieur d'un calendrier selon son $type (jour/mois/annee):# 2 icones vers les 2 autres types, a la meme date $jour $mois $annee# 2 icones de loupes pour zoom sur la meme date et le meme type# 2 fleches appelant le $script sur les periodes $pred/$suiv avec une $ancre# et le $nom du calendrierfunction http_calendrier_navigation($annee, $mois, $jour, $echelle, $partie_cal, $nom, $script, $args_pred, $args_suiv, $type, $ancre){global $spip_lang_right, $spip_lang_left, $couleur_foncee;if (!$echelle) $echelle = DEFAUT_D_ECHELLE;if (!ereg('[?&]$', $script)) $script .= (strpos($script,'?') ? '&' : '?');$args = calendrier_args_date($annee, $mois, $jour);$args_e = "$args&type=$type&echelle=$echelle";$args_p = "$args&type=$type&partie_cal=$partie_cal";$today=getdate(time());$jour_today = $today["mday"];$mois_today = $today["mon"];$annee_today = $today["year"];$id = 'nav-agenda' .ereg_replace('[^A-Za-z0-9]', '', $ancre);return"<div class='navigation-calendrier calendrier-moztop8'". (!isset($couleur_foncee) ? "" : "\nstyle='background-color: $couleur_foncee;'"). "><div style='float: $spip_lang_right; padding-left: 5px; padding-right: 5px;'>". (($type == "mois") ? '' :(http_href_img(("$script$args_e&partie_cal=tout$ancre"),"heures-tout.png","class='calendrier-png" .(($partie_cal == "tout") ? " calendrier-opacity'" : "'"),_T('cal_jour_entier')).http_href_img(("$script$args_e&partie_cal=matin$ancre"),"heures-am.png","class='calendrier-png" .(($partie_cal == "matin") ? " calendrier-opacity'" : "'"),_T('cal_matin')).http_href_img(("$script$args_e&partie_cal=soir$ancre"),"heures-pm.png","class='calendrier-png" .(($partie_cal == "soir") ? " calendrier-opacity'" : "'"),_T('cal_apresmidi')). " ". http_href_img(("$script$args_p&echelle=" .floor($echelle * 1.5)) . $ancre,"loupe-moins.gif",'',_T('info_zoom'). '-'). http_href_img(("$script$args_p&echelle=" .floor($echelle / 1.5)) . $ancre,"loupe-plus.gif",'',_T('info_zoom'). '+'))). http_href_img(("$script$args&type=jour&echelle=$echelle&partie_cal=$partie_cal$ancre"),"cal-jour.gif",(($type == 'jour') ? " class='calendrier-opacity'" : ''),_T('cal_par_jour')). http_href_img("$script$args&type=semaine&echelle=$echelle&partie_cal=$partie_cal$ancre", "cal-semaine.gif",(($type == 'semaine') ? " class='calendrier-opacity'" : "" ),_T('cal_par_semaine')). http_href_img("$script$args&type=mois&echelle=$echelle&partie_cal=$partie_cal$ancre","cal-mois.gif",(($type == 'mois') ? " class='calendrier-opacity'" : "" ),_T('cal_par_mois')). "</div>". " ". http_href_img($script .calendrier_args_date($annee_today, $mois_today, $jour_today) ."&type=$type&echelle=$echelle&partie_cal=$partie_cal$ancre","cal-today.gif",(" onmouseover=\"montrer('$id');\"" .(($annee == $annee_today && $mois == $mois_today && (($type == 'mois') || ($jour == $jour_today)))? " class='calendrier-opacity'" : "")),_T("ecrire:info_aujourdhui")). " ". (!$args_pred ? '' :http_href($script . "type=$type&echelle=$echelle&partie_cal=$partie_cal&args_pred$ancre",http_img_pack("fleche-$spip_lang_left.png", '<<<', "class='calendrier-png'"),_T('precedent'))). (!$args_suiv ? '' :http_href(($script . "type=$type&echelle=$echelle&partie_cal=$partie_cal&args_suiv$ancre"),http_img_pack("fleche-$spip_lang_right.png", '>>>', "class='calendrier-png'"),_T('suivant'))). " ". $nom. (_DIR_RESTREINT ? '' : aide("messcalen")). "</div>". http_calendrier_invisible($annee, $mois, $jour, $script . "echelle=$echelle&partie_cal=$partie_cal&", $ancre,$id);}// fabrique un petit agenda accessible par survolfunction http_calendrier_invisible($annee, $mois, $jour, $script, $ancre, $id){global $spip_lang_right, $spip_lang_left, $couleur_claire;$gadget = "<div style='position: relative;z-index: 1000;'onmouseover=\"montrer('$id');\"onmouseout=\"cacher('$id');\">". "<table id='$id' class='calendrier-cadreagenda'". (!isset($couleur_claire) ? "" : " style='background-color: $couleur_claire'"). ">\n<tr><td colspan='3' style='text-align:$spip_lang_left;'>";$annee_avant = $annee - 1;$annee_apres = $annee + 1;$finurl = "&type=mois" . $ancre;for ($i=$mois; $i < 13; $i++) {$gadget .= http_href($script .calendrier_args_date($annee_avant, $i, 1) . $finurl,nom_mois("$annee_avant-$i-1"),'','', 'calendrier-annee') ;}for ($i=1; $i < $mois - 1; $i++) {$gadget .= http_href($script .calendrier_args_date($annee, $i, 1) . $finurl,nom_mois("$annee-$i-1"),'','', 'calendrier-annee');}$gadget .= "</td></tr>". "\n<tr><td class='calendrier-tripleagenda'>". http_calendrier_agenda($annee, $mois-1, $jour, $mois, $annee, $GLOBALS['afficher_bandeau_calendrier_semaine'], $script,$ancre). "</td>\n<td class='calendrier-tripleagenda'>". http_calendrier_agenda($annee, $mois, $jour, $mois, $annee, $GLOBALS['afficher_bandeau_calendrier_semaine'], $script,$ancre). "</td>\n<td class='calendrier-tripleagenda'>". http_calendrier_agenda($annee, $mois+1, $jour, $mois, $annee, $GLOBALS['afficher_bandeau_calendrier_semaine'], $script,$ancre). "</td>". "</tr>". "\n<tr><td colspan='3' style='text-align:$spip_lang_right;'>";for ($i=$mois+2; $i <= 12; $i++) {$gadget .= http_href($script .calendrier_args_date($annee, $i, 1) . $finurl,nom_mois("$annee-$i-1"),'','', 'calendrier-annee');}for ($i=1; $i < $mois+1; $i++) {$gadget .= http_href($script .calendrier_args_date($annee_apres, $i, 1) . $finurl,nom_mois("$annee_apres-$i-1"),'','', 'calendrier-annee');}return $gadget . "</td></tr></table></div>";}// agenda mensuelfunction http_calendrier_agenda ($annee, $mois, $jour_ved, $mois_ved, $annee_ved, $semaine = false, $script='', $ancre='', $evt='') {if (!$script) $script = $GLOBALS['PHP_SELF'] ;if (!strpos($script, '?')) $script .= '?';if (!$mois) {$mois = 12; $annee--;}elseif ($mois==13) {$mois = 1; $annee++;}if (!$evt) $evt = sql_calendrier_agenda($annee, $mois);return"<div class='calendrier-titre calendrier-arial10'>" .http_href($script .calendrier_args_date($annee, $mois, 1) .'&type=mois' . $ancre,affdate_mois_annee("$annee-$mois-1"),'','color: black;') ."<table width='100%' cellspacing='0' cellpadding='0'>" .http_calendrier_agenda_rv ($annee, $mois, $evt,'http_calendrier_clic', array($script, $ancre),$jour_ved, $mois_ved, $annee_ved,$semaine) ."</table>" ."</div>";}function http_calendrier_clic($annee, $mois, $jour, $type, $couleur, $perso){list($script, $ancre) = $perso;return http_href($script .calendrier_args_date($annee, $mois, $jour) ."&type=$type$ancre",$jour,'',"color: $couleur; font-weight: bold");}// typographie un mois sous forme d'un tableau de 7 colonnesfunction http_calendrier_agenda_rv ($annee, $mois, $les_rv, $fclic, $perso='',$jour_ved='', $mois_ved='', $annee_ved='',$semaine='') {global $couleur_foncee, $spip_lang_left, $spip_lang_right;// Former une date correcte (par exemple: $mois=13; $annee=2003)$date_test = date("Y-m-d", mktime(0,0,0,$mois, 1, $annee));$mois = mois($date_test);$annee = annee($date_test);if ($semaine){$jour_semaine_valide = date("w",mktime(1,1,1,$mois_ved,$jour_ved,$annee_ved));if ($jour_semaine_valide==0) $jour_semaine_valide=7;$debut = mktime(1,1,1,$mois_ved,$jour_ved-$jour_semaine_valide+1,$annee_ved);$fin = mktime(1,1,1,$mois_ved,$jour_ved-$jour_semaine_valide+7,$annee_ved);} else { $debut = $fin = '';}$today=getdate(time());$jour_today = $today["mday"];$cemois = ($mois == $today["mon"] AND $annee == $today["year"]);$total = '';$ligne = '';$jour_semaine = date("w", mktime(1,1,1,$mois,1,$annee));if ($jour_semaine==0) $jour_semaine=7;for ($i=1;$i<$jour_semaine;$i++) $ligne .= "\n\t<td></td>";$style0 = (!isset($couleur_foncee)) ? "" : " style='border: 1px solid $couleur_foncee;'";for ($j=1; (checkdate($mois,$j,$annee)); $j++) {$style = "";$nom = mktime(1,1,1,$mois,$j,$annee);$jour_semaine = date("w",$nom);if ($jour_semaine==0) $jour_semaine=7;if ($j == $jour_ved AND $mois == $mois_ved AND $annee == $annee_ved) {$class= 'calendrier-arial11 calendrier-demiagenda';$type = 'jour';$couleur = "black";} else if ($semaine AND $nom >= $debut AND $nom <= $fin) {$class= 'calendrier-arial11 calendrier-demiagenda' .(($jour_semaine==1) ? " calendrier-$spip_lang_left" :(($jour_semaine==7) ? " calendrier-$spip_lang_right" :''));$type = ($semaine ? 'semaine' : 'jour') ;$couleur = "black";} else {if ($j == $jour_today AND $cemois) {$style = $couleur_foncee;if(!$style) $style = '#333333';$couleur = "white";} else {if ($jour_semaine == 7) {$style = "#aaaaaa";$couleur = 'white';} else {$style = "#ffffff";$couleur = "#aaaaaa";}if ($les_rv[$j] > 0) {$style = "#ffffff";$couleur = "black";}}$class= 'calendrier-arial11 calendrier-agenda';$type = ($semaine ? 'semaine' : 'jour') ;}if ($style)$style = " style='background-color: $style'";else $style = $style0;$ligne .= "\n\t<td><div class='$class'$style>" .$fclic($annee,$mois, $j, $type, $couleur, $perso) ."</div></td>";if ($jour_semaine==7){$total .= "\n<tr>$ligne\n</tr>";$ligne = '';}}return $total . (!$ligne ? '' : "\n<tr>$ligne\n</tr>");}// Fonction pour la messagerie et ecrire/index.phpfunction http_calendrier_rv($messages, $type) {global $spip_lang_rtl, $spip_lang_left, $spip_lang_right;$total = '';if (!$messages) return $total;foreach ($messages as $row) {if (ereg("^=([^[:space:]]+)$",$row['texte'],$match))$url = $match[1];else$url = "message.php3?id_message=".$row['id_message'];$rv = ($row['rv'] == 'oui');$date = $row['date_heure'];$date_fin = $row['date_fin'];if ($row['type']=="pb") $bouton = "pense-bete";else if ($row['type']=="affich") $bouton = "annonce";else $bouton = "message";if ($rv) {$date_jour = affdate_jourcourt($date);$total .= "<tr><td colspan='2'>" .(($date_jour == $date_rv) ? '' :"<div class='calendrier-arial11'><b>$date_jour</b></div>") ."</td></tr>";}$total .= "<tr><td style='width: 24px' valign='middle'>" .http_href($url,($rv ?http_img_pack("rv.gif", 'rv',http_style_background($bouton . '.gif', "no-repeat;' border='0'")) :http_img_pack($bouton.".gif", $bouton, "style='border: 0px'")),'', '') ."</td>" ."<td valign='middle'>" .((!$rv) ? '' :((affdate($date) == affdate($date_fin)) ?("<div class='calendrier-arial9 fond-agenda'>". heures($date).":".minutes($date)."<br />". heures($date_fin).":".minutes($date_fin)."</div>") :( "<div class='calendrier-arial9 fond-agenda' style='text-align: center;'>". heures($date).":".minutes($date)."<br />...</div>" ))) ."<div><b>" .http_href($url, typo($row['titre']), '', '', 'calendrier-verdana10') ."</b></div>" ."</td>" ."</tr>\n";$date_rv = $date_jour;}if ($type == 'annonces') {$titre = _T('info_annonces_generales');$couleur_titre = "ccaa00";$couleur_texte = "black";$couleur_fond = "#ffffee";}else if ($type == 'pb') {$titre = _T('infos_vos_pense_bete');$couleur_titre = "#3874B0";$couleur_fond = "#EDF3FE";$couleur_texte = "white";}else if ($type == 'rv') {$titre = _T('info_vos_rendez_vous');$couleur_titre = "#666666";$couleur_fond = "#eeeeee";$couleur_texte = "white";}returndebut_cadre_enfonce("", true, "", $titre) ."<table width='100%' border='0' cellpadding='0' cellspacing='2'>" .$total ."</table>" .fin_cadre_enfonce(true);}//------- fonctions d'appel MySQL.// au dela cette limite, pas de production HTMLfunction sql_calendrier_mois($annee,$mois,$jour) {$avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,1,$annee)) . "'";$apres = "'" . date("Y-m-d", mktime(0,0,0,$mois+1,1,$annee)) ." 00:00:00'";return array($avant, $apres);}function sql_calendrier_semaine($annee,$mois,$jour) {$w_day = date("w", mktime(0,0,0,$mois, $jour, $annee));if ($w_day == 0) $w_day = 7; // Gaffe: le dimanche est zero$debut = $jour-$w_day;$avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,$debut,$annee)) . "'";$apres = "'" . date("Y-m-d", mktime(1,1,1,$mois,$debut+7,$annee)) ." 23:59:59'";return array($avant, $apres);}// ici on prend en fait le jour, la veille et le lendemainfunction sql_calendrier_jour($annee,$mois,$jour) {$avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,$jour-1,$annee)) . "'";$apres = "'" . date("Y-m-d", mktime(1,1,1,$mois,$jour+1,$annee)) ." 23:59:59'";return array($avant, $apres);}// retourne un tableau de 2 tableaux indexes par des dates// - le premier indique les evenements du jour, sans indication de duree// - le deuxime indique les evenements commencant ce jour, avec indication de dureefunction sql_calendrier_interval($limites) {list($avant, $apres) = $limites;$evt = array();sql_calendrier_interval_articles($avant, $apres, $evt);sql_calendrier_interval_breves($avant, $apres, $evt);return array($evt, sql_calendrier_interval_rv($avant, $apres));}function sql_calendrier_interval_forums($limites, &$evenements) {list($avant, $apres) = $limites;$result=spip_query("SELECT DISTINCT titre, date_heure, id_articleFROM spip_forumWHERE date_heure >= $avantAND date_heure < $apresORDER BY date_heure");while($row=spip_fetch_array($result)){$amj = date_anneemoisjour($row['date_heure']);if (_DIR_RESTREINT){$script = 'article';$id = $row['id_article'];}else {$script = 'articles_forum';$id = $row['id_article'];}$evenements[$amj][]=array('URL' => $script . _EXTENSION_PHP . "?id_article=$id",'CATEGORIES' => 'info_liens_syndiques_3','SUMMARY' => $row['titre']);}}# 3 fonctions retournant les evenements d'une periode# le tableau retourne est indexe par les balises du format ics# afin qu'il soit facile de produire de tels documents.# Pour les articles post-dates vus de l'espace public,# on regarde si c'est une redirection pour avoir une url interessante# sinon on prend " ", c'est-a-dire la page d'appel du calendrierfunction sql_calendrier_interval_articles($avant, $apres, &$evenements) {$result=spip_query("SELECT id_article, titre, date, descriptif, chapoFROM spip_articlesWHERE statut='publie'AND date >= $avantAND date < $apresORDER BY date");if (!_DIR_RESTREINT)$script = 'articles' . _EXTENSION_PHP . "?id_article=";else{$now = date("Ymd");$script = 'article' . _EXTENSION_PHP . "?id_article=";}while($row=spip_fetch_array($result)){$amj = date_anneemoisjour($row['date']);if ((!_DIR_RESTREINT) || ($now >= $amj))$url = $script . $row['id_article'];else {if (substr($row['chapo'], 0, 1) != '=')$url = " ";else {list(,$url) = extraire_lien(array('','','',substr($row['chapo'], 1)));if ($url)$url = texte_script(str_replace('&', '&', $url));else $url = " ";}}$evenements[$amj][]=array('CATEGORIES' => 'info_articles','DESCRIPTION' => $row['descriptif'],'SUMMARY' => $row['titre'],'URL' => $url);}}function sql_calendrier_interval_breves($avant, $apres, &$evenements) {$result=spip_query("SELECT id_breve, titre, date_heureFROM spip_brevesWHERE statut='publie'AND date_heure >= $avantAND date_heure < $apresORDER BY date_heure");while($row=spip_fetch_array($result)){$amj = date_anneemoisjour($row['date_heure']);$script = (_DIR_RESTREINT ? 'breve' : 'breves_voir');$evenements[$amj][]=array('URL' => $script . _EXTENSION_PHP . "?id_breve=" . $row['id_breve'],'CATEGORIES' => 'info_breves_02','SUMMARY' => $row['titre']);}}function sql_calendrier_interval_rv($avant, $apres) {global $connect_id_auteur;$evenements= array();if (!$connect_id_auteur) return $evenements;$result=spip_query("SELECT messages.id_message, messages.titre, messages.texte,messages.date_heure, messages.date_fin, messages.typeFROM spip_messages AS messages,spip_auteurs_messages AS lienWHERE ((lien.id_auteur='$connect_id_auteur'AND lien.id_message=messages.id_message) OR messages.type='affich')AND messages.rv='oui'AND ((messages.date_fin >= $avant OR messages.date_heure >= $avant) AND messages.date_heure <= $apres)AND messages.statut='publie'GROUP BY messages.id_messageORDER BY messages.date_heure");while($row=spip_fetch_array($result)){$date_heure=$row["date_heure"];$date_fin=$row["date_fin"];$type=$row["type"];$id_message=$row['id_message'];if ($type=="pb")$cat = 'calendrier-couleur2';else {if ($type=="affich")$cat = 'calendrier-couleur4';else {if ($type!="normal")$cat = 'calendrier-couleur12';else {$cat = 'calendrier-couleur9';$auteurs = array();$result_aut=spip_query("SELECT auteurs.nomFROM spip_auteurs AS auteurs,spip_auteurs_messages AS lienWHERE (lien.id_message='$id_message'AND (auteurs.id_auteur!='$connect_id_auteur'AND lien.id_auteur=auteurs.id_auteur))");while($row_auteur=spip_fetch_array($result_aut)){$auteurs[] = $row_auteur['nom'];}}}}$jour_avant = substr($avant, 9,2);$mois_avant = substr($avant, 6,2);$annee_avant = substr($avant, 1,4);$jour_apres = substr($apres, 9,2);$mois_apres = substr($apres, 6,2);$annee_apres = substr($apres, 1,4);$ical_apres = date_anneemoisjour("$annee_apres-$mois_apres-".sprintf("%02d",$jour_apres));// Calcul pour les semaines a cheval sur deux mois$j = 0;$amj = date_anneemoisjour("$annee_avant-$mois_avant-".sprintf("%02d", $j+($jour_avant)));while ($amj <= $ical_apres) {if (!($amj == date_anneemoisjour($date_fin) AND ereg("00:00:00", $date_fin))) // Ne pas prendre la fin a minuit sur jour precedent$evenements[$amj][$id_message]=array('URL' => "message.php3?id_message=$id_message",'DTSTART' => date_ical($date_heure),'DTEND' => date_ical($date_fin),'DESCRIPTION' => $row['texte'],'SUMMARY' => $row['titre'],'CATEGORIES' => $cat,'ATTENDEE' => (count($auteurs) == 0) ? '' : join($auteurs,", "));$j ++;$ladate = date("Y-m-d",mktime (1,1,1,$mois_avant, ($j + $jour_avant), $annee_avant));$amj = date_anneemoisjour($ladate);}}return $evenements;}// fonction SQL, pour la messageriefunction sql_calendrier_taches_annonces () {global $connect_id_auteur;$r = array();if (!$connect_id_auteur) return $r;$result = spip_query("SELECT * FROM spip_messagesWHERE type = 'affich' AND rv != 'oui' AND statut = 'publie' ORDER BY date_heure DESC");if (spip_num_rows($result) > 0)while ($x = spip_fetch_array($result)) $r[] = $x;return $r;}function sql_calendrier_taches_pb () {global $connect_id_auteur;$r = array();if (!$connect_id_auteur) return $r;$result = spip_query("SELECT * FROM spip_messages AS messagesWHERE id_auteur=$connect_id_auteur AND statut='publie' AND type='pb' AND rv!='oui'");if (spip_num_rows($result) > 0){$r = array();while ($x = spip_fetch_array($result)) $r[] = $x;}return $r;}function sql_calendrier_taches_rv () {global $connect_id_auteur;$r = array();if (!$connect_id_auteur) return $r;$result = spip_query("SELECT messages.*FROM spip_messages AS messages, spip_auteurs_messages AS lienWHERE ((lien.id_auteur='$connect_id_auteur'AND lien.id_message=messages.id_message)OR messages.type='affich')AND messages.rv='oui'AND ( (messages.date_heure > DATE_SUB(NOW(), INTERVAL 1 DAY)AND messages.date_heure < DATE_ADD(NOW(), INTERVAL 1 MONTH))OR (messages.date_heure < NOW() AND messages.date_fin > NOW() ))AND messages.statut='publie'GROUP BY messages.id_messageORDER BY messages.date_heure");if (spip_num_rows($result) > 0){$r = array();while ($x = spip_fetch_array($result)) $r[] = $x;}return $r;}function sql_calendrier_agenda ($annee, $mois) {global $connect_id_auteur;$rv = array();if (!$connect_id_auteur) return $rv;$date = date("Y-m-d", mktime(0,0,0,$mois, 1, $annee));$mois = mois($date);$annee = annee($date);// rendez-vous personnels dans le mois$result_messages=spip_query("SELECT messages.date_heure FROM spip_messages AS messages, spip_auteurs_messages AS lien WHERE ((lien.id_auteur='$connect_id_auteur' AND lien.id_message=messages.id_message) OR messages.type='affich') AND messages.rv='oui' AND messages.date_heure >='$annee-$mois-1' AND date_heure < DATE_ADD('$annee-$mois-1', INTERVAL 1 MONTH) AND messages.statut='publie'");while($row=spip_fetch_array($result_messages)){$rv[journum($row['date_heure'])] = 1;}return $rv;}?>