source: spip-zone/_squelettes_/sarkaspip3/inc/sarkaspip_filtres_agenda.php @ 31457

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

Un problème presque mystique sur l'agenda résolu en changeant l'écriture d'une instruction d'incrémentation... No comment

File size: 26.1 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 N°'.$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 nom du jour en fonction de
368//            son index. Le nom des jours est un item
369//            de langue SPIP
370// Utilisation :
371// ===================================================
372//
373function agenda_nom_jour($id_jour=0) {
374        $nom_jour = array();
375       
376        array_push($nom_jour, _T('date_jour_1'), _T('date_jour_2'), _T('date_jour_3'), _T('date_jour_4'), 
377                                                  _T('date_jour_5'), _T('date_jour_6'), _T('date_jour_7'));
378
379        $jour = NULL;
380        if (($id_jour >= 0) && ($id_jour < 7))
381                $jour = $nom_jour[$id_jour];
382       
383        return $jour;
384}
385
386
387// ===================================================
388// Auteur: Smellup
389// Fonction : Insertion d'une bande de navigation dans
390//            les mois precedents et suivants
391// Utilisation : Choix possible des icones suivant et
392//               precedent
393// ===================================================
394//
395function agenda_mini_afficher($id_agenda=0, $icone_prec='&lt;&lt;', $icone_suiv='&gt;&gt;', 
396                                                                                        $jour_debut=0, $affichage_hors_mois='oui',
397                                                                                        $critere='oui', $max_mois=6, $taille=5, $format='d-m H:i') {
398
399        if ($id_agenda == 0)
400                return;
401               
402        $agenda = NULL;
403
404        // Creation du header compose des items de navigation annee et mois
405        $agenda .= agenda_mini_header($id_agenda, $icone_prec, $icone_suiv);
406       
407        // Creation du body compose du calendrier mensuel
408        $agenda .= agenda_mini_body($id_agenda, $jour_debut, $affichage_hors_mois);
409       
410        // Creation du footer compose des items de navigation aujourd'hui et du resume des evenements du mois
411        $agenda .= agenda_mini_footer($id_agenda, $critere, $max_mois, $taille, $format);
412
413        return $agenda;
414}
415
416
417function agenda_mini_header($id_agenda=0, $icone_prec='&lt;&lt;', $icone_suiv='&gt;&gt;') {
418
419        $nom_mois = array(1 => _T('sarkaspip:janvier'), 2 => _T('sarkaspip:fevrier'), 3 => _T('sarkaspip:mars'), 4 => _T('sarkaspip:avril'), 
420                                        5 => _T('sarkaspip:mai'), 6 => _T('sarkaspip:juin'), 7 => _T('sarkaspip:juillet'), 8 => _T('sarkaspip:aout'),
421                                        9 => _T('sarkaspip:septembre'), 10 => _T('sarkaspip:octobre'), 11 => _T('sarkaspip:novembre'), 12 => _T('sarkaspip:decembre'));
422
423        if ($id_agenda == 0)
424                return;
425
426        // Init du contexte
427        $contexte_aff = agenda_definir_contexte(0);
428        $mois_choisi = $contexte_aff['mois_base'];
429        $annee_choisie = $contexte_aff['annee_base'];
430        $url_base = $contexte_aff['url_base'];
431        // Init de l'annee et du mois courant
432        $mois_courant = affdate_base(date('Y-m-d'), 'mois');
433        $annee_courante = affdate_base(date('Y-m-d'), 'annee');
434
435        // Calcul des mois precedent et suivant
436        $mois = $mois_choisi-1;
437        if ($mois < 1) {
438                $mois_prec = '12';
439                $annee_prec = strval($annee_choisie-1);
440        }       
441        else {
442                $mois_prec = strval($mois);
443                $annee_prec = strval($annee_choisie);
444        }       
445
446        $mois = $mois_choisi+1;
447        if ($mois > 12) {
448                $mois_suiv = '1';
449                $annee_suiv = strval($annee_choisie+1);
450        }       
451        else {
452                $mois_suiv = strval($mois);
453                $annee_suiv = strval($annee_choisie);
454        }       
455        // Calcul des annees precedente et suivante
456        $annee_choisie_prec = strval($annee_choisie-1);
457        $annee_choisie_suiv = strval($annee_choisie+1);
458        // Calcul des mois et annees courants
459
460        // Init de la chaine
461        $header = NULL;
462        // Debut de l'en-tete
463        // Ligne 1 : pagination par annee
464        $header .= '<h2><a class="titre_bloc bord ajax" 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>';
465        $header .= '<h2 class="titre_bloc centre">'.$annee_choisie.'</h2>';   
466        $header .= '<h2><a class="titre_bloc bord ajax" 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>';
467        // Ligne 2 : pagination par mois
468        $header .= '<h2><a class="titre_bloc bord ajax" href="'.$url_base.'calendrier_mois='.$mois_prec.'&amp;calendrier_annee='.$annee_prec.'" title="'.$nom_mois[$mois_prec].'&nbsp;'.$annee_prec.'">'.$icone_prec.'</a></h2>';
469        $header .= '<h2 class="titre_bloc centre">'.$nom_mois[$mois_choisi].'</h2>';   
470        $header .= '<h2><a class="titre_bloc bord ajax" href="'.$url_base.'calendrier_mois='.$mois_suiv.'&amp;calendrier_annee='.$annee_suiv.'" title="'.$nom_mois[$mois_suiv].'&nbsp;'.$annee_suiv.'">'.$icone_suiv.'</a></h2>';
471        // Ligne 3 : retour au mois du jour courant
472        $header .= '<h2><a id="auj" class="titre_bloc ajax" 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>';
473        // Fin de l'en-tete
474       
475        return $header;
476}
477
478// ===================================================
479// Auteur: Smellup
480// Fonction : Insertion du mini-calendrier du mois choisi
481// Utilisation : Choix possible du jour de debut de la
482//               semaine et de l'affichage des jours
483//               contigus hors mois choisi
484// ===================================================
485//
486function agenda_mini_body($id_agenda=0, $jour_debut=0, $affichage_hors_mois='oui') {
487
488        $nom_jour_abrege = array(       0 => _T('sarkaspip:dimanche_abrege'), 1 => _T('sarkaspip:lundi_abrege'), 2 => _T('sarkaspip:mardi_abrege'), 3 => _T('sarkaspip:mercredi_abrege'), 
489                                                4 => _T('sarkaspip:jeudi_abrege'), 5 => _T('sarkaspip:vendredi_abrege'), 6 => _T('sarkaspip:samedi_abrege'));
490        $nom_jour = array(      0 => _T('sarkaspip:dimanche'), 1 => _T('sarkaspip:lundi'), 2 => _T('sarkaspip:mardi'), 3 => _T('sarkaspip:mercredi'), 
491                                                4 => _T('sarkaspip:jeudi'), 5 => _T('sarkaspip:vendredi'), 6 => _T('sarkaspip:samedi'));
492
493        if ($id_agenda == 0)
494                return;
495
496        // Init du contexte
497        $contexte_aff = agenda_definir_contexte(0);
498        $mois_choisi = $contexte_aff['mois_base'];
499        $annee_choisie = $contexte_aff['annee_base'];
500        $url_base = $contexte_aff['url_base'];
501        // Init des listes d'evenements
502        $evenements = agenda_recenser_evenement(0);
503        $mini_evenements = agenda_recenser_evenement(-1);
504
505        $body = NULL;
506        // DŽbut du tableau
507        $body .= '<table summary="'._T('sarkaspip:resume_mini_agenda_body').'">';
508       
509        // 1ere ligne : nom abrege des jours de dimanche a samedi
510        $body .= '<thead>'; 
511        $body .= '<tr>';
512        for($i = 0; $i <= 6; $i++) {
513                $j = ($jour_debut+$i)%7;
514                $body .= '<th title="'.$nom_jour[$j].'">'.$nom_jour_abrege[$j].'</th>';
515        }
516        $body .= '</tr>';
517        $body .= '</thead>';
518
519        // Cellules des jours : de 4 a 5 lignes de 7 jours. Debut de la 2eme ligne
520        $body .= '<tbody>'; 
521        $body .= '<tr>';
522
523        // Cellules des jours visibles precedant le mois courant (toujours inclus strictement dans la 2eme ligne)
524        $cellules_mois_prec = NULL;
525        $jour = 1;
526        $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
527        while (date('w', $date) != $jour_debut) {
528                $jour = $jour - 1;
529                $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
530
531                $cellule = '<td class="horsperiode">';
532                $cellule .= ($affichage_hors_mois == 'oui') ? strval(date('j', $date)) : '&nbsp;';
533                $cellule .= '</td>';
534
535                $cellules_mois_prec = $cellule.$cellules_mois_prec;
536        }
537        $body .= $cellules_mois_prec;
538
539        // Remplissage des cellules du mois
540        $jour = 1;
541        $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
542        while (date('m', $date) == $mois_choisi) {
543                if ((date('w', $date) == $jour_debut) && ($jour != 1))
544                        $body .= '</tr><tr>';
545
546                $cellule = '<td class="';
547                $cellule .= (date('d-m-Y', $date) == date('d-m-Y')) ? 'today">' : 'libre">';
548                if (!isset($mini_evenements[date('d-m-Y', $date)])) {
549                        // Il n'y pas d'evenement pour ce jour, on affiche la date
550                        $cellule .= strval(date('j', $date));
551                }
552                else {
553                        // Il y a un ou plusieurs evenements, on construit le lien et la bulle d'info
554                        $index_evt1 = $mini_evenements[date('d-m-Y', $date)][0];
555                        $lien = 'spip.php?page=evenement&amp;id_article='.$evenements[$index_evt1]['id'];
556                        $bulle = $evenements[$index_evt1]['heure'].'&nbsp;-&nbsp;'.$evenements[$index_evt1]['titre'];
557                        if (count($mini_evenements[date('d-m-Y', $date)]) > 1)
558                                $bulle .= '...('.strval(count($mini_evenements[date('d-m-Y', $date)])).'&nbsp;'._T('sarkaspip:plusieurs_evenements_jour').')';
559                        $cellule .= '<a href="'.$lien.'" title="'.$bulle.'">'.strval(date('j', $date)).'</a>';         
560                }
561                $cellule .= '</td>';
562                $body .= $cellule;
563
564                $jour = $jour+1;
565                $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
566        }
567
568        // Cellules des jours visibles suivant le mois courant (toujours inclus strictement dans la derniere ligne)
569        while (date('w', $date) != $jour_debut) {
570                $cellule = '<td class="horsperiode">';   //width="14%" valign="top"
571                $cellule .= ($affichage_hors_mois == 'oui') ? strval(date('j', $date)) : '&nbsp;';
572                $cellule .= '</td>';
573
574                $body .= $cellule;
575                $jour = $jour+1;
576                $date = mktime(0,0,0,$mois_choisi, $jour, $annee_choisie);
577        }
578        $body .= '</tr>';
579
580        // Fin du tableau
581        $body .= '</tbody>';
582        $body .= '</table>';
583
584        return $body;
585}
586
587// ===================================================
588// Auteur: Smellup
589// Fonction : Insertion du resume des evenements du mois
590// Utilisation : Choix possible de la taille masx de la
591//               liste et du critere de selection des
592//               evenements (tous le mois ou juste la 
593//               fin du mois % date du jour)
594// ===================================================
595//
596function agenda_mini_footer($id_agenda=0, $critere='oui', $max_mois=6, $taille=5, $format='d-m H:i') {
597
598        $nom_mois = array(1 => _T('sarkaspip:janvier'), 2 => _T('sarkaspip:fevrier'), 3 => _T('sarkaspip:mars'), 4 => _T('sarkaspip:avril'), 
599                                        5 => _T('sarkaspip:mai'), 6 => _T('sarkaspip:juin'), 7 => _T('sarkaspip:juillet'), 8 => _T('sarkaspip:aout'),
600                                        9 => _T('sarkaspip:septembre'), 10 => _T('sarkaspip:octobre'), 11 => _T('sarkaspip:novembre'), 12 => _T('sarkaspip:decembre'));
601
602        if ($id_agenda == 0)
603                return;
604
605        if ($taille == 0)
606                return;
607
608        // Init du contexte
609        $contexte_aff = agenda_definir_contexte(0);
610        $mois_choisi = $contexte_aff['mois_base'];
611        $annee_choisie = $contexte_aff['annee_base'];
612        $url_base = $contexte_aff['url_base'];
613        // Init de l'annee et du mois courant
614        $mois_courant = affdate_base(date('Y-m-d'), 'mois');
615        $annee_courante = affdate_base(date('Y-m-d'), 'annee');
616        // Init des listes d'evenements
617        $evenements = agenda_recenser_evenement(0);
618        $count_evt = count($evenements);
619
620        // Init de la date de base pour calculer le nombre d'evenements du resume a afficher
621        // - si le mois choisi est le mois courant, la date de base est la date courante, on affichera donc les evenements posterieurs
622        // - si le mois choisi est antŽrieur ou posterieur au mois courant, la date de base est le 1er jour du mois
623        if (($annee_choisie==$annee_courante) && ($mois_choisi==$mois_courant)) 
624                $date_base = date('Y-m-d');
625        else
626                $date_base = date('Y-m-d', mktime(0,0,0,$mois_choisi,1,$annee_choisie));
627
628        // Init de la chaine
629        $footer = NULL;
630
631        // Extraction des evenements du rŽsumŽ si demande
632        if ($critere == 'oui') {
633                $i = 1;
634                $liste_complete = FALSE;
635                $cellule = NULL;
636                $count_liste = 0;
637                while ((!$liste_complete) && ($i <= $count_evt)) {
638                        $annee = $evenements[$i]['annee'];
639                        $mois = $evenements[$i]['mois'];
640                        $jour = $evenements[$i]['jour'];
641                        $date = mktime(0,0,0,$mois, $jour, $annee);
642                        if ((date('Y-m-d',$date) >= $date_base) && ($count_liste < $taille)) {
643                                if ($count_liste == 0) $cellule .= '<table id="footer_evenements" summary="'._T('sarkaspip:resume_mini_agenda_footer').'">';
644                                $cellule .= '<tr><td class="footer_colg">'.affdate_base($evenements[$i]['date_redac'], $format).':&nbsp;</td>';
645                                $cellule .= '<td class="footer_cold"><a href="spip.php?page=evenement&amp;id_article='.$evenements[$i]['id'].'">'.$evenements[$i]['titre'].'</a></td></tr>';
646                                $count_liste += 1;
647                        }
648                        $liste_complete = ($count_liste == $taille);
649                        $i = $i + 1;
650                }
651                if ($count_liste == 0) {
652                        if ($max_mois == 1)
653                                $msg_erreur = _T('sarkaspip:agenda_1_mois_vide');
654                        else {
655                                $msg_erreur = _T('sarkaspip:agenda_n_mois_vides', array('mois'=>$max_mois));
656                        }
657                        $cellule .= '<div class="texte">'.$msg_erreur.'</div>';
658                }
659                else
660                        $cellule .= '</table>';
661
662                $footer .= $cellule;
663        }
664        return $footer;
665}
666?>
Note: See TracBrowser for help on using the repository browser.