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 | ?> |
---|