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