[6] | 1 | <?php |
---|
| 2 | |
---|
| 3 | /***************************************************************************\ |
---|
| 4 | * SPIP, Systeme de publication pour l'internet * |
---|
| 5 | * * |
---|
| 6 | * Copyright (c) 2001-2006 * |
---|
| 7 | * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
---|
| 8 | * * |
---|
| 9 | * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * |
---|
| 10 | * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
---|
| 11 | \***************************************************************************/ |
---|
| 12 | |
---|
| 13 | if (!defined("_ECRIRE_INC_VERSION")) return; |
---|
| 14 | |
---|
| 15 | include_spip('inc/minipres'); |
---|
| 16 | include_spip('inc/layer'); |
---|
| 17 | include_spip('inc/texte'); // inclut inc_filtre |
---|
| 18 | include_spip('inc/calendar'); // inclut widget calendar |
---|
| 19 | |
---|
| 20 | charger_generer_url(); |
---|
| 21 | |
---|
| 22 | // Typographie generale des calendriers de 3 type: jour/semaine/mois(ou plus) |
---|
| 23 | |
---|
| 24 | // Notes: pour toutes les fonctions ayant parmi leurs parametres |
---|
| 25 | // annee, mois, jour, echelle, partie_cal, script, ancre |
---|
| 26 | // ceux-ci apparaissent TOUJOURS dans cet ordre |
---|
| 27 | |
---|
| 28 | define(DEFAUT_D_ECHELLE,120); # 1 pixel = 2 minutes |
---|
| 29 | |
---|
| 30 | // |
---|
| 31 | // Utilitaires sans html ni sql |
---|
| 32 | // |
---|
| 33 | |
---|
| 34 | // utilitaire de separation script / ancre |
---|
| 35 | // et de retrait des arguments a remplacer |
---|
| 36 | // (a mon avis cette fonction ne sert a rien, puisque parametre_url() |
---|
| 37 | // sait remplacer les arguments au bon endroit -- Fil) |
---|
| 38 | // Pas si simple: certains param ne sont pas remplaces |
---|
| 39 | // et doivent reprendre leur valeur par defaut -- esj. |
---|
| 40 | function calendrier_retire_args_ancre($script) |
---|
| 41 | { |
---|
| 42 | $script = str_replace('&', '&', $script); |
---|
| 43 | $script = str_replace('?bonjour=oui&?','?',$script); |
---|
| 44 | if (ereg('^(.*)(#[^=&]*)$',$script, $m)) { |
---|
| 45 | $script = $m[1]; |
---|
| 46 | $ancre = $m[2]; |
---|
| 47 | } else { $ancre = ''; } |
---|
| 48 | if ($script[strlen($script)-1] == '?') $script = substr($script,0,-1); |
---|
| 49 | foreach(array('echelle','jour','mois','annee', 'type', 'partie_cal') as $arg) { |
---|
| 50 | $script = preg_replace("/([?&])$arg=[^&]*&/",'\1', $script); |
---|
| 51 | $script = preg_replace("/([?&])$arg=[^&]*$/",'\1', $script); |
---|
| 52 | } |
---|
| 53 | if (ereg('[?&]$', $script)) $script = substr($script,0,-1); |
---|
| 54 | return array(quote_amp($script), $ancre); |
---|
| 55 | } |
---|
| 56 | |
---|
| 57 | // tous les liens de navigations sont issus de cette fonction |
---|
| 58 | // on peut definir generer_url_date et un htacces pour simplifier les URL |
---|
| 59 | |
---|
| 60 | function calendrier_args_date($script, $annee, $mois, $jour, $type, $finurl) { |
---|
| 61 | if (function_exists('generer_url_date')) |
---|
| 62 | return generer_url_date($script, $annee, $mois, $jour, $type, $finurl); |
---|
| 63 | |
---|
| 64 | $script = parametre_url($script, 'annee', sprintf("%04d", $annee)); |
---|
| 65 | $script = parametre_url($script, 'mois', sprintf("%02d", $mois)); |
---|
| 66 | $script = parametre_url($script, 'jour', sprintf("%02d", $jour)); |
---|
| 67 | $script = parametre_url($script, 'type', $type); |
---|
| 68 | return $script . $finurl; |
---|
| 69 | } |
---|
| 70 | |
---|
| 71 | # prend une heure de debut et de fin, ainsi qu'une echelle (seconde/pixel) |
---|
| 72 | # et retourne un tableau compose |
---|
| 73 | # - taille d'une heure |
---|
| 74 | # - taille d'une journee |
---|
| 75 | # - taille de la fonte |
---|
| 76 | # - taille de la marge |
---|
| 77 | |
---|
| 78 | function calendrier_echelle($debut, $fin, $echelle) |
---|
| 79 | { |
---|
| 80 | if ($echelle==0) $echelle = DEFAUT_D_ECHELLE; |
---|
| 81 | if ($fin <= $debut) $fin = $debut +1; |
---|
| 82 | |
---|
| 83 | $duree = $fin - $debut; |
---|
| 84 | $dimheure = floor((3600 / $echelle)); |
---|
| 85 | return array($dimheure, |
---|
| 86 | (($duree+2) * $dimheure), |
---|
| 87 | floor (14 / (1+($echelle/240))), |
---|
| 88 | floor(240 / $echelle)); |
---|
| 89 | } |
---|
| 90 | |
---|
| 91 | # Calcule le "top" d'une heure |
---|
| 92 | |
---|
| 93 | function calendrier_top ($heure, $debut, $fin, $dimheure, $dimjour, $fontsize) { |
---|
| 94 | |
---|
| 95 | $h_heure = substr($heure, 0, strpos($heure, ":")); |
---|
| 96 | $m_heure = substr($heure, strpos($heure,":") + 1, strlen($heure)); |
---|
| 97 | $heure100 = $h_heure + ($m_heure/60); |
---|
| 98 | |
---|
| 99 | if ($heure100 < $debut) $heure100 = ($heure100 / $debut) + $debut - 1; |
---|
| 100 | if ($heure100 > $fin) $heure100 = (($heure100-$fin) / (24 - $fin)) + $fin; |
---|
| 101 | |
---|
| 102 | $top = floor(($heure100 - $debut + 1) * $dimheure); |
---|
| 103 | |
---|
| 104 | return $top; |
---|
| 105 | } |
---|
| 106 | |
---|
| 107 | # Calcule la hauteur entre deux heures |
---|
| 108 | function calendrier_height ($heure, $heurefin, $debut, $fin, $dimheure, $dimjour, $fontsize) { |
---|
| 109 | |
---|
| 110 | $height = calendrier_top ($heurefin, $debut, $fin, $dimheure, $dimjour, $fontsize) |
---|
| 111 | - calendrier_top ($heure, $debut, $fin, $dimheure, $dimjour, $fontsize); |
---|
| 112 | |
---|
| 113 | $padding = floor(($dimheure / 3600) * 240); |
---|
| 114 | $height = $height - (2* $padding + 2); // pour padding interieur |
---|
| 115 | |
---|
| 116 | if ($height < ($dimheure/4)) $height = floor($dimheure/4); // eviter paves totalement ecrases |
---|
| 117 | |
---|
| 118 | return $height; |
---|
| 119 | } |
---|
| 120 | |
---|
| 121 | // |
---|
| 122 | // init: calcul generique des evenements a partir des tables SQL |
---|
| 123 | // |
---|
| 124 | |
---|
| 125 | function http_calendrier_init($time='', $ltype='', $lechelle='', $lpartie_cal='', $script='', $evt='') |
---|
| 126 | { |
---|
| 127 | global $mois, $annee, $jour, $type, $echelle, $partie_cal; |
---|
| 128 | |
---|
| 129 | if (!$time) |
---|
| 130 | { |
---|
| 131 | if (!$mois) |
---|
| 132 | $time = time(); |
---|
| 133 | else |
---|
| 134 | $time = mktime(0,0,0,$mois,$jour,$annee); |
---|
| 135 | $type= 'mois'; |
---|
| 136 | } |
---|
| 137 | |
---|
| 138 | $jour = date("d",$time); |
---|
| 139 | $mois = date("m",$time); |
---|
| 140 | $annee = date("Y",$time); |
---|
| 141 | if (!$ltype) $ltype = $type ? $type : 'mois'; |
---|
| 142 | if (!$lechelle) $lechelle = $echelle; |
---|
| 143 | if (!$lpartie_cal) $lpartie_cal = $partie_cal; |
---|
| 144 | list($script, $ancre) = |
---|
| 145 | calendrier_retire_args_ancre($script); |
---|
| 146 | if (!$evt) { |
---|
| 147 | $g = 'sql_calendrier_' . $ltype; |
---|
| 148 | $evt = sql_calendrier_interval($g($annee,$mois, $jour)); |
---|
| 149 | sql_calendrier_interval_articles("'$annee-$mois-00'", "'$annee-$mois-1'", $evt[0]); |
---|
| 150 | // si on veut les forums, decommenter |
---|
| 151 | # sql_calendrier_interval_forums($g($annee,$mois,$jour), $evt[0]); |
---|
| 152 | } |
---|
| 153 | $f = 'http_calendrier_' . $ltype; |
---|
| 154 | return $f($annee, $mois, $jour, $lechelle, $lpartie_cal, $script, $ancre, $evt); |
---|
| 155 | |
---|
| 156 | } |
---|
| 157 | |
---|
| 158 | # affichage d'un calendrier de plusieurs semaines |
---|
| 159 | # si la periode est inferieure a 31 jours, on considere que c'est un mois |
---|
| 160 | |
---|
| 161 | function http_calendrier_mois($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) |
---|
| 162 | { |
---|
| 163 | global $spip_ecran; |
---|
| 164 | if (!isset($spip_ecran)) $spip_ecran = 'large'; |
---|
| 165 | $premier_jour = '01'; |
---|
| 166 | $dernier_jour = '31'; |
---|
| 167 | |
---|
| 168 | if (is_array($evt)) { |
---|
| 169 | list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt; |
---|
| 170 | if (!$premier_jour) $premier_jour = '01'; |
---|
| 171 | if (!$dernier_jour) |
---|
| 172 | { |
---|
| 173 | $dernier_jour = 31; |
---|
| 174 | while (!(checkdate($mois,$dernier_jour,$annee))) $dernier_jour--; |
---|
| 175 | } |
---|
| 176 | if ($sansduree) |
---|
| 177 | foreach($sansduree as $d => $r) |
---|
| 178 | $evenements[$d] = !$evenements[$d] ? $r : array_merge($evenements[$d], $r); |
---|
| 179 | $evt = |
---|
| 180 | http_calendrier_mois_noms($annee, $mois, $jour, $script, $ancre) . |
---|
| 181 | http_calendrier_mois_sept($annee, $mois, $premier_jour, $dernier_jour,$evenements, $script, "&echelle=$echelle&partie_cal=$partie_cal$ancre") ; |
---|
| 182 | } else $evt = "<tr><td>$evt</td></tr>"; |
---|
| 183 | |
---|
| 184 | return |
---|
| 185 | "<table class='calendrier-table-$spip_ecran' cellspacing='0' cellpadding='0'>" . |
---|
| 186 | http_calendrier_mois_navigation($annee, $mois, $premier_jour, $dernier_jour, $echelle, $partie_cal, $script, $ancre) . |
---|
| 187 | $evt . |
---|
| 188 | '</table>' . |
---|
| 189 | http_calendrier_sans_date($annee, $mois, $evenements) . |
---|
| 190 | (_DIR_RESTREINT ? "" : http_calendrier_aide_mess()); |
---|
| 191 | } |
---|
| 192 | |
---|
| 193 | // si la periore a plus de 31 jours, c'est du genre trimestre, semestre etc |
---|
| 194 | // pas de navigation suivant/precedent alors |
---|
| 195 | |
---|
| 196 | function http_calendrier_mois_navigation($annee, $mois, $premier_jour, $dernier_jour, $echelle, $partie_cal, $script, $ancre){ |
---|
| 197 | if ($dernier_jour > 31) { |
---|
| 198 | $prec = $suiv = ''; |
---|
| 199 | $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))); |
---|
| 200 | } else { |
---|
| 201 | |
---|
| 202 | $mois_suiv=$mois+1; |
---|
| 203 | $annee_suiv=$annee; |
---|
| 204 | $mois_prec=$mois-1; |
---|
| 205 | $annee_prec=$annee; |
---|
| 206 | if ($mois==1){ |
---|
| 207 | $mois_prec=12; |
---|
| 208 | $annee_prec=$annee-1; |
---|
| 209 | } |
---|
| 210 | else if ($mois==12){$mois_suiv=1; $annee_suiv=$annee+1;} |
---|
| 211 | $prec = array($annee_prec, $mois_prec, 1, "mois"); |
---|
| 212 | $suiv = array($annee_suiv, $mois_suiv, 1, "mois"); |
---|
| 213 | $periode = affdate_mois_annee("$annee-$mois-1"); |
---|
| 214 | } |
---|
| 215 | return |
---|
| 216 | "\n<tr><td colspan='7'>" . |
---|
| 217 | http_calendrier_navigation($annee, |
---|
| 218 | $mois, |
---|
| 219 | $jour, |
---|
| 220 | $echelle, |
---|
| 221 | $partie_cal, |
---|
| 222 | $periode, |
---|
| 223 | $script, |
---|
| 224 | $prec, |
---|
| 225 | $suiv, |
---|
| 226 | 'mois', |
---|
| 227 | $ancre) . |
---|
| 228 | "</td></tr>"; |
---|
| 229 | |
---|
| 230 | } |
---|
| 231 | |
---|
| 232 | function http_calendrier_mois_noms($annee, $mois, $jour, $script, $ancre){ |
---|
| 233 | global $couleur_claire; |
---|
| 234 | |
---|
| 235 | $bandeau =""; |
---|
| 236 | for ($j=1; $j<8;$j++){ |
---|
| 237 | $bandeau .= |
---|
| 238 | "\n\t<th class='calendrier-th'>" . |
---|
| 239 | _T('date_jour_' . (($j%7)+1)) . |
---|
| 240 | "</th>"; |
---|
| 241 | } |
---|
| 242 | return "\n<tr" . |
---|
| 243 | (!isset($couleur_claire) ? "" : " style='background-color: $couleur_claire'") . |
---|
| 244 | ">$bandeau\n</tr>"; |
---|
| 245 | } |
---|
| 246 | |
---|
| 247 | # dispose les lignes d'un calendrier de 7 colonnes (les jours) |
---|
| 248 | # chaque case est garnie avec les evenements du jour figurant dans $evenements |
---|
| 249 | |
---|
| 250 | function http_calendrier_mois_sept($annee, $mois, $premier_jour, $dernier_jour,$evenements, $script, $ancre='') |
---|
| 251 | { |
---|
| 252 | global $couleur_claire, $spip_lang_left, $spip_lang_right; |
---|
| 253 | |
---|
| 254 | // affichage du debut de semaine hors periode |
---|
| 255 | $init = ''; |
---|
| 256 | $debut = date("w",mktime(1,1,1,$mois,$premier_jour,$annee)); |
---|
| 257 | for ($i=$debut ? $debut : 7;$i>1;$i--) |
---|
| 258 | {$init .= "\n\t<td style=\"border-bottom: 1px solid $couleur_claire;\"> </td>";} |
---|
| 259 | |
---|
| 260 | $total = ''; |
---|
| 261 | $ligne = ''; |
---|
| 262 | $today=date("Ymd"); |
---|
| 263 | for ($j=$premier_jour; $j<=$dernier_jour; $j++){ |
---|
| 264 | $nom = mktime(1,1,1,$mois,$j,$annee); |
---|
| 265 | $jour = date("d",$nom); |
---|
| 266 | $jour_semaine = date("w",$nom); |
---|
| 267 | $mois_en_cours = date("m",$nom); |
---|
| 268 | $annee_en_cours = date("Y",$nom); |
---|
| 269 | $amj = date("Y",$nom) . $mois_en_cours . $jour; |
---|
| 270 | $couleur_texte = "black"; |
---|
| 271 | $couleur_fond = ""; |
---|
| 272 | |
---|
| 273 | if ($jour_semaine == 0) $couleur_fond = $couleur_claire; |
---|
| 274 | else if ($jour_semaine==1) |
---|
| 275 | { |
---|
| 276 | if ($ligne||$init) |
---|
| 277 | $total .= "\n<tr>$init$ligne\n</tr>"; |
---|
| 278 | $ligne = $init = ''; |
---|
| 279 | } |
---|
| 280 | |
---|
| 281 | if ($amj == $today) { |
---|
| 282 | $couleur_texte = "red"; |
---|
| 283 | $couleur_fond = "white"; |
---|
| 284 | } |
---|
| 285 | $res = ''; |
---|
| 286 | if ($evts = $evenements[$amj]) { |
---|
| 287 | foreach ($evts as $evenement) |
---|
| 288 | { |
---|
| 289 | $res .= isset($evenement['DTSTART']) ? |
---|
| 290 | http_calendrier_avec_heure($evenement, $amj) : |
---|
| 291 | http_calendrier_sans_heure($evenement); |
---|
| 292 | } |
---|
| 293 | } |
---|
| 294 | |
---|
| 295 | $ligne .= "\n\t\t<td\tclass='calendrier-td' |
---|
| 296 | style='height: 100px; border-bottom: 1px solid $couleur_claire; border-$spip_lang_right: 1px solid $couleur_claire;" . |
---|
| 297 | ($couleur_fond ? " background-color: $couleur_fond;" : "") . |
---|
| 298 | ($ligne ? "" : |
---|
| 299 | " border-$spip_lang_left: 1px solid $couleur_claire;") . |
---|
| 300 | "'>" . |
---|
| 301 | (!_DIR_RESTREINT ? |
---|
| 302 | (http_href(calendrier_args_date($script,$annee_en_cours, $mois_en_cours, $jour, "jour", $ancre), |
---|
| 303 | $jour, |
---|
| 304 | $jour, "color: $couleur_texte",'calendrier-helvetica16') . |
---|
| 305 | http_calendrier_ics_message($annee_en_cours, $mois_en_cours, $jour, false)): |
---|
| 306 | http_calendrier_mois_clics($annee_en_cours, $mois_en_cours, $jour, $script, $ancre)) . |
---|
| 307 | $res . |
---|
| 308 | "\n\t</td>"; |
---|
| 309 | } |
---|
| 310 | return $total . ($ligne ? "\n<tr>$ligne\n</tr>" : ''); |
---|
| 311 | } |
---|
| 312 | |
---|
| 313 | // typo pour l'espace public |
---|
| 314 | |
---|
| 315 | function http_calendrier_mois_clics($annee, $mois, $jour, $script, $ancre) |
---|
| 316 | { |
---|
| 317 | $d = mktime(0,0,0,$mois, $jour, $annee); |
---|
| 318 | $semaine = date("W", $d); |
---|
| 319 | return |
---|
| 320 | "<table width='100%'>\n<tr><td style='text-align: left'>". |
---|
| 321 | http_href(calendrier_args_date($script,$annee, $mois, $jour, "jour", $ancre), |
---|
| 322 | "$jour/$mois", |
---|
| 323 | _T('date_jour_'. (1+date('w',$d))) . |
---|
| 324 | " $jour " . |
---|
| 325 | _T('date_mois_'.(0+$mois)), |
---|
| 326 | '','calendrier-helvetica16') . |
---|
| 327 | "</td><td style='text-align: right'>" . |
---|
| 328 | http_href(calendrier_args_date($script,$annee, $mois, $jour, "semaine", $ancre), |
---|
| 329 | $semaine, |
---|
| 330 | _T('date_semaines') . ": $semaine", |
---|
| 331 | '', |
---|
| 332 | 'calendrier-helvetica16') . |
---|
| 333 | "</td></tr>\n</table>"; |
---|
| 334 | } |
---|
| 335 | |
---|
| 336 | # dispose les evenements d'une semaine |
---|
| 337 | |
---|
| 338 | function http_calendrier_semaine($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt) |
---|
| 339 | { |
---|
| 340 | global $spip_ecran; |
---|
| 341 | if (!isset($spip_ecran)) $spip_ecran = 'large'; |
---|
| 342 | |
---|
| 343 | $init = date("w",mktime(1,1,1,$mois,$jour,$annee)); |
---|
| 344 | $init = $jour+1-($init ? $init : 7); |
---|
| 345 | $sd = ''; |
---|
| 346 | |
---|
| 347 | if (is_array($evt)) |
---|
| 348 | { |
---|
| 349 | if($partie_cal!='sansheure'){ |
---|
| 350 | $sd = http_calendrier_sans_date($annee, $mois,$evt[0]); |
---|
| 351 | $finurl = "&echelle=$echelle&partie_cal=$partie_cal$ancre"; |
---|
| 352 | $evt = |
---|
| 353 | http_calendrier_semaine_noms($annee, $mois, $init, $script, $finurl) . |
---|
| 354 | http_calendrier_semaine_sept($annee, $mois, $init, $echelle, $partie_cal, $evt); |
---|
| 355 | } |
---|
| 356 | else { |
---|
| 357 | list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt; |
---|
| 358 | if ($sansduree) |
---|
| 359 | foreach($sansduree as $d => $r) |
---|
| 360 | $evenements[$d] = !$evenements[$d] ? $r : array_merge($evenements[$d], $r); |
---|
| 361 | $finurl = "&echelle=$echelle&partie_cal=$partie_cal$ancre"; |
---|
| 362 | $evt = |
---|
| 363 | http_calendrier_semaine_noms($annee, $mois, $init, $script, $finurl) . |
---|
| 364 | http_calendrier_mois_sept($annee, $mois, $init, $init+ 6, $evenements, $script); |
---|
| 365 | } |
---|
| 366 | } else $evt = "<tr><td>$evt</td></tr>"; |
---|
| 367 | |
---|
| 368 | return |
---|
| 369 | "\n<table class='calendrier-table-$spip_ecran' cellspacing='0' cellpadding='0'>" . |
---|
| 370 | http_calendrier_semaine_navigation($annee, $mois, $init, $echelle, $partie_cal, $script, $ancre) . |
---|
| 371 | $evt . |
---|
| 372 | "</table>" . |
---|
| 373 | $sd . |
---|
| 374 | (_DIR_RESTREINT ? "" : http_calendrier_aide_mess()); |
---|
| 375 | } |
---|
| 376 | |
---|
| 377 | function http_calendrier_semaine_navigation($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre){ |
---|
| 378 | |
---|
| 379 | $fin = mktime (1,1,1,$mois, $jour+6, $annee); |
---|
| 380 | $fjour = date("d",$fin); |
---|
| 381 | $fmois = date("m",$fin); |
---|
| 382 | $fannee = date("Y",$fin); |
---|
| 383 | $fin = date("Y-m-d", $fin); |
---|
| 384 | $debut = mktime (1,1,1,$mois, $jour, $annee); |
---|
| 385 | $djour = date("d",$debut)+0; |
---|
| 386 | $dmois = date("m",$debut); |
---|
| 387 | $dannee = date("Y",$debut); |
---|
| 388 | $debut = date("Y-m-d", $debut); |
---|
| 389 | $periode = (($dannee != $fannee) ? |
---|
| 390 | (affdate($debut)." - ".affdate($fin)) : |
---|
| 391 | (($dmois == $fmois) ? |
---|
| 392 | ($djour ." - ".affdate_jourcourt($fin)) : |
---|
| 393 | (affdate_jourcourt($debut)." - ".affdate_jourcourt($fin)))); |
---|
| 394 | |
---|
| 395 | return |
---|
| 396 | "\n<tr><td colspan='7'>" . |
---|
| 397 | http_calendrier_navigation($annee, |
---|
| 398 | $mois, |
---|
| 399 | $jour, |
---|
| 400 | $echelle, |
---|
| 401 | $partie_cal, |
---|
| 402 | $periode, |
---|
| 403 | $script, |
---|
| 404 | array($dannee, $dmois, ($djour-7), "semaine"), |
---|
| 405 | array($fannee, $fmois, ($fjour+1), "semaine"), |
---|
| 406 | 'semaine', |
---|
| 407 | $ancre) . |
---|
| 408 | "</td></tr>\n"; |
---|
| 409 | } |
---|
| 410 | |
---|
| 411 | function http_calendrier_semaine_noms($annee, $mois, $jour, $script, $ancre){ |
---|
| 412 | global $couleur_claire; |
---|
| 413 | |
---|
| 414 | $bandeau = ''; |
---|
| 415 | |
---|
| 416 | for ($j=$jour; $j<$jour+7;$j++){ |
---|
| 417 | $nom = mktime(0,0,0,$mois,$j,$annee); |
---|
| 418 | $num = intval(date("d", $nom)) ; |
---|
| 419 | $numois = date("m",$nom); |
---|
| 420 | $nomjour = _T('date_jour_'. (1+date('w',$nom))); |
---|
| 421 | $clic = ($nomjour . " " . $num . (($num == 1) ? 'er' : '') . |
---|
| 422 | ($ancre ? ('/' . $numois) : '')); |
---|
| 423 | $bandeau .= |
---|
| 424 | "\n\t<th class='calendrier-th'>" . |
---|
| 425 | http_href(calendrier_args_date($script, date("Y",$nom), $numois, $num, 'jour', $ancre), $clic, $clic) . |
---|
| 426 | "</th>"; |
---|
| 427 | } |
---|
| 428 | return "\n<tr" . |
---|
| 429 | (!isset($couleur_claire) ? "" : " style='background-color: $couleur_claire'") . |
---|
| 430 | ">$bandeau\n</tr>"; |
---|
| 431 | } |
---|
| 432 | |
---|
| 433 | function http_calendrier_semaine_sept($annee, $mois, $jour, $echelle, $partie_cal, $evt) |
---|
| 434 | { |
---|
| 435 | global $couleur_claire, $spip_ecran, $spip_lang_left; |
---|
| 436 | |
---|
| 437 | $largeur = ($spip_ecran == "large") ? 90 : 60; |
---|
| 438 | |
---|
| 439 | $today=date("Ymd"); |
---|
| 440 | $total = ''; |
---|
| 441 | $style = "border-$spip_lang_left: 1px solid $couleur_claire; border-bottom: 1px solid $couleur_claire; border-top: 0px; border-right: 0px;"; |
---|
| 442 | for ($j=$jour; $j<$jour+7;$j++){ |
---|
| 443 | $v = mktime(0,0,0,$mois, $j, $annee); |
---|
| 444 | $total .= "\n<td class='calendrier-td'>" . |
---|
| 445 | http_calendrier_ics($annee,$mois,$j, $echelle, $partie_cal, $largeur, $evt, ($style . ( (date("w",$v)==0 && isset($couleur_claire)) ? |
---|
| 446 | " background-color: $couleur_claire;" : |
---|
| 447 | ((date("Ymd", $v) == $today) ? |
---|
| 448 | " background-color: white;" : |
---|
| 449 | " background-color: #eeeeee;")))) . |
---|
| 450 | "\n</td>"; |
---|
| 451 | } |
---|
| 452 | return "\n<tr class='calendrier-verdana10'>$total</tr>"; |
---|
| 453 | } |
---|
| 454 | |
---|
| 455 | |
---|
| 456 | function http_calendrier_jour($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt){ |
---|
| 457 | global $spip_ecran; |
---|
| 458 | if (!isset($spip_ecran)) $spip_ecran = 'large'; |
---|
| 459 | |
---|
| 460 | return |
---|
| 461 | "\n<table class='calendrier-table-$spip_ecran'>" . |
---|
| 462 | "\n<tr><td class='calendrier-td-gauche'></td>" . |
---|
| 463 | "<td colspan='5' class='calendrier-td-centre'>" . |
---|
| 464 | http_calendrier_navigation($annee, $mois, $jour, $echelle, $partie_cal, |
---|
| 465 | (nom_jour("$annee-$mois-$jour") . " " . |
---|
| 466 | affdate_jourcourt("$annee-$mois-$jour")), |
---|
| 467 | $script, |
---|
| 468 | array($annee, $mois, ($jour-1), "jour"), |
---|
| 469 | array($annee, $mois, ($jour+1), "jour"), |
---|
| 470 | 'jour', |
---|
| 471 | $ancre) . |
---|
| 472 | "</td>" . |
---|
| 473 | "<td class='calendrier-td-droit calendrier-arial10'></td>" . |
---|
| 474 | "</tr>" . |
---|
| 475 | (!is_array($evt) ? ("<tr><td>$evt</td></tr>") : |
---|
| 476 | (http_calendrier_jour_noms($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre) . |
---|
| 477 | http_calendrier_jour_sept($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt))) . |
---|
| 478 | "</table>"; |
---|
| 479 | } |
---|
| 480 | |
---|
| 481 | function http_calendrier_jour_noms($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre){ |
---|
| 482 | |
---|
| 483 | global $spip_ecran; |
---|
| 484 | $finurl = "&echelle=$echelle&partie_cal=$partie_cal$ancre"; |
---|
| 485 | |
---|
| 486 | $gauche = (_DIR_RESTREINT || ($spip_ecran != "large")); |
---|
| 487 | return |
---|
| 488 | "\n<tr><td class='calendrier-td-gauche'>" . |
---|
| 489 | ($gauche ? '' : |
---|
| 490 | http_calendrier_ics_titre($annee,$mois,$jour-1,$script, $finurl)) . |
---|
| 491 | "</td><td colspan='5' class='calendrier-td-centre'>" . |
---|
| 492 | (_DIR_RESTREINT ? '' : |
---|
| 493 | ("\n\t<div class='calendrier-titre'>" . |
---|
| 494 | http_calendrier_ics_message($annee, $mois, $jour, true) . |
---|
| 495 | '</div>')) . |
---|
| 496 | "</td><td class='calendrier-td-droit calendrier-arial10'> " . |
---|
| 497 | (_DIR_RESTREINT ? '' : http_calendrier_ics_titre($annee,$mois,$jour+1,$script, $finurl)) . |
---|
| 498 | "</td></tr>"; |
---|
| 499 | } |
---|
| 500 | |
---|
| 501 | function http_calendrier_jour_sept($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt){ |
---|
| 502 | global $spip_ecran; |
---|
| 503 | |
---|
| 504 | $gauche = (_DIR_RESTREINT || ($spip_ecran != "large")); |
---|
| 505 | if ($partie_cal!="sansheure") |
---|
| 506 | return |
---|
| 507 | "<tr class='calendrier-verdana10'>" . |
---|
| 508 | # afficher en reduction le tableau du jour precedent |
---|
| 509 | "\n<td class='calendrier-td-gauche'>" . |
---|
| 510 | ($gauche ? '' : |
---|
| 511 | http_calendrier_ics($annee, $mois, $jour-1, $echelle, $partie_cal, 0, $evt)) . |
---|
| 512 | "</td><td colspan='5' class='calendrier-td-centre'>" . |
---|
| 513 | http_calendrier_ics($annee, $mois, $jour, $echelle, $partie_cal, 300, $evt) . |
---|
| 514 | '</td>' . |
---|
| 515 | # afficher en reduction le tableau du jour suivant |
---|
| 516 | "\n<td class='calendrier-td-droit'>" . |
---|
| 517 | |
---|
| 518 | (_DIR_RESTREINT ? '' : |
---|
| 519 | http_calendrier_ics($annee, $mois, $jour+1, $echelle, $partie_cal, 0, $evt)) . |
---|
| 520 | '</td>' . |
---|
| 521 | "\n</tr>"; |
---|
| 522 | else { |
---|
| 523 | list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt; |
---|
| 524 | if ($sansduree) |
---|
| 525 | foreach($sansduree as $d => $r) |
---|
| 526 | $evenements[$d] = !$evenements[$d] ? $r : array_merge($evenements[$d], $r); |
---|
| 527 | return |
---|
| 528 | "<tr class='calendrier-verdana10'>" . |
---|
| 529 | # afficher en reduction le tableau du jour precedent |
---|
| 530 | "\n<td class='calendrier-td-gauche'>" . |
---|
| 531 | ($gauche ? '' : |
---|
| 532 | "<table width='100%'>". |
---|
| 533 | http_calendrier_mois_sept($annee, $mois, $jour-1, $jour-1,$evenements, $script, $ancre) |
---|
| 534 | ."</table>" |
---|
| 535 | ) . |
---|
| 536 | "</td><td colspan='5' class='calendrier-td-centre'>" . |
---|
| 537 | "<table width='100%'>". |
---|
| 538 | http_calendrier_mois_sept($annee, $mois, $jour, $jour,$evenements, $script, $ancre) . |
---|
| 539 | "</table>" . |
---|
| 540 | '</td>' . |
---|
| 541 | # afficher en reduction le tableau du jour suivant |
---|
| 542 | "\n<td class='calendrier-td-droit'>" . |
---|
| 543 | (_DIR_RESTREINT ? '' : |
---|
| 544 | "<table width='100%'>". |
---|
| 545 | http_calendrier_mois_sept($annee, $mois, $jour+1, $jour+1,$evenements, $script, $ancre) |
---|
| 546 | ."</table>" |
---|
| 547 | ) . |
---|
| 548 | '</td>' . |
---|
| 549 | "\n</tr>"; |
---|
| 550 | |
---|
| 551 | } |
---|
| 552 | } |
---|
| 553 | |
---|
| 554 | |
---|
| 555 | // Conversion d'un tableau de champ ics en des balises div positionnees |
---|
| 556 | // Le champ categories indique la Classe de CSS a prendre |
---|
| 557 | // $echelle est le nombre de secondes representees par 1 pixel |
---|
| 558 | |
---|
| 559 | function http_calendrier_ics($annee, $mois, $jour,$echelle, $partie_cal, $largeur, $evt, $style='') { |
---|
| 560 | global $spip_lang_left; |
---|
| 561 | |
---|
| 562 | // tableau |
---|
| 563 | if ($partie_cal == "soir") { |
---|
| 564 | $debut = 12; |
---|
| 565 | $fin = 23; |
---|
| 566 | } else if ($partie_cal == "matin") { |
---|
| 567 | $debut = 4; |
---|
| 568 | $fin = 15; |
---|
| 569 | } else { |
---|
| 570 | $debut = 7; |
---|
| 571 | $fin =21; |
---|
| 572 | } |
---|
| 573 | |
---|
| 574 | if ($echelle==0) $echelle = DEFAUT_D_ECHELLE; |
---|
| 575 | |
---|
| 576 | list($dimheure, $dimjour, $fontsize, $padding) = |
---|
| 577 | calendrier_echelle($debut, $fin, $echelle); |
---|
| 578 | $modif_decalage = round($largeur/8); |
---|
| 579 | |
---|
| 580 | $date = date("Ymd", mktime(0,0,0,$mois, $jour, $annee)); |
---|
| 581 | list($sansheure, $avecheure) = $evt; |
---|
| 582 | $avecheure = $avecheure[$date]; |
---|
| 583 | $sansheure = $sansheure[$date]; |
---|
| 584 | |
---|
| 585 | $total = ''; |
---|
| 586 | |
---|
| 587 | if ($avecheure) |
---|
| 588 | { |
---|
| 589 | $tous = 1 + count($avecheure); |
---|
| 590 | $i = 0; |
---|
| 591 | foreach($avecheure as $evenement){ |
---|
| 592 | |
---|
| 593 | $d = $evenement['DTSTART']; |
---|
| 594 | $e = $evenement['DTEND']; |
---|
| 595 | $d_jour = substr($d,0,8); |
---|
| 596 | $e_jour = $e ? substr($e,0,8) : $d_jour; |
---|
| 597 | $debut_avant = false; |
---|
| 598 | $fin_apres = false; |
---|
| 599 | |
---|
| 600 | /* disparues sauf erreur |
---|
| 601 | $radius_top = " radius-top"; |
---|
| 602 | $radius_bottom = " radius-bottom"; |
---|
| 603 | */ |
---|
| 604 | if ($d_jour <= $date AND $e_jour >= $date) |
---|
| 605 | { |
---|
| 606 | |
---|
| 607 | $i++; |
---|
| 608 | |
---|
| 609 | // Verifier si debut est jour precedent |
---|
| 610 | if (substr($d,0,8) < $date) |
---|
| 611 | { |
---|
| 612 | $heure_debut = 0; $minutes_debut = 0; |
---|
| 613 | $debut_avant = true; |
---|
| 614 | $radius_top = ""; |
---|
| 615 | } |
---|
| 616 | else |
---|
| 617 | { |
---|
| 618 | $heure_debut = substr($d,-6,2); |
---|
| 619 | $minutes_debut = substr($d,-4,2); |
---|
| 620 | } |
---|
| 621 | |
---|
| 622 | if (!$e) |
---|
| 623 | { |
---|
| 624 | $heure_fin = $heure_debut ; |
---|
| 625 | $minutes_fin = $minutes_debut ; |
---|
| 626 | $bordure = "border-bottom: dashed 2px"; |
---|
| 627 | } |
---|
| 628 | else |
---|
| 629 | { |
---|
| 630 | $bordure = ""; |
---|
| 631 | if (substr($e,0,8) > $date) |
---|
| 632 | { |
---|
| 633 | $heure_fin = 23; $minutes_fin = 59; |
---|
| 634 | $fin_apres = true; |
---|
| 635 | $radius_bottom = ""; |
---|
| 636 | } |
---|
| 637 | else |
---|
| 638 | { |
---|
| 639 | $heure_fin = substr($e,-6,2); |
---|
| 640 | $minutes_fin = substr($e,-4,2); |
---|
| 641 | } |
---|
| 642 | } |
---|
| 643 | |
---|
| 644 | if ($debut_avant && $fin_apres) $opacity = "-moz-opacity: 0.6; filter: alpha(opacity=60);"; |
---|
| 645 | else $opacity = ""; |
---|
| 646 | |
---|
| 647 | $haut = calendrier_top ("$heure_debut:$minutes_debut", $debut, $fin, $dimheure, $dimjour, $fontsize); |
---|
| 648 | $bas = !$e ? $haut :calendrier_top ("$heure_fin:$minutes_fin", $debut, $fin, $dimheure, $dimjour, $fontsize); |
---|
| 649 | $hauteur = calendrier_height ("$heure_debut:$minutes_debut", "$heure_fin:$minutes_fin", $debut, $fin, $dimheure, $dimjour, $fontsize); |
---|
| 650 | |
---|
| 651 | if ($bas_prec >= $haut) $decale += $modif_decalage; |
---|
| 652 | else $decale = (4 * $fontsize); |
---|
| 653 | if ($bas > $bas_prec) $bas_prec = $bas; |
---|
| 654 | |
---|
| 655 | $url = $evenement['URL']; |
---|
| 656 | $desc = propre($evenement['DESCRIPTION']); |
---|
| 657 | $perso = substr($evenement['ATTENDEE'], 0,strpos($evenement['ATTENDEE'],'@')); |
---|
| 658 | $lieu = $evenement['LOCATION']; |
---|
| 659 | $sum = ereg_replace(' +',' ', typo($evenement['SUMMARY'])); |
---|
| 660 | if (!$sum) { $sum = $desc; $desc = '';} |
---|
| 661 | if (!$sum) { $sum = $lieu; $lieu = '';} |
---|
| 662 | if (!$sum) { $sum = $perso; $perso = '';} |
---|
| 663 | if ($sum) |
---|
| 664 | $sum = "<span class='calendrier-verdana10'><span style='font-weight: bold;'>$sum</span>$lieu $perso</span>"; |
---|
| 665 | if (($largeur > 90) && $desc) |
---|
| 666 | $sum .= "\n<br /><span class='calendrier-noir'>$desc</span>"; |
---|
| 667 | $colors = $evenement['CATEGORIES']; |
---|
| 668 | $sum = ((!$url) ? $sum : http_href(quote_amp($url), $sum, $desc,"border: 0px",$colors)); |
---|
| 669 | $sum = pipeline('agenda_rendu_evenement',array('args'=>array('evenement'=>$evenement,'type'=>'ics'),'data'=>$sum)); |
---|
| 670 | |
---|
| 671 | $total .= "\n<div class='calendrier-arial10 $colors' |
---|
| 672 | style='cursor: auto; position: absolute; overflow: hidden;$opacity z-index: " . |
---|
| 673 | $i . |
---|
| 674 | "; $spip_lang_left: " . |
---|
| 675 | $decale . |
---|
| 676 | "px; top: " . |
---|
| 677 | $haut . |
---|
| 678 | "px; height: " . |
---|
| 679 | $hauteur . |
---|
| 680 | "px; width: ". |
---|
| 681 | ($largeur - 2 * ($padding+1)) . |
---|
| 682 | "px; font-size: ". |
---|
| 683 | floor($fontsize * 1.3) . |
---|
| 684 | "px; padding: " . |
---|
| 685 | $padding . |
---|
| 686 | "px; $bordure' |
---|
| 687 | onmouseover=\"this.style.zIndex=" . $tous . "\" |
---|
| 688 | onmouseout=\"this.style.zIndex=" . $i . "\">" . |
---|
| 689 | $sum . |
---|
| 690 | "</div>"; |
---|
| 691 | } |
---|
| 692 | } |
---|
| 693 | } |
---|
| 694 | return |
---|
| 695 | "\n<div class='calendrier-jour' style='height: ${dimjour}px; font-size: ${fontsize}px;$style'>\n" . |
---|
| 696 | http_calendrier_ics_grille($debut, $fin, $dimheure, $dimjour, $fontsize) . |
---|
| 697 | $total . |
---|
| 698 | "\n</div>" . |
---|
| 699 | (!$sansheure ? "" : |
---|
| 700 | http_calendrier_ics_trois($sansheure, $largeur, $dimjour, $fontsize, '')) ; |
---|
| 701 | |
---|
| 702 | } |
---|
| 703 | |
---|
| 704 | # Affiche une grille horaire |
---|
| 705 | # Selon l'echelle demandee, on affiche heure, 1/2 heure 1/4 heure, 5minutes. |
---|
| 706 | |
---|
| 707 | function http_calendrier_ics_grille($debut, $fin, $dimheure, $dimjour, $fontsize) |
---|
| 708 | { |
---|
| 709 | global $spip_lang_left, $spip_lang_right; |
---|
| 710 | $slice = floor($dimheure/(2*$fontsize)); |
---|
| 711 | if ($slice%2) $slice --; |
---|
| 712 | if (!$slice) $slice = 1; |
---|
| 713 | |
---|
| 714 | $total = ''; |
---|
| 715 | for ($i = $debut; $i < $fin; $i++) { |
---|
| 716 | for ($j=0; $j < $slice; $j++) |
---|
| 717 | { |
---|
| 718 | $total .= "\n<div class='calendrier-heure" . |
---|
| 719 | ($j ? "face" : "pile") . |
---|
| 720 | "' style='$spip_lang_left: 0px; top: ". |
---|
| 721 | calendrier_top ("$i:".sprintf("%02d",floor(($j*60)/$slice)), $debut, $fin, $dimheure, $dimjour, $fontsize) . |
---|
| 722 | "px;'>$i:" . |
---|
| 723 | sprintf("%02d",floor(($j*60)/$slice)) . |
---|
| 724 | "</div>"; |
---|
| 725 | } |
---|
| 726 | } |
---|
| 727 | |
---|
| 728 | return "\n<div class='calendrier-heurepile' style='border: 0px; $spip_lang_left: 0px; top: 2px;'>0:00</div>" . |
---|
| 729 | $total . |
---|
| 730 | "\n<div class='calendrier-heurepile' style='$spip_lang_left: 0px; top: ". |
---|
| 731 | calendrier_top ("$fin:00", $debut, $fin, $dimheure, $dimjour, $fontsize). |
---|
| 732 | "px;'>$fin:00</div>" . |
---|
| 733 | "\n<div class='calendrier-heurepile' style='border: 0px; $spip_lang_left: 0px; top: ". |
---|
| 734 | ($dimjour - $fontsize - 2) . |
---|
| 735 | "px;'>23:59</div>"; |
---|
| 736 | } |
---|
| 737 | |
---|
| 738 | # si la largeur le permet, les evenements sans duree, |
---|
| 739 | # se placent a cote des autres, sinon en dessous |
---|
| 740 | |
---|
| 741 | function http_calendrier_ics_trois($evt, $largeur, $dimjour, $fontsize, $border) |
---|
| 742 | { |
---|
| 743 | global $spip_lang_left; |
---|
| 744 | |
---|
| 745 | $types = array(); |
---|
| 746 | foreach($evt as $v) |
---|
| 747 | $types[isset($v['DESCRIPTION']) ? 'info_articles' : |
---|
| 748 | (isset($v['DTSTART']) ? 'info_liens_syndiques_3' : |
---|
| 749 | 'info_breves_02')][] = $v; |
---|
| 750 | $res = ''; |
---|
| 751 | foreach ($types as $k => $v) { |
---|
| 752 | $res2 = ''; |
---|
| 753 | foreach ($v as $evenement) { |
---|
| 754 | $res2 .= http_calendrier_sans_heure($evenement); |
---|
| 755 | } |
---|
| 756 | $res .= "\n<div class='calendrier-verdana10 calendrier-titre'>". |
---|
| 757 | _T($k) . |
---|
| 758 | "</div>" . |
---|
| 759 | $res2; |
---|
| 760 | } |
---|
| 761 | |
---|
| 762 | if ($largeur > 90) { |
---|
| 763 | $largeur += (5*$fontsize); |
---|
| 764 | $pos = "-$dimjour"; |
---|
| 765 | } else { $largeur = (3*$fontsize); $pos= 0; } |
---|
| 766 | |
---|
| 767 | return "\n<div style='position: relative; z-index: 2; top: ${pos}px; margin-$spip_lang_left: " . $largeur . "px'>$res</div>"; |
---|
| 768 | } |
---|
| 769 | |
---|
| 770 | function http_calendrier_ics_titre($annee, $mois, $jour,$script, $finurl='') |
---|
| 771 | { |
---|
| 772 | $date = mktime(0,0,0,$mois, $jour, $annee); |
---|
| 773 | $jour = date("d",$date); |
---|
| 774 | $mois = date("m",$date); |
---|
| 775 | $annee = date("Y",$date); |
---|
| 776 | $nom = affdate_jourcourt("$annee-$mois-$jour"); |
---|
| 777 | return "<div class='calendrier-arial10 calendrier-titre'>" . |
---|
| 778 | http_href(calendrier_args_date($script, $annee, $mois, $jour, 'jour', $finurl), $nom, $nom, '', 'calendrier-noir') . |
---|
| 779 | "</div>"; |
---|
| 780 | } |
---|
| 781 | |
---|
| 782 | |
---|
| 783 | function http_calendrier_sans_date($annee, $mois, $evenements) |
---|
| 784 | { |
---|
| 785 | $r = $evenements[0+($annee . $mois . "00")]; |
---|
| 786 | if (!$r) return ""; |
---|
| 787 | $res = "\n<div class='calendrier-arial10 calendrier-titre'>". |
---|
| 788 | _T('info_mois_courant'). |
---|
| 789 | "</div>"; |
---|
| 790 | foreach ($r as $evenement) $res .= http_calendrier_sans_heure($evenement); |
---|
| 791 | return $res; |
---|
| 792 | } |
---|
| 793 | |
---|
| 794 | |
---|
| 795 | function http_calendrier_sans_heure($ev) |
---|
| 796 | { |
---|
| 797 | $desc = propre($ev['DESCRIPTION']); |
---|
| 798 | $sum = $ev['SUMMARY']; |
---|
| 799 | if (!$sum) $sum = $desc; |
---|
| 800 | $i = isset($ev['DESCRIPTION']) ? 11 : 9; // 11: article; 9:autre |
---|
| 801 | if ($ev['URL']) |
---|
| 802 | $sum = http_href(quote_amp($ev['URL']), $sum, $desc); |
---|
| 803 | $sum = pipeline('agenda_rendu_evenement',array('args'=>array('evenement'=>$ev,'type'=>'sans_heure'),'data'=>$sum)); |
---|
| 804 | return "\n<div class='calendrier-arial$i calendrier-evenement'>" . |
---|
| 805 | "<span class='" . $ev['CATEGORIES'] . "'> </span> $sum</div>"; |
---|
| 806 | } |
---|
| 807 | |
---|
| 808 | function http_calendrier_avec_heure($evenement, $amj) |
---|
| 809 | { |
---|
| 810 | $jour_debut = substr($evenement['DTSTART'], 0,8); |
---|
| 811 | $jour_fin = substr($evenement['DTEND'], 0, 8); |
---|
| 812 | if ($jour_fin <= 0) $jour_fin = $jour_debut; |
---|
| 813 | if (($jour_debut <= 0) OR ($jour_debut > $amj) OR ($jour_fin < $amj)) |
---|
| 814 | return ""; |
---|
| 815 | |
---|
| 816 | $desc = propre($evenement['DESCRIPTION']); |
---|
| 817 | $sum = $evenement['SUMMARY']; |
---|
| 818 | if (!$sum) $sum = $desc; |
---|
| 819 | $sum = ereg_replace(' +',' ', typo($sum)); |
---|
| 820 | if ($lieu = $evenement['LOCATION']) |
---|
| 821 | $sum .= '<br />' . $lieu; |
---|
| 822 | if ($perso = $evenement['ATTENDEE']) |
---|
| 823 | $sum .= '<br />' . substr($evenement['ATTENDEE'], 0,strpos($evenement['ATTENDEE'],'@')); |
---|
| 824 | if ($evenement['URL']) |
---|
| 825 | $sum = http_href(quote_amp($evenement['URL']), $sum, $desc, 'border: 0px'); |
---|
| 826 | |
---|
| 827 | $sum = pipeline('agenda_rendu_evenement',array('args'=>array('evenement'=>$evenement,'type'=>'avec_heure'),'data'=>$sum)); |
---|
| 828 | $opacity = ""; |
---|
| 829 | $deb_h = substr($evenement['DTSTART'],-6,2); |
---|
| 830 | $deb_m = substr($evenement['DTSTART'],-4,2); |
---|
| 831 | $fin_h = substr($evenement['DTEND'],-6,2); |
---|
| 832 | $fin_m = substr($evenement['DTEND'],-4,2); |
---|
| 833 | |
---|
| 834 | if ($deb_h >0 OR $deb_m > 0) { |
---|
| 835 | if ((($deb_h > 0) OR ($deb_m > 0)) AND $amj == $jour_debut) |
---|
| 836 | { $deb = "<span style='font-weight: bold;'>" . $deb_h . ':' . $deb_m . '</span>';} |
---|
| 837 | else { |
---|
| 838 | $deb = '...'; |
---|
| 839 | } |
---|
| 840 | |
---|
| 841 | if ((($fin_h > 0) OR ($fin_m > 0)) AND $amj == $jour_fin) |
---|
| 842 | { $fin = "<span style='font-weight: bold;'>" . $fin_h . ':' . $fin_m . '</span> ';} |
---|
| 843 | else { |
---|
| 844 | $fin = '...'; |
---|
| 845 | } |
---|
| 846 | |
---|
| 847 | if ($amj == $jour_debut OR $amj == $jour_fin) { |
---|
| 848 | $sum = "<div>$deb-$fin</div>$sum"; |
---|
| 849 | } else { |
---|
| 850 | $opacity =' calendrier-opacity'; |
---|
| 851 | } |
---|
| 852 | } |
---|
| 853 | return "\n<div class='calendrier-arial10 calendrier-evenement " . $evenement['CATEGORIES'] ."$opacity'>$sum\n</div>\n"; |
---|
| 854 | } |
---|
| 855 | |
---|
| 856 | # Bandeau superieur d'un calendrier selon son $type (jour/mois/annee): |
---|
| 857 | # 2 icones vers les 2 autres types, a la meme date $jour $mois $annee |
---|
| 858 | # 2 icones de loupes pour zoom sur la meme date et le meme type |
---|
| 859 | # 2 fleches appelant le $script sur les periodes $pred/$suiv avec une $ancre |
---|
| 860 | # et le $nom du calendrier |
---|
| 861 | |
---|
| 862 | function http_calendrier_navigation($annee, $mois, $jour, $echelle, $partie_cal, $nom, $script, $args_pred, $args_suiv, $type, $ancre) |
---|
| 863 | { |
---|
| 864 | global $spip_lang_right, $spip_lang_left, $couleur_foncee; |
---|
| 865 | |
---|
| 866 | if (!$echelle) $echelle = DEFAUT_D_ECHELLE; |
---|
| 867 | |
---|
| 868 | if ($args_pred) { |
---|
| 869 | list($a, $m, $j, $t) = $args_pred; |
---|
| 870 | $args_pred = http_href(calendrier_args_date($script, $a, $m, $j, $t, "&echelle=$echelle&partie_cal=$partie_cal$ancre"), |
---|
| 871 | http_img_pack("fleche-$spip_lang_left.png", '<<<', "class='calendrier-png'"), |
---|
| 872 | _T('precedent')); |
---|
| 873 | } |
---|
| 874 | |
---|
| 875 | if ($args_suiv) { |
---|
| 876 | list($a, $m, $j, $t) = $args_suiv; |
---|
| 877 | $args_suiv = http_href(calendrier_args_date($script, $a, $m, $j, $t, "&echelle=$echelle&partie_cal=$partie_cal$ancre"), |
---|
| 878 | http_img_pack("fleche-$spip_lang_right.png", '>>>', "class='calendrier-png'"), |
---|
| 879 | _T('suivant')); |
---|
| 880 | } |
---|
| 881 | |
---|
| 882 | $today=getdate(time()); |
---|
| 883 | $jour_today = $today["mday"]; |
---|
| 884 | $mois_today = $today["mon"]; |
---|
| 885 | $annee_today = $today["year"]; |
---|
| 886 | |
---|
| 887 | $id = 'nav-agenda' .ereg_replace('[^A-Za-z0-9]', '', $ancre); |
---|
| 888 | |
---|
| 889 | return |
---|
| 890 | "<div class='navigation-calendrier calendrier-moztop8'" |
---|
| 891 | . (!isset($couleur_foncee) ? "" : "\nstyle='background-color: $couleur_foncee;'") |
---|
| 892 | . "><div style='float: $spip_lang_right; padding-left: 5px; padding-right: 5px;'>" |
---|
| 893 | . (($type == "mois") ? '' : |
---|
| 894 | ( |
---|
| 895 | http_href_img(calendrier_args_date($script, $annee, $mois, $jour, $type, "&echelle=$echelle&partie_cal=sansheure$ancre"), |
---|
| 896 | "sans-heure.gif", |
---|
| 897 | "class='calendrier-png" . |
---|
| 898 | (($partie_cal == "sansheure") ? " calendrier-opacity'" : "'"), |
---|
| 899 | _T('sans_heure')) |
---|
| 900 | .http_href_img(calendrier_args_date($script, $annee, $mois, $jour, $type, "&echelle=$echelle&partie_cal=tout$ancre"), |
---|
| 901 | "heures-tout.png", |
---|
| 902 | "class='calendrier-png" . |
---|
| 903 | (($partie_cal == "tout") ? " calendrier-opacity'" : "'"), |
---|
| 904 | _T('cal_jour_entier')) |
---|
| 905 | .http_href_img(calendrier_args_date($script, $annee, $mois, $jour, $type, "&echelle=$echelle&partie_cal=matin$ancre"), |
---|
| 906 | "heures-am.png", |
---|
| 907 | "class='calendrier-png" . |
---|
| 908 | (($partie_cal == "matin") ? " calendrier-opacity'" : "'"), |
---|
| 909 | _T('cal_matin')) |
---|
| 910 | |
---|
| 911 | .http_href_img(calendrier_args_date($script, $annee, $mois, $jour, $type, "&echelle=$echelle&partie_cal=soir$ancre"), |
---|
| 912 | "heures-pm.png", |
---|
| 913 | "class='calendrier-png" . |
---|
| 914 | (($partie_cal == "soir") ? " calendrier-opacity'" : "'"), |
---|
| 915 | _T('cal_apresmidi')) |
---|
| 916 | . " " |
---|
| 917 | . http_href_img(calendrier_args_date($script, $annee, $mois, $jour, $type, "&partie_cal=$partie_cal&echelle=" . |
---|
| 918 | floor($echelle * 1.5)) . $ancre, |
---|
| 919 | "loupe-moins.gif", |
---|
| 920 | '', |
---|
| 921 | _T('info_zoom'). '-') |
---|
| 922 | . http_href_img(calendrier_args_date($script, $annee, $mois, $jour, $type, "&partie_cal=$partie_cal&echelle=" . |
---|
| 923 | floor($echelle / 1.5)) . $ancre, |
---|
| 924 | "loupe-plus.gif", |
---|
| 925 | '', |
---|
| 926 | _T('info_zoom'). '+') |
---|
| 927 | )) |
---|
| 928 | . http_href_img(calendrier_args_date($script,$annee, $mois, $jour, "jour", "&echelle=$echelle&partie_cal=$partie_cal$ancre"),"cal-jour.gif", |
---|
| 929 | (($type == 'jour') ? " class='calendrier-opacity'" : ''), |
---|
| 930 | _T('cal_par_jour')) |
---|
| 931 | |
---|
| 932 | . http_href_img(calendrier_args_date($script,$annee, $mois, $jour, "semaine", "&echelle=$echelle&partie_cal=$partie_cal$ancre"), "cal-semaine.gif", |
---|
| 933 | (($type == 'semaine') ? " class='calendrier-opacity'" : "" ), |
---|
| 934 | _T('cal_par_semaine')) |
---|
| 935 | |
---|
| 936 | . http_href_img(calendrier_args_date($script,$annee, $mois, $jour, "mois", "&echelle=$echelle&partie_cal=$partie_cal$ancre"),"cal-mois.gif", |
---|
| 937 | (($type == 'mois') ? " class='calendrier-opacity'" : "" ), |
---|
| 938 | _T('cal_par_mois')) |
---|
| 939 | . "</div>" |
---|
| 940 | . " " |
---|
| 941 | . http_href_img(calendrier_args_date($script,$annee_today, $mois_today, $jour_today, $type, "&echelle=$echelle&partie_cal=$partie_cal$ancre"), |
---|
| 942 | "cal-today.gif", |
---|
| 943 | (" onmouseover=\"montrer('$id');\"" . |
---|
| 944 | (($annee == $annee_today && $mois == $mois_today && (($type == 'mois') || ($jour == $jour_today))) |
---|
| 945 | ? " class='calendrier-opacity'" : "")), |
---|
| 946 | _T("ecrire:info_aujourdhui")) |
---|
| 947 | . " " |
---|
| 948 | . $args_pred |
---|
| 949 | . $args_suiv |
---|
| 950 | . " " |
---|
| 951 | . $nom |
---|
| 952 | . (_DIR_RESTREINT ? '' : aide("messcalen")) |
---|
| 953 | . "</div>" |
---|
| 954 | . http_calendrier_invisible($annee, $mois, $jour, $script, "&echelle=$echelle&partie_cal=$partie_cal$ancre", $id); |
---|
| 955 | } |
---|
| 956 | |
---|
| 957 | |
---|
| 958 | // fabrique un petit agenda accessible par survol |
---|
| 959 | |
---|
| 960 | function http_calendrier_invisible($annee, $mois, $jour, $script, $ancre, $id) |
---|
| 961 | { |
---|
| 962 | global $spip_lang_right, $spip_lang_left, $couleur_claire; |
---|
| 963 | $gadget = "<div style='position: relative;z-index: 1000;' |
---|
| 964 | onmouseover=\"montrer('$id');\" |
---|
| 965 | onmouseout=\"cacher('$id');\">" |
---|
| 966 | . "<table id='$id' class='calendrier-cadreagenda'" |
---|
| 967 | . (!isset($couleur_claire) ? "" : " style='background-color: $couleur_claire'") |
---|
| 968 | . ">\n<tr><td colspan='3' style='text-align:$spip_lang_left;'>"; |
---|
| 969 | |
---|
| 970 | $annee_avant = $annee - 1; |
---|
| 971 | $annee_apres = $annee + 1; |
---|
| 972 | |
---|
| 973 | for ($i=$mois; $i < 13; $i++) { |
---|
| 974 | $nom = nom_mois("$annee_avant-$i-1"); |
---|
| 975 | $gadget .= http_href(calendrier_args_date($script,$annee_avant, $i, 1, "mois", $ancre), |
---|
| 976 | $nom,$nom . ' ' . $annee_avant,'', 'calendrier-annee') ; |
---|
| 977 | } |
---|
| 978 | for ($i=1; $i < $mois - 1; $i++) { |
---|
| 979 | $nom = nom_mois("$annee-$i-1"); |
---|
| 980 | $gadget .= http_href(calendrier_args_date($script,$annee, $i, 1, "mois", $ancre), |
---|
| 981 | $nom,$nom . ' ' . $annee,'', 'calendrier-annee'); |
---|
| 982 | } |
---|
| 983 | $gadget .= "</td></tr>" |
---|
| 984 | . "\n<tr><td class='calendrier-tripleagenda'>" |
---|
| 985 | . http_calendrier_agenda($annee, $mois-1, $jour, $mois, $annee, $GLOBALS['afficher_bandeau_calendrier_semaine'], $script,$ancre) |
---|
| 986 | . "</td>\n<td class='calendrier-tripleagenda'>" |
---|
| 987 | . http_calendrier_agenda($annee, $mois, $jour, $mois, $annee, $GLOBALS['afficher_bandeau_calendrier_semaine'], $script,$ancre) |
---|
| 988 | . "</td>\n<td class='calendrier-tripleagenda'>" |
---|
| 989 | . http_calendrier_agenda($annee, $mois+1, $jour, $mois, $annee, $GLOBALS['afficher_bandeau_calendrier_semaine'], $script,$ancre) |
---|
| 990 | . "</td>" |
---|
| 991 | . "</tr>" |
---|
| 992 | . "\n<tr><td colspan='3' style='text-align:$spip_lang_right;'>"; |
---|
| 993 | for ($i=$mois+2; $i <= 12; $i++) { |
---|
| 994 | $nom = nom_mois("$annee-$i-1"); |
---|
| 995 | $gadget .= http_href(calendrier_args_date($script,$annee, $i, 1, "mois", $ancre), |
---|
| 996 | $nom,$nom . ' ' . $annee,'', 'calendrier-annee'); |
---|
| 997 | } |
---|
| 998 | for ($i=1; $i < $mois+1; $i++) { |
---|
| 999 | $nom = nom_mois("$annee_apres-$i-1"); |
---|
| 1000 | $gadget .= http_href(calendrier_args_date($script, $annee_apres, $i, 1, "mois", $ancre), |
---|
| 1001 | $nom,$nom . ' ' . $annee_apres,'', 'calendrier-annee'); |
---|
| 1002 | } |
---|
| 1003 | return $gadget . "</td></tr></table></div>"; |
---|
| 1004 | } |
---|
| 1005 | |
---|
| 1006 | // agenda mensuel |
---|
| 1007 | |
---|
| 1008 | function http_calendrier_agenda ($annee, $mois, $jour_ved, $mois_ved, $annee_ved, $semaine = false, $script='', $ancre='', $evt='') { |
---|
| 1009 | |
---|
| 1010 | if (!$script) $script = $GLOBALS['PHP_SELF'] ; |
---|
| 1011 | |
---|
| 1012 | if (!$mois) {$mois = 12; $annee--;} |
---|
| 1013 | elseif ($mois==13) {$mois = 1; $annee++;} |
---|
| 1014 | if (!$evt) $evt = sql_calendrier_agenda($annee, $mois); |
---|
| 1015 | $nom = affdate_mois_annee("$annee-$mois-1"); |
---|
| 1016 | return |
---|
| 1017 | "<div class='calendrier-titre calendrier-arial10'>" . |
---|
| 1018 | http_href(calendrier_args_date($script, $annee, $mois, 1, 'mois', $ancre), |
---|
| 1019 | $nom, $nom, |
---|
| 1020 | 'color: black;') . |
---|
| 1021 | "<table width='100%' cellspacing='0' cellpadding='0'>" . |
---|
| 1022 | http_calendrier_agenda_rv ($annee, $mois, $evt, |
---|
| 1023 | 'http_calendrier_clic', array($script, $ancre), |
---|
| 1024 | $jour_ved, $mois_ved, $annee_ved, |
---|
| 1025 | $semaine) . |
---|
| 1026 | "</table>" . |
---|
| 1027 | "</div>"; |
---|
| 1028 | } |
---|
| 1029 | |
---|
| 1030 | function http_calendrier_clic($annee, $mois, $jour, $type, $couleur, $perso) |
---|
| 1031 | { |
---|
| 1032 | |
---|
| 1033 | list($script, $ancre) = $perso; |
---|
| 1034 | |
---|
| 1035 | return http_href(calendrier_args_date($script, $annee, $mois, $jour,$type, $ancre), |
---|
| 1036 | $jour, |
---|
| 1037 | "$jour-$mois-$annee", |
---|
| 1038 | "color: $couleur; font-weight: bold"); |
---|
| 1039 | } |
---|
| 1040 | |
---|
| 1041 | // typographie un mois sous forme d'un tableau de 7 colonnes |
---|
| 1042 | |
---|
| 1043 | function http_calendrier_agenda_rv ($annee, $mois, $les_rv, $fclic, $perso='', |
---|
| 1044 | $jour_ved='', $mois_ved='', $annee_ved='', |
---|
| 1045 | $semaine='') { |
---|
| 1046 | global $couleur_foncee, $spip_lang_left, $spip_lang_right; |
---|
| 1047 | |
---|
| 1048 | // Former une date correcte (par exemple: $mois=13; $annee=2003) |
---|
| 1049 | $date_test = date("Y-m-d", mktime(0,0,0,$mois, 1, $annee)); |
---|
| 1050 | $mois = mois($date_test); |
---|
| 1051 | $annee = annee($date_test); |
---|
| 1052 | if ($semaine) |
---|
| 1053 | { |
---|
| 1054 | $jour_semaine_valide = date("w",mktime(1,1,1,$mois_ved,$jour_ved,$annee_ved)); |
---|
| 1055 | if ($jour_semaine_valide==0) $jour_semaine_valide=7; |
---|
| 1056 | $debut = mktime(1,1,1,$mois_ved,$jour_ved-$jour_semaine_valide+1,$annee_ved); |
---|
| 1057 | $fin = mktime(1,1,1,$mois_ved,$jour_ved-$jour_semaine_valide+7,$annee_ved); |
---|
| 1058 | } else { $debut = $fin = '';} |
---|
| 1059 | |
---|
| 1060 | $today=getdate(time()); |
---|
| 1061 | $jour_today = $today["mday"]; |
---|
| 1062 | $cemois = ($mois == $today["mon"] AND $annee == $today["year"]); |
---|
| 1063 | |
---|
| 1064 | $total = ''; |
---|
| 1065 | $ligne = ''; |
---|
| 1066 | $jour_semaine = date("w", mktime(1,1,1,$mois,1,$annee)); |
---|
| 1067 | if ($jour_semaine==0) $jour_semaine=7; |
---|
| 1068 | for ($i=1;$i<$jour_semaine;$i++) $ligne .= "\n\t<td></td>"; |
---|
| 1069 | $style0 = (!isset($couleur_foncee)) ? "" : " style='border: 1px solid $couleur_foncee;'"; |
---|
| 1070 | for ($j=1; (checkdate($mois,$j,$annee)); $j++) { |
---|
| 1071 | $style = ""; |
---|
| 1072 | $nom = mktime(1,1,1,$mois,$j,$annee); |
---|
| 1073 | $jour_semaine = date("w",$nom); |
---|
| 1074 | if ($jour_semaine==0) $jour_semaine=7; |
---|
| 1075 | |
---|
| 1076 | if ($j == $jour_ved AND $mois == $mois_ved AND $annee == $annee_ved) { |
---|
| 1077 | $class= 'calendrier-arial11 calendrier-demiagenda'; |
---|
| 1078 | $type = 'jour'; |
---|
| 1079 | $couleur = "black"; |
---|
| 1080 | } else if ($semaine AND $nom >= $debut AND $nom <= $fin) { |
---|
| 1081 | $class= 'calendrier-arial11 calendrier-demiagenda' . |
---|
| 1082 | (($jour_semaine==1) ? " calendrier-$spip_lang_left" : |
---|
| 1083 | (($jour_semaine==7) ? " calendrier-$spip_lang_right" : |
---|
| 1084 | '')); |
---|
| 1085 | $type = ($semaine ? 'semaine' : 'jour') ; |
---|
| 1086 | $couleur = "black"; |
---|
| 1087 | } else { |
---|
| 1088 | if ($j == $jour_today AND $cemois) { |
---|
| 1089 | $style = $couleur_foncee; |
---|
| 1090 | if(!$style) $style = '#333333'; |
---|
| 1091 | $couleur = "white"; |
---|
| 1092 | } else { |
---|
| 1093 | if ($jour_semaine == 7) { |
---|
| 1094 | $style = "#aaaaaa"; |
---|
| 1095 | $couleur = 'white'; |
---|
| 1096 | } else { |
---|
| 1097 | $style = "#ffffff"; |
---|
| 1098 | $couleur = "#aaaaaa"; |
---|
| 1099 | } |
---|
| 1100 | if ($les_rv[$j] > 0) { |
---|
| 1101 | $style = "#ffffff"; |
---|
| 1102 | $couleur = "black"; |
---|
| 1103 | } |
---|
| 1104 | } |
---|
| 1105 | $class= 'calendrier-arial11 calendrier-agenda'; |
---|
| 1106 | $type = ($semaine ? 'semaine' : 'jour') ; |
---|
| 1107 | } |
---|
| 1108 | if ($style) |
---|
| 1109 | $style = " style='background-color: $style'"; |
---|
| 1110 | else $style = $style0; |
---|
| 1111 | $ligne .= "\n\t<td><div class='$class'$style>" . |
---|
| 1112 | $fclic($annee,$mois, $j, $type, $couleur, $perso) . |
---|
| 1113 | "</div></td>"; |
---|
| 1114 | if ($jour_semaine==7) |
---|
| 1115 | { |
---|
| 1116 | if ($ligne) $total .= "\n<tr>$ligne\n</tr>"; |
---|
| 1117 | $ligne = ''; |
---|
| 1118 | } |
---|
| 1119 | } |
---|
| 1120 | return $total . (!$ligne ? '' : "\n<tr>$ligne\n</tr>"); |
---|
| 1121 | } |
---|
| 1122 | |
---|
| 1123 | |
---|
| 1124 | function calendrier_categories($table, $num, $objet) |
---|
| 1125 | { |
---|
| 1126 | if (function_exists('generer_calendrier_class')) |
---|
| 1127 | return generer_calendrier_class($table, $num, $objet); |
---|
| 1128 | else { |
---|
| 1129 | // cf calendrier.css |
---|
| 1130 | $result= spip_fetch_array(spip_query("SELECT " . (($objet != 'id_breve') ? 'id_secteur' : 'id_rubrique') . " |
---|
| 1131 | FROM $table |
---|
| 1132 | WHERE $objet=$num |
---|
| 1133 | ")); |
---|
| 1134 | if ($result) $num = $result[0]; |
---|
| 1135 | return 'calendrier-couleur' . (($num%14)+1); |
---|
| 1136 | } |
---|
| 1137 | } |
---|
| 1138 | |
---|
| 1139 | //------- fonctions d'appel MySQL. |
---|
| 1140 | // au dela cette limite, pas de production HTML |
---|
| 1141 | |
---|
| 1142 | function sql_calendrier_mois($annee,$mois,$jour) { |
---|
| 1143 | $avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,1,$annee)) . "'"; |
---|
| 1144 | $apres = "'" . date("Y-m-d", mktime(0,0,0,$mois+1,1,$annee)) . |
---|
| 1145 | " 00:00:00'"; |
---|
| 1146 | return array($avant, $apres); |
---|
| 1147 | } |
---|
| 1148 | |
---|
| 1149 | function sql_calendrier_semaine($annee,$mois,$jour) { |
---|
| 1150 | $w_day = date("w", mktime(0,0,0,$mois, $jour, $annee)); |
---|
| 1151 | if ($w_day == 0) $w_day = 7; // Gaffe: le dimanche est zero |
---|
| 1152 | $debut = $jour-$w_day; |
---|
| 1153 | $avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,$debut,$annee)) . "'"; |
---|
| 1154 | $apres = "'" . date("Y-m-d", mktime(1,1,1,$mois,$debut+7,$annee)) . |
---|
| 1155 | " 23:59:59'"; |
---|
| 1156 | return array($avant, $apres); |
---|
| 1157 | } |
---|
| 1158 | |
---|
| 1159 | // ici on prend en fait le jour, la veille et le lendemain |
---|
| 1160 | |
---|
| 1161 | function sql_calendrier_jour($annee,$mois,$jour) { |
---|
| 1162 | $avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,$jour-1,$annee)) . "'"; |
---|
| 1163 | $apres = "'" . date("Y-m-d", mktime(1,1,1,$mois,$jour+1,$annee)) . |
---|
| 1164 | " 23:59:59'"; |
---|
| 1165 | return array($avant, $apres); |
---|
| 1166 | } |
---|
| 1167 | |
---|
| 1168 | // retourne un tableau de 2 tableaux indexes par des dates |
---|
| 1169 | // - le premier indique les evenements du jour, sans indication de duree |
---|
| 1170 | // - le deuxime indique les evenements commencant ce jour, avec indication de duree |
---|
| 1171 | |
---|
| 1172 | function sql_calendrier_interval($limites) { |
---|
| 1173 | list($avant, $apres) = $limites; |
---|
| 1174 | $evt = array(); |
---|
| 1175 | sql_calendrier_interval_articles($avant, $apres, $evt); |
---|
| 1176 | sql_calendrier_interval_breves($avant, $apres, $evt); |
---|
| 1177 | sql_calendrier_interval_rubriques($avant, $apres, $evt); |
---|
| 1178 | return array($evt, sql_calendrier_interval_rv($avant, $apres)); |
---|
| 1179 | } |
---|
| 1180 | |
---|
| 1181 | function sql_calendrier_interval_forums($limites, &$evenements) { |
---|
| 1182 | list($avant, $apres) = $limites; |
---|
| 1183 | $result=spip_query(" |
---|
| 1184 | SELECT DISTINCT titre, date_heure, id_forum |
---|
| 1185 | FROM spip_forum |
---|
| 1186 | WHERE date_heure >= $avant |
---|
| 1187 | AND date_heure < $apres |
---|
| 1188 | ORDER BY date_heure |
---|
| 1189 | "); |
---|
| 1190 | while($row=spip_fetch_array($result)){ |
---|
| 1191 | $amj = date_anneemoisjour($row['date_heure']); |
---|
| 1192 | $id = $row['id_forum']; |
---|
| 1193 | $evenements[$amj][]= |
---|
| 1194 | array( |
---|
| 1195 | 'URL' => generer_url_forum($id), |
---|
| 1196 | 'CATEGORIES' => 'calendrier-couleur7', |
---|
| 1197 | 'SUMMARY' => $row['titre'], |
---|
| 1198 | 'DTSTART' => date_ical($row['date_heure'])); |
---|
| 1199 | } |
---|
| 1200 | } |
---|
| 1201 | |
---|
| 1202 | # 3 fonctions retournant les evenements d'une periode |
---|
| 1203 | # le tableau retourne est indexe par les balises du format ics |
---|
| 1204 | # afin qu'il soit facile de produire de tels documents. |
---|
| 1205 | |
---|
| 1206 | function sql_calendrier_interval_articles($avant, $apres, &$evenements) { |
---|
| 1207 | |
---|
| 1208 | $result=spip_query(" |
---|
| 1209 | SELECT id_article, titre, date, descriptif, chapo |
---|
| 1210 | FROM spip_articles |
---|
| 1211 | WHERE statut='publie' |
---|
| 1212 | AND date >= $avant |
---|
| 1213 | AND date < $apres |
---|
| 1214 | ORDER BY date |
---|
| 1215 | "); |
---|
| 1216 | while($row=spip_fetch_array($result)){ |
---|
| 1217 | $amj = date_anneemoisjour($row['date']); |
---|
| 1218 | $id = $row['id_article']; |
---|
| 1219 | $evenements[$amj][]= |
---|
| 1220 | array( |
---|
| 1221 | 'CATEGORIES' => calendrier_categories('spip_articles', $id, 'id_article'), |
---|
| 1222 | 'DESCRIPTION' => $row['descriptif'], |
---|
| 1223 | 'SUMMARY' => $row['titre'], |
---|
| 1224 | 'URL' => generer_url_article($id, 'prop')); |
---|
| 1225 | } |
---|
| 1226 | } |
---|
| 1227 | |
---|
| 1228 | function sql_calendrier_interval_rubriques($avant, $apres, &$evenements) { |
---|
| 1229 | |
---|
| 1230 | $result=spip_query(" |
---|
| 1231 | SELECT DISTINCT R.id_rubrique, titre, descriptif, date |
---|
| 1232 | FROM spip_rubriques AS R, spip_documents_rubriques AS L |
---|
| 1233 | WHERE statut='publie' |
---|
| 1234 | AND date >= $avant |
---|
| 1235 | AND date < $apres |
---|
| 1236 | AND R.id_rubrique = L.id_rubrique |
---|
| 1237 | ORDER BY date |
---|
| 1238 | "); |
---|
| 1239 | while($row=spip_fetch_array($result)){ |
---|
| 1240 | $amj = date_anneemoisjour($row['date']); |
---|
| 1241 | $id = $row['id_rubrique']; |
---|
| 1242 | $evenements[$amj][]= |
---|
| 1243 | array( |
---|
| 1244 | 'CATEGORIES' => calendrier_categories('spip_rubriques', $id, 'id_rubrique'), |
---|
| 1245 | 'DESCRIPTION' => $row['descriptif'], |
---|
| 1246 | 'SUMMARY' => $row['titre'], |
---|
| 1247 | 'URL' => generer_url_rubrique($id, 'prop')); |
---|
| 1248 | } |
---|
| 1249 | } |
---|
| 1250 | |
---|
| 1251 | function sql_calendrier_interval_breves($avant, $apres, &$evenements) { |
---|
| 1252 | $result=spip_query(" |
---|
| 1253 | SELECT id_breve, titre, date_heure, id_rubrique |
---|
| 1254 | FROM spip_breves |
---|
| 1255 | WHERE statut='publie' |
---|
| 1256 | AND date_heure >= $avant |
---|
| 1257 | AND date_heure < $apres |
---|
| 1258 | ORDER BY date_heure |
---|
| 1259 | "); |
---|
| 1260 | while($row=spip_fetch_array($result)){ |
---|
| 1261 | $amj = date_anneemoisjour($row['date_heure']); |
---|
| 1262 | $id = $row['id_breve']; |
---|
| 1263 | $ir = $row['id_rubrique']; |
---|
| 1264 | $evenements[$amj][]= |
---|
| 1265 | array( |
---|
| 1266 | 'URL' => generer_url_breve($id, 'prop'), |
---|
| 1267 | 'CATEGORIES' => calendrier_categories('spip_breves', $ir, 'id_breve'), |
---|
| 1268 | 'SUMMARY' => $row['titre']); |
---|
| 1269 | } |
---|
| 1270 | } |
---|
| 1271 | |
---|
| 1272 | function sql_calendrier_interval_rv($avant, $apres) { |
---|
| 1273 | global $connect_id_auteur; |
---|
| 1274 | $evenements= array(); |
---|
| 1275 | if (!$connect_id_auteur) return $evenements; |
---|
| 1276 | $result=spip_query(" |
---|
| 1277 | SELECT messages.id_message, messages.titre, messages.texte, |
---|
| 1278 | messages.date_heure, messages.date_fin, messages.type |
---|
| 1279 | FROM spip_messages AS messages, |
---|
| 1280 | spip_auteurs_messages AS lien |
---|
| 1281 | WHERE ((lien.id_auteur='$connect_id_auteur' |
---|
| 1282 | AND lien.id_message=messages.id_message) OR messages.type='affich') |
---|
| 1283 | AND messages.rv='oui' |
---|
| 1284 | AND ((messages.date_fin >= $avant OR messages.date_heure >= $avant) AND messages.date_heure <= $apres) |
---|
| 1285 | AND messages.statut='publie' |
---|
| 1286 | GROUP BY messages.id_message |
---|
| 1287 | ORDER BY messages.date_heure |
---|
| 1288 | "); |
---|
| 1289 | while($row=spip_fetch_array($result)){ |
---|
| 1290 | $date_heure=$row["date_heure"]; |
---|
| 1291 | $date_fin=$row["date_fin"]; |
---|
| 1292 | $type=$row["type"]; |
---|
| 1293 | $id_message=$row['id_message']; |
---|
| 1294 | |
---|
| 1295 | if ($type=="pb") |
---|
| 1296 | $cat = 'calendrier-couleur2'; |
---|
| 1297 | else { |
---|
| 1298 | if ($type=="affich") |
---|
| 1299 | $cat = 'calendrier-couleur4'; |
---|
| 1300 | else { |
---|
| 1301 | if ($type!="normal") |
---|
| 1302 | $cat = 'calendrier-couleur12'; |
---|
| 1303 | else { |
---|
| 1304 | $cat = 'calendrier-couleur9'; |
---|
| 1305 | $auteurs = array(); |
---|
| 1306 | $result_aut=spip_query(" |
---|
| 1307 | SELECT auteurs.nom |
---|
| 1308 | FROM spip_auteurs AS auteurs, |
---|
| 1309 | spip_auteurs_messages AS lien |
---|
| 1310 | WHERE (lien.id_message='$id_message' |
---|
| 1311 | AND (auteurs.id_auteur!='$connect_id_auteur' |
---|
| 1312 | AND lien.id_auteur=auteurs.id_auteur))"); |
---|
| 1313 | while($row_auteur=spip_fetch_array($result_aut)){ |
---|
| 1314 | $auteurs[] = $row_auteur['nom']; |
---|
| 1315 | } |
---|
| 1316 | } |
---|
| 1317 | } |
---|
| 1318 | } |
---|
| 1319 | |
---|
| 1320 | $jour_avant = substr($avant, 9,2); |
---|
| 1321 | $mois_avant = substr($avant, 6,2); |
---|
| 1322 | $annee_avant = substr($avant, 1,4); |
---|
| 1323 | $jour_apres = substr($apres, 9,2); |
---|
| 1324 | $mois_apres = substr($apres, 6,2); |
---|
| 1325 | $annee_apres = substr($apres, 1,4); |
---|
| 1326 | $ical_apres = date_anneemoisjour("$annee_apres-$mois_apres-".sprintf("%02d",$jour_apres)); |
---|
| 1327 | |
---|
| 1328 | // Calcul pour les semaines a cheval sur deux mois |
---|
| 1329 | $j = 0; |
---|
| 1330 | $amj = date_anneemoisjour("$annee_avant-$mois_avant-".sprintf("%02d", $j+($jour_avant))); |
---|
| 1331 | |
---|
| 1332 | while ($amj <= $ical_apres) { |
---|
| 1333 | if (!($amj == date_anneemoisjour($date_fin) AND ereg("00:00:00", $date_fin))) // Ne pas prendre la fin a minuit sur jour precedent |
---|
| 1334 | $evenements[$amj][$id_message]= |
---|
| 1335 | array( |
---|
| 1336 | 'URL' => generer_url_ecrire("message","id_message=$id_message"), |
---|
| 1337 | 'DTSTART' => date_ical($date_heure), |
---|
| 1338 | 'DTEND' => date_ical($date_fin), |
---|
| 1339 | 'DESCRIPTION' => $row['texte'], |
---|
| 1340 | 'SUMMARY' => $row['titre'], |
---|
| 1341 | 'CATEGORIES' => $cat, |
---|
| 1342 | 'ATTENDEE' => (count($auteurs) == 0) ? '' : join($auteurs,", ")); |
---|
| 1343 | |
---|
| 1344 | $j ++; |
---|
| 1345 | $ladate = date("Y-m-d",mktime (1,1,1,$mois_avant, ($j + $jour_avant), $annee_avant)); |
---|
| 1346 | |
---|
| 1347 | $amj = date_anneemoisjour($ladate); |
---|
| 1348 | |
---|
| 1349 | } |
---|
| 1350 | |
---|
| 1351 | } |
---|
| 1352 | return $evenements; |
---|
| 1353 | } |
---|
| 1354 | |
---|
| 1355 | // fonction SQL, pour la messagerie |
---|
| 1356 | |
---|
| 1357 | function sql_calendrier_taches_annonces () { |
---|
| 1358 | global $connect_id_auteur; |
---|
| 1359 | $r = array(); |
---|
| 1360 | if (!$connect_id_auteur) return $r; |
---|
| 1361 | $result = spip_query(" |
---|
| 1362 | SELECT * FROM spip_messages |
---|
| 1363 | WHERE type = 'affich' AND rv != 'oui' AND statut = 'publie' ORDER BY date_heure DESC"); |
---|
| 1364 | if (spip_num_rows($result) > 0) |
---|
| 1365 | while ($x = spip_fetch_array($result)) $r[] = $x; |
---|
| 1366 | return $r; |
---|
| 1367 | } |
---|
| 1368 | |
---|
| 1369 | function sql_calendrier_taches_pb () { |
---|
| 1370 | global $connect_id_auteur; |
---|
| 1371 | $r = array(); |
---|
| 1372 | if (!$connect_id_auteur) return $r; |
---|
| 1373 | $result = spip_query(" |
---|
| 1374 | SELECT * FROM spip_messages AS messages |
---|
| 1375 | WHERE id_auteur=$connect_id_auteur AND statut='publie' AND type='pb' AND rv!='oui'"); |
---|
| 1376 | if (spip_num_rows($result) > 0){ |
---|
| 1377 | $r = array(); |
---|
| 1378 | while ($x = spip_fetch_array($result)) $r[] = $x; |
---|
| 1379 | } |
---|
| 1380 | return $r; |
---|
| 1381 | } |
---|
| 1382 | |
---|
| 1383 | function sql_calendrier_taches_rv () { |
---|
| 1384 | global $connect_id_auteur; |
---|
| 1385 | $r = array(); |
---|
| 1386 | if (!$connect_id_auteur) return $r; |
---|
| 1387 | $result = spip_query(" |
---|
| 1388 | SELECT messages.* |
---|
| 1389 | FROM spip_messages AS messages, spip_auteurs_messages AS lien |
---|
| 1390 | WHERE ((lien.id_auteur='$connect_id_auteur' |
---|
| 1391 | AND lien.id_message=messages.id_message) |
---|
| 1392 | OR messages.type='affich') |
---|
| 1393 | AND messages.rv='oui' |
---|
| 1394 | AND ( (messages.date_heure > DATE_SUB(NOW(), INTERVAL 1 DAY) |
---|
| 1395 | AND messages.date_heure < DATE_ADD(NOW(), INTERVAL 1 MONTH)) |
---|
| 1396 | OR (messages.date_heure < NOW() AND messages.date_fin > NOW() )) |
---|
| 1397 | AND messages.statut='publie' |
---|
| 1398 | GROUP BY messages.id_message |
---|
| 1399 | ORDER BY messages.date_heure"); |
---|
| 1400 | if (spip_num_rows($result) > 0){ |
---|
| 1401 | $r = array(); |
---|
| 1402 | while ($x = spip_fetch_array($result)) $r[] = $x; |
---|
| 1403 | } |
---|
| 1404 | return $r; |
---|
| 1405 | } |
---|
| 1406 | |
---|
| 1407 | function sql_calendrier_agenda ($annee, $mois) { |
---|
| 1408 | global $connect_id_auteur; |
---|
| 1409 | |
---|
| 1410 | $rv = array(); |
---|
| 1411 | if (!$connect_id_auteur) return $rv; |
---|
| 1412 | $date = date("Y-m-d", mktime(0,0,0,$mois, 1, $annee)); |
---|
| 1413 | $mois = mois($date); |
---|
| 1414 | $annee = annee($date); |
---|
| 1415 | |
---|
| 1416 | // rendez-vous personnels dans le mois |
---|
| 1417 | $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'"); |
---|
| 1418 | while($row=spip_fetch_array($result_messages)){ |
---|
| 1419 | $rv[journum($row['date_heure'])] = 1; |
---|
| 1420 | } |
---|
| 1421 | return $rv; |
---|
| 1422 | } |
---|
| 1423 | |
---|
| 1424 | ?> |
---|