source: spip-zone/_squelettes_/sarkaspip/dev/inc/sarkaspip_filtres_agenda.php @ 39462

Last change on this file since 39462 was 39462, checked in by eric@…, 11 years ago

Report de 39460

File size: 25.7 KB
Line 
1<?php
2// ==================================================== AFFICHAGE DES AGENDAS : FONCTIONS GENERIQUES ====================================================
3
4// ===================================================
5// Auteur: Smellup
6// Fonction : definition du contexte d'affichage de l'agenda
7// Utilisation : tous les agendas. Doit etre appelee au debut
8//                      de l'affichage, avant le recensement
9// ===================================================
10//
11function agenda_definir_contexte($id_agenda=0, $type_agenda='listing_annuel', $debut_saison=1, $type_saison='annee', $url_page='') {
12        static $contexte = array();
13
14        if ($id_agenda == 0)
15                return $contexte;
16
17        $contexte['type_agenda'] = $type_agenda;
18        $contexte['debut_saison'] = $debut_saison;
19        $contexte['type_saison'] = $type_saison;
20        $contexte['id_rubrique'] = $id_agenda;
21
22        if (strpos($url_page, 'calendrier_mois') !== FALSE) {
23                preg_match('/calendrier_mois=([0-9]{1,2})/', $url_page, $match);
24                $contexte['mois_base'] = intval($match[1]);
25                preg_match('/calendrier_annee=([0-9]{1,4})/', $url_page, $match);
26                $contexte['annee_base'] = intval($match[1]);
27                $contexte['url_base'] = substr($url_page, 0, strpos($url_page, 'calendrier_mois'));
28        }
29        else {
30                $contexte['mois_base'] = intval(affdate(date("Y-m-d H:i"), 'mois'));
31                $contexte['annee_base'] = intval(affdate(date("Y-m-d H:i"), 'annee'));
32                $contexte['url_base'] = (strpos($url_page, '?') !== FALSE) ? $url_page.'&amp;' : $url_page.'?';
33        }
34        return;
35}
36
37// ===================================================
38// Auteur: Smellup
39// Fonction : recensement de tous les evenements
40// Utilisation : tous les agendas. Doit etre appelee au debut
41//                      de l'affichage, apres etablissement du contexte
42//                      La liste doit etre triee en ordre chrono par la
43//                      boucle via le critere {par date_redac}
44// ===================================================
45//
46function agenda_recenser_evenement($id_agenda=0, $id=0, $date_redac=0, $titre='') {
47        static $type_agenda, $count_evt = 0, $liste_evt = array(), $mini_evt = array();
48
49        if ($id_agenda == 0)
50                return $liste_evt;
51
52        if ($id_agenda == -1)
53                return $mini_evt;
54
55        $contexte_aff = agenda_definir_contexte(0);
56        $debut_saison = $contexte_aff['debut_saison'];
57        $type_saison = $contexte_aff['type_saison'];
58
59        if ($type_agenda != $contexte_aff['type_agenda']) {
60                $count_evt = 0;
61                $liste_evt = array();
62                $mini_evt = array();
63                $type_agenda = $contexte_aff['type_agenda'];
64        }
65
66        if (intval($date_redac) > 1) {
67                $count_evt += 1;
68
69                // Liste ordonnees des evenements (tableau[1..n] d'evenements)
70                $jour = affdate_base($date_redac, 'jour');
71                $mois = affdate_base($date_redac, 'mois');
72                $annee = affdate_base($date_redac, 'annee');
73
74                $liste_evt[$count_evt]['id'] = $id;
75                $liste_evt[$count_evt]['date_redac'] = $date_redac;
76                $liste_evt[$count_evt]['date'] = affdate_base($date_redac, 'd-m-Y H:i');
77                $liste_evt[$count_evt]['heure'] = affdate_base($date_redac, 'H:i');
78                $liste_evt[$count_evt]['jour'] = $jour;
79                $liste_evt[$count_evt]['mois'] = $mois;
80                $liste_evt[$count_evt]['annee'] = $annee;
81                $liste_evt[$count_evt]['nom_mois'] = affdate_base($date_redac, 'nom_mois');
82                $liste_evt[$count_evt]['titre'] = $titre;
83
84                if (intval($debut_saison) == 1) {
85                        $liste_evt[$count_evt]['saison'] = $annee;
86                        $liste_evt[$count_evt]['lien_page'] = $liste_evt[$count_evt]['saison'];
87                }
88                else {
89                        $liste_evt[$count_evt]['saison'] = (intval($mois) < intval($debut_saison)) ? $annee : strval(intval($annee)+1);
90                        if ($type_saison == 'annee')
91                                $liste_evt[$count_evt]['lien_page'] = $liste_evt[$count_evt]['saison'];
92                        elseif ($type_saison == 'periode')
93                                $liste_evt[$count_evt]['lien_page'] = (intval($mois) < intval($debut_saison))   ? strval(intval($annee)-1).'-'.$annee 
94                                                                                                                                                                                        : $annee.'-'.strval(intval($annee)+1);
95                        else // $type_saison == 'periode_abregee'
96                                $liste_evt[$count_evt]['lien_page'] = (intval($mois) < intval($debut_saison))   ? substr(strval(intval($annee)-1),2,2).'-'.substr($annee,2,2) 
97                                                                                                                                                                                        : substr($annee,2,2).'-'.substr(strval(intval($annee)+1),2,2);
98                }
99
100                $id_article = intval($id);
101                $select = array('t2.id_mot AS id_mot');
102                $from = array('spip_mots_articles AS t1', 'spip_mots AS t2');
103                $where = array('t1.id_article='.sql_quote($id_article),
104                                           't2.id_mot=t1.id_mot');
105                $result = sql_select($select, $from, $where);
106                $cat = NULL;
107                while ($row = sql_fetch($result))
108                        $cat .= '<'.$row['id_mot'].'>';
109                $liste_evt[$count_evt]['categorie'] = $cat;
110
111                // Liste indexee par jour des evenements
112                $jour_redac = affdate_base($date_redac, 'd-m-Y');
113                $mini_evt[$jour_redac][] = $count_evt;
114        }
115        return;
116}
117
118
119// ===================================================
120// Auteur: Smellup
121// Fonction : affichage debug du tableau des evenements
122// Utilisation : tous les agendas.
123// ===================================================
124//
125function agenda_debug_evenement($id_agenda=0, $liste_choisie='liste_evt') {
126
127        if ($liste_choisie == 'liste_evt') {
128                $evenements = agenda_recenser_evenement(0);
129                $count_evt = count($evenements);
130
131                for ($i=1;$i<=$count_evt;$i++) {
132                        echo '<br /><strong>EVT Num'.$i.'</strong><br />';
133                        echo '<strong>Titre</strong>: '.$evenements[$i]['titre'].'<br />';
134                        echo '<strong>Id</strong>: '.$evenements[$i]['id'].'<br />';
135                        echo '<strong>Date Redac</strong>: '.$evenements[$i]['date_redac'].'<br />';
136                        echo '<strong>Date</strong>: '.$evenements[$i]['date'].'<br />';
137                        echo '<strong>Heure</strong>: '.$evenements[$i]['heure'].'<br />';
138                        echo '<strong>Jour</strong>: '.$evenements[$i]['jour'].'<br />';
139                        echo '<strong>Mois</strong>: '.$evenements[$i]['mois'].' | '.$evenements[$i]['nom_mois'].'<br />';
140                        echo '<strong>Annee</strong>: '.$evenements[$i]['annee'].'<br />';
141                        echo '<strong>Saison</strong>: '.$evenements[$i]['saison'].'<br />';
142                        echo '<strong>Lien page</strong>: '.$evenements[$i]['lien_page'].'<br />';
143                        echo '<strong>Categorie</strong>: '.$evenements[$i]['categorie'].'<br />';
144                }
145        }
146        else {
147                $evenements = agenda_recenser_evenement(-1);
148
149                foreach ($evenements as $jour => $liste) {
150                        echo '<br /><strong>JOUR: </strong>'.$jour.' ('.count($liste).')<br />';
151                        foreach ($liste as $num_evt)
152                                echo $num_evt.', ';
153                        echo '<br />';
154                }
155        }
156}
157
158// ===================================================
159// Auteur: Smellup
160// Fonction : affichage debug du tableau du contexte
161// Utilisation : tous les agendas.
162// ===================================================
163//
164function agenda_debug_contexte($id_agenda=0) {
165
166        $contexte_aff = agenda_definir_contexte(0);
167
168        echo '<br /><strong>CONTEXTE AGENDA</strong><br />';
169        echo '<strong>ID Rubrique</strong>: '.$contexte_aff['id_rubrique'].'<br />';
170        echo '<strong>Type</strong>: '.$contexte_aff['type_agenda'].'<br />';
171        echo '<strong>Debut saison</strong>: '.$contexte_aff['debut_saison'].'<br />';
172        echo '<strong>Type affichage saison</strong>: '.$contexte_aff['type_saison'].'<br />';
173        echo '<strong>Mois en cours</strong>: '.$contexte_aff['mois_base'].'<br />';
174        echo '<strong>Ann&eacute;e en cours</strong>: '.$contexte_aff['annee_base'].'<br />';
175        echo '<strong>URL page de base</strong>: '.$contexte_aff['url_base'].'<br />';
176}
177
178// ==================================================== AGENDA LISTING ANNUEL OU SAISONNIER ====================================================
179
180// ===================================================
181// Auteur: Smellup
182// Fonction : Insertion d'une bande de pagination annuelle ou
183//            saisonniere
184// Utilisation : uniquement agenda annuel. Choix possible du
185//               filtre, tri, et format (via le contexte)
186// ===================================================
187//
188function agenda_liste_paginer($id_agenda=0, $annee_choisie=0, $mois_choisi=0, $filtre='-1', $separateur='&nbsp;|&nbsp;', $ancre=NULL, $tri='normal') {
189        static $count_page = 0;
190
191        if ($id_agenda == 0)
192                return $count_page;
193
194        $evenements = agenda_recenser_evenement(0);
195        $count_evt = count($evenements);
196
197        $pagination = NULL;
198        if ($count_evt == 0)
199                return $pagination;
200
201        if ($ancre)
202                $pagination .= '<a class="ancre" name="pagination_'.$ancre.'" id="pagination_'.$ancre.'"></a>';
203               
204        // Determination de l'annee choisie si l'agenda est saisonnier 
205        $contexte_aff = agenda_definir_contexte(0);
206        $debut_saison = $contexte_aff['debut_saison'];
207        if (intval($debut_saison) != 1) {
208                $annee_choisie = (intval($mois_choisi) < intval($debut_saison)) ? $annee_choisie : strval(intval($annee_choisie)+1);
209        }
210
211
212        $annee_courante = 0;
213        $nouvelle_annee = FALSE;
214        $count_page = 0;
215
216        for ($i=1;$i<=$count_evt;$i++) {
217                $j = ($tri == 'inverse') ? $count_evt - $i + 1 : $i;
218                if (($filtre == '-1') || 
219                        (($filtre == '0') && (!$evenements[$j]['categorie'])) ||
220                        (($filtre != '-1') && ($filtre != '0') && (preg_match("/<$filtre>/",$evenements[$j]['categorie']) > 0))) {
221
222
223                        $annee_redac = $evenements[$j]['saison'];
224                        $annee_evt = $evenements[$j]['annee'];
225                        $mois_evt = $evenements[$j]['mois'];
226                        if ($annee_redac != $annee_courante)  {
227                                $nouvelle_annee = TRUE;
228                                $count_page += 1;
229                        }
230                        else {
231                                $nouvelle_annee = FALSE;
232                        }
233
234                        if ($nouvelle_annee) {
235                                if ($annee_courante != 0) {
236                                        $pagination .= $separateur;
237                                }
238                                if ($annee_redac == $annee_choisie) {
239                                        $pagination .= '<span class="on">'.$evenements[$j]['lien_page'].'</span>';
240                                }
241                                else {
242                                        $arg_option = NULL;
243                                        if ($filtre != '-1') $arg_option = '&amp;categorie='.$filtre;
244                                        if ($ancre) $arg_option .= '#pagination_'.$ancre;
245                                        if (intval($debut_saison) != 1) $annee_evt = (intval($mois_evt) < intval($debut_saison)) ? strval(intval($annee_evt)-1) : $annee_evt;
246                                        $pagination .= '<a class="ajax" href="spip.php?page=agenda&amp;id_rubrique='.$contexte_aff['id_rubrique'].'&amp;annee='.$annee_evt.'&amp;mois='.$debut_saison.$arg_option.'">'.$evenements[$j]['lien_page'].'</a>';
247                                }
248                        $annee_courante = $annee_redac;
249                        }
250                }
251        }
252        return $pagination;
253}
254
255// ===================================================
256// Auteur: Smellup
257// Fonction : Affichage de l'agenda sous forme de listing des
258//            evenements de l'annee choisie
259// Utilisation : uniquement agenda annuel. Choix possible du
260//               filtre et du tri
261// ===================================================
262//
263function agenda_liste_afficher($id_agenda=0, $annee_choisie=0, $mois_choisi=0, $filtre='-1', $tri='normal') {
264        static $count_evt_filtre = 0;
265
266        if ($id_agenda == 0)
267                return $count_evt_filtre;
268
269        $evenements = agenda_recenser_evenement(0);
270        $count_evt = count($evenements);
271        $count_page = agenda_liste_paginer(0);
272
273        $liste = NULL;
274        if (($count_evt == 0) || ($count_page == 0))
275                return $liste;
276               
277        // Determination de l'annee choisie si l'agenda est saisonnier 
278        $contexte_aff = agenda_definir_contexte(0);
279        $debut_saison = $contexte_aff['debut_saison'];
280        if (intval($debut_saison) != 1) 
281                $annee_choisie = (intval($mois_choisi) < intval($debut_saison)) ? $annee_choisie : strval(intval($annee_choisie)+1);
282
283        $mois_courant = NULL;
284        $nouveau_mois = FALSE;
285        $count_evt_filtre = 0;
286
287        for ($i=1;$i<=$count_evt;$i++) {
288                $j = ($tri == 'inverse') ? $count_evt - $i + 1 : $i;
289                if ($evenements[$j]['saison'] == $annee_choisie) {
290                        if (($filtre == '-1') || 
291                                (($filtre == '0') && (!$evenements[$j]['categorie'])) ||
292                                (($filtre != '-1') && ($filtre != 0) && (preg_match("/<$filtre>/",$evenements[$j]['categorie']) > 0))) {
293
294
295                                $count_evt_filtre += 1;
296                                $mois_redac = $evenements[$j]['nom_mois'];
297                                if ($mois_redac != $mois_courant)  {
298                                        $nouveau_mois = TRUE;
299                                }
300                                else {
301                                        $nouveau_mois = FALSE;
302                                }
303
304                                if ($nouveau_mois) {
305                                        if ($mois_courant) {
306                                                $liste .= '</ul></li>';
307                                        }
308                                        $liste .= '<li><a class="noeud" href="#">'.ucfirst($evenements[$j]['nom_mois']).'&nbsp;'.$evenements[$j]['annee'].'</a>';
309                                        $liste .= '<ul>';
310                                }
311                                $mois_courant = $mois_redac;
312                                $liste .= '<li><a class="feuille" href="spip.php?page=evenement&amp;id_article='.$evenements[$j]['id'].'" title="'._T('sarkaspip:navigation_bulle_vers_evenement').'">
313                                <span class="date">['.$evenements[$j]['date'].']&nbsp;</span>&nbsp;'.$evenements[$j]['titre'].'</a></li>';
314                        }
315                }
316        }
317
318        if ($count_evt_filtre > 0)
319                $liste = '<ul>'.$liste.'</ul></li></ul>';
320
321        return $liste;
322}
323
324// ===================================================
325// Auteur: Smellup
326// Fonction : Affichage des messages d'avertissement
327// Utilisation : uniquement agenda annuel. Cas aucune page ou
328//                      aucun evenement. Critere filtre et saison
329// ===================================================
330//
331function agenda_liste_avertir($id_agenda, $annee_choisie, $mois_choisi) {
332
333        $message = NULL;
334
335        $contexte_aff = agenda_definir_contexte(0);
336        $debut_saison = $contexte_aff['debut_saison'];
337        $type_saison = $contexte_aff['type_saison'];           
338
339        if (intval($debut_saison) != 1) 
340                $annee_choisie = (intval($mois_choisi) < intval($debut_saison)) ? $annee_choisie : strval(intval($annee_choisie)+1);
341
342        $count_evt = count(agenda_recenser_evenement(0));
343        $count_evt_filtre = agenda_liste_afficher(0);
344
345        if ($count_evt == 0)
346                $message = _T('sarkaspip:msg_0_evt_agenda');
347        else
348                if ($count_evt_filtre == 0)
349                        if (intval($debut_saison) == 1)
350                                $message = _T('sarkaspip:msg_0_evt_annee').'&nbsp;'.$annee_choisie;
351                        else
352                                if ($type_saison == 'annee')
353                                        $message = _T('sarkaspip:msg_0_evt_saison').'&nbsp;'.$annee_choisie;
354                                elseif ($type_saison == 'periode')
355                                        $message = _T('sarkaspip:msg_0_evt_saison').'&nbsp;'.strval(intval($annee_choisie)-1).'-'.$annee_choisie;
356                                else // $type_saison == 'periode_abregee'
357                                        $message = _T('sarkaspip:msg_0_evt_saison').'&nbsp;'.substr(strval(intval($annee_choisie)-1),2,2).'-'.substr($annee_choisie,2,2);
358
359        return $message;
360}
361
362// ==================================================== AGENDA MINI ====================================================
363
364
365// ===================================================
366// Auteur: Smellup
367// Fonction : Retourne le tableau des noms des jours
368//            avec capitale ou pas, abrege ou pas
369// Utilisation :
370// ===================================================
371//
372function agenda_jours($capitale=true, $mode='entier', $taille=0) {
373        $jours=array();
374        if ($capitale)
375                array_push($jours, ucfirst(_T('date_jour_1')), ucfirst(_T('date_jour_2')), ucfirst(_T('date_jour_3')), ucfirst(_T('date_jour_4')), 
376                                        ucfirst(_T('date_jour_5')), ucfirst(_T('date_jour_6')), ucfirst(_T('date_jour_7')));
377        else
378                array_push($jours, _T('date_jour_1'), _T('date_jour_2'), _T('date_jour_3'), _T('date_jour_4'), 
379                                        _T('date_jour_5'), _T('date_jour_6'), _T('date_jour_7'));
380        if ($mode == 'entier') {
381                return $jours;
382        }
383        else {
384                foreach($jours as $_jour) {
385                        $jours_abbr[] = substr($_jour, 0 , $taille);
386                }
387                return $jours_abbr;
388        }
389}
390
391function agenda_mois($capitale=true, $mode='entier', $taille=0) {
392        $mois=array();
393        if ($capitale)
394                $mois = array(1 => ucfirst(_T('date_mois_1')), 2 => ucfirst(_T('date_mois_2')), 3 => ucfirst(_T('date_mois_3')), 4 => ucfirst(_T('date_mois_4')), 
395                                                5 => ucfirst(_T('date_mois_5')), 6 => ucfirst(_T('date_mois_6')), 7 => ucfirst(_T('date_mois_7')), 8 => ucfirst(_T('date_mois_8')),
396                                                9 => ucfirst(_T('date_mois_9')), 10 => ucfirst(_T('date_mois_10')), 11 => ucfirst(_T('date_mois_11')), 12 => ucfirst(_T('date_mois_12')));
397        else
398                $mois = array(1 => _T('date_mois_1'), 2 => _T('date_mois_2'), 3 => _T('date_mois_3'), 4 => _T('date_mois_4'), 
399                                                5 => _T('date_mois_5'), 6 => _T('date_mois_6'), 7 => _T('date_mois_7'), 8 => _T('date_mois_8'),
400                                                9 => _T('date_mois_9'), 10 => _T('date_mois_10'), 11 => _T('date_mois_11'), 12 => _T('date_mois_12'));
401        if ($mode == 'entier') {
402                return $mois;
403        }
404        else {
405                for($i = 1; $i <= 12; $i++) {
406                        $mois_abbr[$i] = substr($mois[$i], 0 , $taille);
407                }
408                return $mois_abbr;
409        }
410}
411
412
413// ===================================================
414// Auteur: Smellup
415// Fonction : Insertion d'une bande de navigation dans
416//            les mois precedents et suivants
417// Utilisation : Choix possible des icones suivant et
418//               precedent
419// ===================================================
420//
421function agenda_mini_afficher($id_agenda=0, $icone_prec='&lt;&lt;', $icone_suiv='&gt;&gt;', 
422                                                                                        $jour_debut=0, $affichage_hors_mois='oui',
423                                                                                        $critere='oui', $max_mois=6, $taille=5, $format='d-m H:i') {
424
425        if ($id_agenda == 0)
426                return;
427               
428        $agenda = NULL;
429
430        // Creation du header compose des items de navigation annee et mois
431        $agenda .= agenda_mini_header($id_agenda, $icone_prec, $icone_suiv);
432       
433        // Creation du body compose du calendrier mensuel
434        $agenda .= agenda_mini_body($id_agenda, $jour_debut, $affichage_hors_mois);
435       
436        // Creation du footer compose des items de navigation aujourd'hui et du resume des evenements du mois
437        $agenda .= agenda_mini_footer($id_agenda, $critere, $max_mois, $taille, $format);
438
439        return $agenda;
440}
441
442
443function agenda_mini_header($id_agenda=0, $icone_prec='&lt;&lt;', $icone_suiv='&gt;&gt;') {
444
445        if ($id_agenda == 0)
446                return;
447
448        // Init du contexte
449        $nom_mois = agenda_mois(true, 'entier');
450        $contexte_aff = agenda_definir_contexte(0);
451        $mois_choisi = $contexte_aff['mois_base'];
452        $annee_choisie = $contexte_aff['annee_base'];
453        $url_base = $contexte_aff['url_base'];
454        // Init de l'annee et du mois courant
455        $mois_courant = affdate_base(date('Y-m-d'), 'mois');
456        $annee_courante = affdate_base(date('Y-m-d'), 'annee');
457
458        // Calcul des mois precedent et suivant
459        $mois = $mois_choisi-1;
460        if ($mois < 1) {
461                $mois_prec = '12';
462                $annee_prec = strval($annee_choisie-1);
463        }       
464        else {
465                $mois_prec = strval($mois);
466                $annee_prec = strval($annee_choisie);
467        }       
468
469        $mois = $mois_choisi+1;
470        if ($mois > 12) {
471                $mois_suiv = '1';
472                $annee_suiv = strval($annee_choisie+1);
473        }       
474        else {
475                $mois_suiv = strval($mois);
476                $annee_suiv = strval($annee_choisie);
477        }       
478        // Calcul des annees precedente et suivante
479        $annee_choisie_prec = strval($annee_choisie-1);
480        $annee_choisie_suiv = strval($annee_choisie+1);
481        // Calcul des mois et annees courants
482
483        // Init de la chaine
484        $header = NULL;
485        // Debut de l'en-tete
486        // Ligne 1 : pagination par annee
487        $header .= '<h2><a class="titre_bloc bord ajax" rel="nofollow" href="'.$url_base.'calendrier_mois='.$mois_choisi.'&amp;calendrier_annee='.$annee_choisie_prec.'" title="'.$nom_mois[$mois_choisi].'&nbsp;'.$annee_choisie_prec.'">'.$icone_prec.'</a></h2>';
488        $header .= '<h2 class="titre_bloc centre">'.$annee_choisie.'</h2>';   
489        $header .= '<h2><a class="titre_bloc bord ajax" rel="nofollow" href="'.$url_base.'calendrier_mois='.$mois_choisi.'&amp;calendrier_annee='.$annee_choisie_suiv.'" title="'.$nom_mois[$mois_choisi].'&nbsp;'.$annee_choisie_suiv.'">'.$icone_suiv.'</a></h2>';
490        // Ligne 2 : pagination par mois
491        $header .= '<h2><a class="titre_bloc bord ajax" rel="nofollow" href="'.$url_base.'calendrier_mois='.$mois_prec.'&amp;calendrier_annee='.$annee_prec.'" title="'.$nom_mois[$mois_prec].'&nbsp;'.$annee_prec.'">'.$icone_prec.'</a></h2>';
492        $header .= '<h2 class="titre_bloc centre">'.$nom_mois[$mois_choisi].'</h2>';   
493        $header .= '<h2><a class="titre_bloc bord ajax" rel="nofollow" href="'.$url_base.'calendrier_mois='.$mois_suiv.'&amp;calendrier_annee='.$annee_suiv.'" title="'.$nom_mois[$mois_suiv].'&nbsp;'.$annee_suiv.'">'.$icone_suiv.'</a></h2>';
494        // Ligne 3 : retour au mois du jour courant
495        $header .= '<h2><a id="auj" class="titre_bloc ajax" rel="nofollow" href="'.$url_base.'calendrier_mois='.$mois_courant.'&amp;calendrier_annee='.$annee_courante.'" title="'.$nom_mois[intval($mois_courant)].'&nbsp;'.$annee_courante.'">'.ucfirst(_T('sarkaspip:aujourdhui')).'</a></h2>';
496        // Fin de l'en-tete
497       
498        return $header;
499}
500
501// ===================================================
502// Auteur: Smellup
503// Fonction : Insertion du mini-calendrier du mois choisi
504// Utilisation : Choix possible du jour de debut de la
505//               semaine et de l'affichage des jours
506//               contigus hors mois choisi
507// ===================================================
508//
509function agenda_mini_body($id_agenda=0, $jour_debut=0, $affichage_hors_mois='oui') {
510
511        $nom_jour_abrege = agenda_jours(true, 'abrege', 2);
512        $nom_jour = agenda_jours(true, 'complet');
513
514        if ($id_agenda == 0)
515                return;
516
517        // Init du contexte
518        $contexte_aff = agenda_definir_contexte(0);
519        $mois_choisi = $contexte_aff['mois_base'];
520        $annee_choisie = $contexte_aff['annee_base'];
521        $url_base = $contexte_aff['url_base'];
522        // Init des listes d'evenements
523        $evenements = agenda_recenser_evenement(0);
524        $mini_evenements = agenda_recenser_evenement(-1);
525
526        $body = NULL;
527        // Debut du tableau
528        $body .= '<table summary="'._T('sarkaspip:resume_mini_agenda_body').'">';
529       
530        // 1ere ligne : nom abrege des jours de dimanche a samedi
531        $body .= '<thead>'; 
532        $body .= '<tr>';
533        for($i = 0; $i <= 6; $i++) {
534                $j = ($jour_debut+$i)%7;
535                $body .= '<th title="'.$nom_jour[$j].'">'.$nom_jour_abrege[$j].'</th>';
536        }
537        $body .= '</tr>';
538        $body .= '</thead>';
539
540        // Cellules des jours : de 4 a 5 lignes de 7 jours. Debut de la 2eme ligne
541        $body .= '<tbody>'; 
542        $body .= '<tr>';
543
544        // Cellules des jours visibles precedant le mois courant (toujours inclus strictement dans la 2eme ligne)
545        $cellules_mois_prec = NULL;
546        $jour = 1;
547        $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
548        while (date('w', $date) != $jour_debut) {
549                $jour = $jour - 1;
550                $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
551
552                $cellule = '<td class="horsperiode">';
553                $cellule .= ($affichage_hors_mois == 'oui') ? strval(date('j', $date)) : '&nbsp;';
554                $cellule .= '</td>';
555
556                $cellules_mois_prec = $cellule.$cellules_mois_prec;
557        }
558        $body .= $cellules_mois_prec;
559
560        // Remplissage des cellules du mois
561        $jour = 1;
562        $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
563        while (date('m', $date) == $mois_choisi) {
564                if ((date('w', $date) == $jour_debut) && ($jour != 1))
565                        $body .= '</tr><tr>';
566
567                $cellule = '<td class="';
568                $cellule .= (date('d-m-Y', $date) == date('d-m-Y')) ? 'today">' : 'libre">';
569                if (!isset($mini_evenements[date('d-m-Y', $date)])) {
570                        // Il n'y pas d'evenement pour ce jour, on affiche la date
571                        $cellule .= strval(date('j', $date));
572                }
573                else {
574                        // Il y a un ou plusieurs evenements, on construit le lien et la bulle d'info
575                        $index_evt1 = $mini_evenements[date('d-m-Y', $date)][0];
576                        $lien = 'spip.php?page=evenement&amp;id_article='.$evenements[$index_evt1]['id'];
577                        $bulle = $evenements[$index_evt1]['heure'].'&nbsp;-&nbsp;'.$evenements[$index_evt1]['titre'];
578                        if (count($mini_evenements[date('d-m-Y', $date)]) > 1)
579                                $bulle .= '...('.strval(count($mini_evenements[date('d-m-Y', $date)])).'&nbsp;'._T('sarkaspip:plusieurs_evenements_jour').')';
580                        $cellule .= '<a rel="nofollow" href="'.$lien.'" title="'.$bulle.'">'.strval(date('j', $date)).'</a>';           
581                }
582                $cellule .= '</td>';
583                $body .= $cellule;
584
585                $jour = $jour+1;
586                $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
587        }
588
589        // Cellules des jours visibles suivant le mois courant (toujours inclus strictement dans la derniere ligne)
590        while (date('w', $date) != $jour_debut) {
591                $cellule = '<td class="horsperiode">'; 
592                $cellule .= ($affichage_hors_mois == 'oui') ? strval(date('j', $date)) : '&nbsp;';
593                $cellule .= '</td>';
594
595                $body .= $cellule;
596                $jour = $jour+1;
597                $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
598        }
599        $body .= '</tr>';
600
601        // Fin du tableau
602        $body .= '</tbody>';
603        $body .= '</table>';
604
605        return $body;
606}
607
608// ===================================================
609// Auteur: Smellup
610// Fonction : Insertion du resume des evenements du mois
611// Utilisation : Choix possible de la taille max de la
612//               liste et du critere de selection des
613//               evenements (tous le mois ou juste la 
614//               fin du mois % date du jour)
615// ===================================================
616//
617function agenda_mini_footer($id_agenda=0, $critere='oui', $max_mois=6, $taille=5, $format='d-m H:i') {
618
619        if ($id_agenda == 0)
620                return;
621
622        if ($taille == 0)
623                return;
624
625        // Init du contexte
626        $nom_mois = agenda_mois(true, 'entier');
627        $contexte_aff = agenda_definir_contexte(0);
628        $mois_choisi = $contexte_aff['mois_base'];
629        $annee_choisie = $contexte_aff['annee_base'];
630        $url_base = $contexte_aff['url_base'];
631        // Init de l'annee et du mois courant
632        $mois_courant = affdate_base(date('Y-m-d'), 'mois');
633        $annee_courante = affdate_base(date('Y-m-d'), 'annee');
634        // Init des listes d'evenements
635        $evenements = agenda_recenser_evenement(0);
636        $count_evt = count($evenements);
637
638        // Init de la date de base pour calculer le nombre d'evenements du resume a afficher
639        // - si le mois choisi est le mois courant, la date de base est la date courante, on affichera donc les evenements posterieurs
640        // - si le mois choisi est anterieur ou posterieur au mois courant, la date de base est le 1er jour du mois
641        if (($annee_choisie==$annee_courante) && ($mois_choisi==$mois_courant)) 
642                $date_base = date('Y-m-d');
643        else
644                $date_base = date('Y-m-d', mktime(0,0,0,$mois_choisi,1,$annee_choisie));
645
646        // Init de la chaine
647        $footer = NULL;
648
649        // Extraction des evenements du resume si demande
650        if ($critere == 'oui') {
651                $i = 1;
652                $liste_complete = FALSE;
653                $cellule = NULL;
654                $count_liste = 0;
655                while ((!$liste_complete) && ($i <= $count_evt)) {
656                        $annee = $evenements[$i]['annee'];
657                        $mois = $evenements[$i]['mois'];
658                        $jour = $evenements[$i]['jour'];
659                        $date = mktime(0,0,0,$mois, $jour, $annee);
660                        if ((date('Y-m-d',$date) >= $date_base) && ($count_liste < $taille)) {
661                                if ($count_liste == 0) $cellule .= '<table id="footer_evenements" summary="'._T('sarkaspip:resume_mini_agenda_footer').'">';
662                                $cellule .= '<tr><td class="footer_colg">'.affdate_base($evenements[$i]['date_redac'], $format).':&nbsp;</td>';
663                                $cellule .= '<td class="footer_cold"><a rel="nofollow" href="spip.php?page=evenement&amp;id_article='.$evenements[$i]['id'].'">'.$evenements[$i]['titre'].'</a></td></tr>';
664                                $count_liste += 1;
665                        }
666                        $liste_complete = ($count_liste == $taille);
667                        $i = $i + 1;
668                }
669                if ($count_liste == 0) {
670                        if ($max_mois == 1)
671                                $msg_erreur = _T('sarkaspip:agenda_1_mois_vide');
672                        else {
673                                $msg_erreur = _T('sarkaspip:agenda_n_mois_vides', array('mois'=>$max_mois));
674                        }
675                        $cellule .= '<div class="texte">'.$msg_erreur.'</div>';
676                }
677                else
678                        $cellule .= '</table>';
679
680                $footer .= $cellule;
681        }
682        return $footer;
683}
684?>
Note: See TracBrowser for help on using the repository browser.