[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / plugins-dist / organiseur / action / quete_calendrier_prive.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
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 /**
16 * Fournir une liste d'"evenements" entre deux dates start et end
17 * au format json
18 * utilise pour l'affichage du calendrier prive et public
19 *
20 * @return void
21 */
22 function action_quete_calendrier_prive_dist(){
23 $securiser_action = charger_fonction('securiser_action','inc');
24 $securiser_action();
25
26 $start = _request('start');
27 $end = _request('end');
28 $quoi = _request('quoi');
29
30 include_spip('inc/quete_calendrier');
31
32 $evt = array();
33
34 // recuperer la liste des evenements au format ics
35 $start = date('Y-m-d H:i:s',$start);
36 $end = date('Y-m-d H:i:s',$end);
37 $limites = array(sql_quote($start),sql_quote($end));
38
39 // on fonction de quoi on récupère : tout (rv + publication) ou l'un ou l'autre.
40 $entier = $duree = array();
41
42 if (!$quoi OR $quoi=='rv') {
43 $duree = quete_calendrier_interval_rv(reset($limites), end($limites));
44 $evt = convert_fullcalendar_quete_calendrier_interval_rv($duree, $evt);
45 }
46
47 if (!$quoi OR $quoi=='publication') {
48 list($entier,) = quete_calendrier_interval($limites);
49 $evt = convert_fullcalendar_quete_calendrier_interval($entier, $evt);
50 }
51
52
53 // permettre aux plugins d'afficher leurs evenements dans ce calendrier
54 $evt = pipeline('quete_calendrier_prive',
55 array(
56 'args' => array('start' => $start, 'end' => $end, 'quoi'=>$quoi),
57 'data' => $evt,
58 )
59 );
60
61 // format json
62 include_spip('inc/json');
63 echo json_encode($evt);
64 }
65
66 /**
67 * Convertir une date au format ical renvoyee par quete_calendrier_interval
68 * dans le format attendu par fullcalendar : yyyy-mm-dd H:i:s
69 * @param $dateical
70 * @return string
71 */
72 function convert_dateical($dateical){
73 $d = explode('T',$dateical);
74 $amj = reset($d);
75 $s = substr($amj,0,4).'-'.substr($amj,4,2).'-'.substr($amj,6,2);
76 if (count($d)>1){
77 $his = end($d);
78 $s .= ' '.substr($his,0,2).":".substr($his,2,2).":".substr($his,4,2);
79 }
80 return $s;
81 }
82
83 /**
84 * Convertir une sortie événement de quète calendrier_interval
85 * dans le format attendu par fullcalendar
86 *
87 * @param array $messages
88 * Les événements / messages au format de la quete calendrier_interval
89 * @param array $evt
90 * Les événements au format fullcalendar déjà présents
91 * @return array
92 * Les événements au format fullcalendar
93 **/
94 function convert_fullcalendar_quete_calendrier_interval($messages, $evt = array()) {
95 if (!$messages) return $evt;
96
97 // la retransformer au format attendu par fullcalendar
98 // facile : chaque evt n'est mentionne qu'une fois, a une date
99 foreach($messages as $amj=>$l){
100 $date = substr($amj,0,4).'-'.substr($amj,4,2).'-'.substr($amj,6,2);
101 foreach($l as $e){
102 $evt[] = array(
103 'id' => 0,
104 'title' => $e['SUMMARY'],
105 'allDay' => true,
106 'start' => $date,
107 'end' => $date,
108 'url' => str_replace('&amp;','&',$e['URL']),
109 'className' => "calendrier-event ".$e['CATEGORIES'],
110 'description' => $e['DESCRIPTION'],
111 );
112 }
113 }
114
115 return $evt;
116 }
117
118 /**
119 * Convertir une sortie événement de quete calendrier_interval_rv
120 * dans le format attendu par fullcalendar
121 *
122 * @param array $messages
123 * Les événements / messages au format issu de la quete calendrier_interval_rv
124 * @param array $evt
125 * Les événements au format fullcalendar déjà présents
126 * @return array
127 * Les événements au format fullcalendar
128 **/
129 function convert_fullcalendar_quete_calendrier_interval_rv($messages, $evt = array()) {
130 if (!$messages) return $evt;
131
132 // ici il faut faire attention : un evt apparait N fois
133 // mais on a son id
134 $seen = array();
135
136 // toutes les messages déjà inscrits qu'on ne remet pas
137 foreach ($evt as $e) {
138 $seen[$e['url']] = true;
139 }
140
141 foreach($messages as $amj=>$l){
142 foreach($l as $id=>$e){
143 $url = str_replace('&amp;','&',$e['URL']);
144 if (!isset($seen[$url])) {
145 $evt[] = array(
146 'id' => $id,
147 'title' => $e['SUMMARY'],
148 'allDay' => false,
149 'start' => convert_dateical($e['DTSTART']), //Ymd\THis
150 'end' => convert_dateical($e['DTEND']), // Ymd\THis
151 'url' => $url,
152 'className' => "calendrier-event ".$e['CATEGORIES'],
153 'description' => $e['DESCRIPTION'],
154 );
155 $seen[$url] = true;
156 }
157 }
158 }
159
160 return $evt;
161 }