squellete2
[aidenligne_francais_universite.git] / ecrire / action / ical.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined("_ECRIRE_INC_VERSION")) return;
14
15
16 include_spip('inc/lang');
17 utiliser_langue_visiteur();
18 include_spip('inc/texte');
19 include_spip('inc/charsets');
20 include_spip('inc/meta');
21 include_spip('inc/acces');
22
23 // avec le nouveau compilateur tout ceci me semble faisable en squelette.
24
25 // http://doc.spip.org/@ligne_uid
26 function ligne_uid ($texte) {
27 echo filtrer_ical("UID:$texte @ " . url_de_base())."\n";
28 }
29
30 // http://doc.spip.org/@action_ical_dist
31 function action_ical_dist()
32 {
33 global $id_auteur, $arg, $action, $titres;
34
35 // compatibilite des URLs spip_cal.php3?id=xxx&cle=yyy (SPIP 1.8)
36 if (!$id_auteur AND _request('id')) {
37 $id_auteur = _request('id');
38 $arg = _request('cle');
39 }
40
41 if (verifier_low_sec($id_auteur, $arg, $action)) {
42 $result = spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=" . intval($id_auteur));
43
44 if ($row = spip_fetch_array($result)) {
45 $id_utilisateur=$row['id_auteur'];
46 $nom_utilisateur=extraire_multi($row['nom']);
47 $statut_utilisateur=$row['statut'];
48 $langue_utilisateur=$row['lang'];
49 }
50 }
51 if (!$id_utilisateur) {
52 spip_log("spip_cal: acces interdit a $id_auteur par $arg");
53 echo _T('info_acces_interdit');
54 exit;
55 }
56 lang_select($langue_utilisateur);
57 $nom_site = $GLOBALS['meta']["nom_site"];
58 $adresse_site = url_de_base();
59 $spip = "SPIP " . $GLOBALS['spip_version_affichee'] . ' ' . $GLOBALS['home_server'];
60
61 header("Content-Type: text/calendar; charset=utf-8");
62 echo filtrer_ical ("BEGIN:VCALENDAR"), "\n",
63 filtrer_ical ("CALSCALE:GREGORIAN"), "\n",
64 filtrer_ical ("PRODID: $spip"), "\n",
65 filtrer_ical ("VERSION:2.0"), "\n",
66 filtrer_ical ("X-WR-CALNAME;VALUE=TEXT:$nom_site / $nom_utilisateur"), "\n",
67 filtrer_ical ("X-WR-RELCALID:cal$id_utilisateur @ $adresse_site"), "\n";
68 spip_ical_rendez_vous($id_utilisateur, $nom_site);
69 spip_ical_taches($id_utilisateur, $nom_site);
70
71 $titres = Array();
72 $nb_articles = spip_ical_articles($nom_site);
73 $nb_breves = spip_ical_breves($nom_site);
74 if ($nb_articles || $nb_breves) {
75 if ($nb_articles > 0) $titre_prop[] = _T('info_articles_proposes').": ".$nb_articles;
76 if ($nb_breves > 0) $titre_prop[] = _T('info_breves_valider').": ".$nb_breves;
77 $titre = join($titre_prop," / ");
78 echo filtrer_ical ("BEGIN:VTODO"), "\n",
79 filtrer_ical ("SUMMARY:[$nom_site] $titre"), "\n";
80 ligne_uid ("prop");
81 $texte = join($titres," / ");
82 echo filtrer_ical ("DESCRIPTION:$texte"), "\n";
83
84 $today=getdate(time());
85 $jour = $today["mday"];
86 $mois=$today["mon"];
87 $annee=$today["year"];
88 echo filtrer_ical ("DTSTAMP:".date ("Ymd\THis", mktime (12,0,0,$mois,$jour,$annee))), "\n",
89 filtrer_ical ("DTSTART:".date ("Ymd\THis", mktime (12,0,0,$mois,$jour,$annee))), "\n",
90 filtrer_ical ("CATEGORIES:"._T('icone_a_suivre')), "\n",
91 filtrer_ical ("URL:$adresse_site" . _DIR_RESTREINT_ABS), "\n",
92 filtrer_ical ("END:VTODO"), "\n";
93 }
94 spip_ical_messages($id_utilisateur, $nom_site);
95 if ($statut_utilisateur == "0minirezo") {
96 spip_ical_forums($id_utilisateur, $nom_site);
97 }
98 echo filtrer_ical ("END:VCALENDAR"), "\n";
99 }
100
101 // http://doc.spip.org/@spip_ical_rendez_vous
102 function spip_ical_rendez_vous($id_utilisateur, $nom_site)
103 {
104 $result_messages=spip_query("SELECT messages.* FROM spip_messages AS messages, spip_auteurs_messages AS lien WHERE ((lien.id_auteur='$id_utilisateur' AND lien.id_message=messages.id_message) OR messages.type='affich') AND messages.rv='oui' AND messages.statut='publie' GROUP BY messages.id_message ORDER BY messages.date_heure");
105 while($row=spip_fetch_array($result_messages)){
106 $id_message=$row['id_message'];
107 $date_heure=$row["date_heure"];
108 $date_heure_fin=$row["date_fin"];
109 //$titre=typo($row["titre"]);
110 $titre = $row["titre"];
111 $texte = $row["texte"];
112 $type=$row["type"];
113
114 if ($type == 'normal') {
115 $le_type = _T('info_message_2');
116 $result_auteurs=spip_query("SELECT auteurs.* FROM spip_auteurs AS auteurs, spip_auteurs_messages AS lien WHERE (lien.id_message='$id_message' AND lien.id_auteur=auteurs.id_auteur)");
117 while($row_auteur=spip_fetch_array($result_auteurs)){
118 $id_auteur=$row_auteur['id_auteur'];
119 $nom_auteur=$row_auteur['nom'];
120 $email = $row_auteur ['email'];
121
122 if ($id_auteur != $id_utilisateur) $titre = $titre." - ".$nom_auteur;
123
124 if ($id_auteur == $id_utilisateur) echo filtrer_ical ("ORGANIZER:$nom_auteur <$email>"), "\n";
125 else echo filtrer_ical ("ATTENDEE:$nom_auteur <$email>"), "\n";
126 }
127 }
128 else if ($type == 'pb') {
129 $le_type = _T('info_pense_bete');
130 }
131 else if ($type == 'affich') {
132 $le_type = _T('info_annonce');
133 $titre = "[$nom_site] $titre";
134 }
135
136 echo filtrer_ical ("BEGIN:VEVENT"), "\n",
137 filtrer_ical ("SUMMARY:".$titre), "\n",
138 filtrer_ical ("DESCRIPTION:$texte"), "\n";
139
140 ligne_uid ("mess$id_message");
141
142 echo filtrer_ical ("DTSTAMP:".date_ical($date_heure)), "\n",
143 filtrer_ical ("DTSTART:".date_ical($date_heure)), "\n";
144 if ($date_heure_fin > $date_heure) echo filtrer_ical ("DTEND:".date_ical($date_heure_fin)), "\n";
145
146 echo filtrer_ical ("CATEGORIES:$le_type"), "\n",
147 filtrer_ical ("URL:" . generer_url_ecrire("message","id_message=$id_message")), "\n",
148 filtrer_ical ("END:VEVENT"), "\n";
149 }
150 }
151
152 // http://doc.spip.org/@spip_ical_taches
153 function spip_ical_taches($id_utilisateur, $nom_site)
154 {
155 $result_messages=spip_query("SELECT messages.* FROM spip_messages AS messages, spip_auteurs_messages AS lien WHERE lien.id_auteur='$id_utilisateur' AND lien.id_message=messages.id_message AND messages.type='pb' AND messages.rv!='oui' AND messages.statut='publie' GROUP BY messages.id_message ORDER BY messages.date_heure");
156 while($row=spip_fetch_array($result_messages)){
157 $id_message=$row['id_message'];
158 $date_heure=$row["date_heure"];
159 $titre = $row["titre"];
160 $texte = $row["texte"];
161 $type=$row["type"];
162
163 if ($type == 'normal') {
164 $le_type = _T('info_message_2');
165 $result_auteurs=spip_query("SELECT auteurs.* FROM spip_auteurs AS auteurs, spip_auteurs_messages AS lien WHERE (lien.id_message='$id_message' AND lien.id_auteur=auteurs.id_auteur)");
166 while($row_auteur=spip_fetch_array($result_auteurs)){
167 $id_auteur=$row_auteur['id_auteur'];
168 $nom_auteur=$row_auteur['nom'];
169 $email = $row_auteur ['email'];
170
171 if ($id_auteur != $id_utilisateur) $titre = $titre." - ".$nom_auteur;
172
173 if ($id_auteur == $id_utilisateur) echo filtrer_ical ("ORGANIZER:$nom_auteur <$email>"), "\n";
174 else echo filtrer_ical ("ATTENDEE:$nom_auteur <$email>"), "\n";
175 }
176 }
177 else if ($type == 'pb') {
178 $le_type = _T('info_pense_bete');
179 }
180 else if ($type == 'affich') {
181 $le_type = _T('info_annonce');
182 $titre = "[$nom_site] $titre";
183 }
184
185 echo filtrer_ical ("BEGIN:VTODO"), "\n",
186 filtrer_ical ("SUMMARY:".$titre), "\n",
187 filtrer_ical ("DESCRIPTION:$texte"), "\n";
188 ligne_uid ("mess$id_message");
189 echo filtrer_ical ("DTSTAMP:".date_ical($date_heure)), "\n",
190 filtrer_ical ("DTSTART:".date_ical($date_heure)), "\n",
191 filtrer_ical ("CATEGORIES:$le_type"), "\n",
192 filtrer_ical ("URL:" . generer_url_ecrire("message","id_message=$id_message")), "\n",
193 filtrer_ical ("END:VTODO"), "\n";
194 }
195 }
196
197 // http://doc.spip.org/@spip_ical_articles
198 function spip_ical_articles($nom_site)
199 {
200 global $titres;
201 $result_articles = spip_query("SELECT id_article, titre, date FROM spip_articles WHERE statut = 'prop'");
202 while($row=spip_fetch_array($result_articles)){
203 $id_article=$row['id_article'];
204 $titre = supprimer_numero($row['titre']);
205 $titres[] = $titre;
206 $date_heure = $row['date'];
207 $nb_articles ++;
208 echo filtrer_ical ("BEGIN:VEVENT"), "\n",
209 filtrer_ical ("SUMMARY:[$nom_site] $titre ("._T('info_article_propose').")"), "\n";
210 ligne_uid ("article$id_article");
211 echo filtrer_ical ("DTSTAMP:".date ("Ymd\THis", mktime (heures($date_heure),minutes($date_heure),0,mois($date_heure),jour($date_heure),annee($date_heure)))), "\n",
212 filtrer_ical ("DTSTART;VALUE=DATE:".date ("Ymd", mktime (heures($date_heure),minutes($date_heure),0,mois($date_heure),jour($date_heure),annee($date_heure)))), "\n",
213 filtrer_ical ("CATEGORIES:"._T('info_article_propose')), "\n",
214 filtrer_ical ("URL:" . generer_url_ecrire("articles","id_article=$id_article")), "\n",
215 filtrer_ical ("END:VEVENT"), "\n";
216 }
217 return $nb_articles;
218 }
219
220
221 // http://doc.spip.org/@spip_ical_breves
222 function spip_ical_breves($nom_site)
223 {
224 global $titres;
225 $result = spip_query("SELECT id_breve, titre, date_heure FROM spip_breves WHERE statut = 'prop'");
226 while($row=spip_fetch_array($result)){
227 $id_breve=$row['id_breve'];
228 $titre = supprimer_numero($row['titre']);
229 $titres[] = $titre;
230 $date_heure = $row['date_heure'];
231 $nb_breves++;
232 echo filtrer_ical ("BEGIN:VEVENT"), "\n",
233 filtrer_ical ("SUMMARY:[$nom_site] $titre ("._T('item_breve_proposee').")"), "\n";
234 ligne_uid ("breve$id_breve");
235 echo filtrer_ical ("DTSTAMP:".date ("Ymd\THis", mktime (heures($date_heure),minutes($date_heure),0,mois($date_heure),jour($date_heure),annee($date_heure)))), "\n",
236 filtrer_ical ("DTSTART;VALUE=DATE:".date ("Ymd", mktime (heures($date_heure),minutes($date_heure),0,mois($date_heure),jour($date_heure),annee($date_heure)))), "\n",
237 filtrer_ical ("CATEGORIES:"._T('item_breve_proposee')), "\n",
238 filtrer_ical ("URL:" . generer_url_ecrire("breves_voir","id_breve=$id_breve")), "\n",
239 filtrer_ical ("END:VEVENT"), "\n";
240 }
241 return $nb_breves;
242 }
243
244
245 // http://doc.spip.org/@spip_ical_messages
246 function spip_ical_messages($id_utilisateur, $nom_site)
247 {
248 $result_messages = spip_query("SELECT * FROM spip_messages AS messages, spip_auteurs_messages AS lien WHERE lien.id_auteur=$id_utilisateur AND vu='non' AND statut='publie' AND type='normal' AND lien.id_message=messages.id_message");
249 while($row=spip_fetch_array($result_messages)){
250 $id_message=$row['id_message'];
251 $date_heure=$row["date_heure"];
252 $titre = $row["titre"];
253 $texte = $row["texte"];
254 $type=$row["type"];
255
256 if ($type == 'normal') {
257 $le_type = _T('info_message_2');
258 $result_auteurs=spip_query("SELECT auteurs.* FROM spip_auteurs AS auteurs, spip_auteurs_messages AS lien WHERE (lien.id_message='$id_message' AND lien.id_auteur=auteurs.id_auteur)");
259 while($row_auteur=spip_fetch_array($result_auteurs)){
260 $id_auteur=$row_auteur['id_auteur'];
261 $nom_auteur = $row_auteur['nom'];
262 $email = $row_auteur ['email'];
263
264 if ($id_auteur != $id_utilisateur) $titre = $nom_auteur." - ".$titre;
265
266 if ($id_auteur == $id_utilisateur) echo filtrer_ical ("ORGANIZER:$nom_auteur <$email>"), "\n";
267 else echo filtrer_ical ("ATTENDEE:$nom_auteur <$email>"), "\n";
268 }
269 $result_forum = spip_query("SELECT * FROM spip_forum WHERE statut='perso' AND id_message='$id_message' ORDER BY date_heure DESC LIMIT 1");
270
271 if ($row_forum = spip_fetch_array($result_forum)) {
272 $date_heure = $row_forum["date_heure"];
273 $texte = $row_forum["texte"];
274 $titre = $row_forum["titre"];
275 $id_auteur = $row_forum["id_auteur"];
276
277 $result_auteurs2 = spip_query("SELECT * FROM spip_auteurs WHERE id_auteur = $id_auteur");
278 if ($row_auteur2 = spip_fetch_array($result_auteurs2)){
279 $nom_auteur = $row_auteur2['nom'];
280 $email = $row_auteur2 ['email'];
281
282 $titre = $nom_auteur." - ".$titre;
283 }
284 }
285 }
286 else if ($type == 'pb') {
287 $le_type = _T('info_pense_bete');
288 }
289 else if ($type == 'affich') {
290 $le_type = _T('info_annonce');
291 $titre = "[$nom_site] $titre";
292 }
293
294 echo filtrer_ical ("BEGIN:VTODO"), "\n",
295 filtrer_ical ("SUMMARY:".$titre), "\n",
296 filtrer_ical ("DESCRIPTION:$texte"), "\n";
297 ligne_uid ("nouv_mess$id_message");
298 echo filtrer_ical ("DTSTAMP:".date ("Ymd\THis", mktime (heures($date_heure),minutes($date_heure),0,mois($date_heure),jour($date_heure),annee($date_heure)))), "\n",
299 filtrer_ical ("DTSTART:".date ("Ymd\THis", mktime (heures($date_heure),minutes($date_heure),0,mois($date_heure),jour($date_heure),annee($date_heure)))), "\n",
300 filtrer_ical ("CATEGORIES:$le_type"), "\n",
301 filtrer_ical ("URL:" . generer_url_ecrire("message","id_message=$id_message")), "\n",
302 filtrer_ical ("END:VTODO"), "\n";
303 }
304 }
305
306 // http://doc.spip.org/@spip_ical_forums
307 function spip_ical_forums($id_utilisateur, $nom_site)
308 {
309 $result_forum = spip_query("SELECT * FROM spip_forum WHERE statut = 'prop'");
310
311 while($row=spip_fetch_array($result_forum)){
312 $nb_forum ++;
313
314 $id_forum=$row['id_forum'];
315 $date_heure = $row['date_heure'];
316 $titre = $row['titre'];
317 $texte = $row['texte'];
318 $auteur = $row['auteur'];
319 $email_auteur = $row['email_auteur'];
320 if ($email_auteur) $email_auteur = "<$email_auteur>";
321
322 echo filtrer_ical ("BEGIN:VEVENT"), "\n",
323 filtrer_ical ("SUMMARY:[$nom_site] $titre "._T('icone_forum_suivi')), "\n",
324 filtrer_ical ("DESCRIPTION:$texte\r$auteur $email_auteur"), "\n";
325 ligne_uid ("forum$id_forum");
326 echo filtrer_ical ("DTSTAMP:".date ("Ymd\THis", mktime (heures($date_heure),minutes($date_heure),0,mois($date_heure),jour($date_heure),annee($date_heure)))), "\n",
327 filtrer_ical ("DTSTART:".date ("Ymd\THis", mktime (heures($date_heure),minutes($date_heure),0,mois($date_heure),jour($date_heure),annee($date_heure)))), "\n",
328 filtrer_ical ("DTEND:".date ("Ymd\THis", mktime (heures($date_heure),minutes($date_heure)+60,0,mois($date_heure),jour($date_heure),annee($date_heure)))), "\n",
329 filtrer_ical ("CATEGORIES:"._T('icone_forum_suivi')), "\n",
330 filtrer_ical ("URL:" . generer_url_ecrire("controle_forum")), "\n",
331 filtrer_ical ("END:VEVENT"), "\n";
332 }
333
334 if ($nb_forum > 0) {
335 echo filtrer_ical ("BEGIN:VTODO"), "\n",
336 filtrer_ical ("SUMMARY:[$nom_site] "._T('icone_forum_suivi').": $nb_forum"), "\n";
337 ligne_uid ("forum");
338
339 $today=getdate(time());
340 $jour = $today["mday"];
341 $mois=$today["mon"];
342 $annee=$today["year"];
343 echo filtrer_ical ("DTSTAMP:".date ("Ymd\THis", mktime (12,0,0,$mois,$jour,$annee))), "\n",
344 filtrer_ical ("DTSTART:".date ("Ymd\THis", mktime (12,0,0,$mois,$jour,$annee))), "\n",
345 filtrer_ical ("CATEGORIES:"._T('icone_forum_suivi')), "\n",
346 filtrer_ical ("URL:" . generer_url_ecrire("controle_forum")), "\n",
347 filtrer_ical ("END:VTODO"), "\n";
348 }
349 }
350 ?>