8e3cd7b5b4661f5fbe842a709e4d6e9fb09bde09
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
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 \***************************************************************************/
14 * Gestion de l'action de quête des événements du calendrier
16 * @package SPIP\Organiseur\Action
19 if (!defined('_ECRIRE_INC_VERSION')) {
24 * Fournir une liste d'"evenements" entre deux dates start et end
27 * Utilisé pour l'affichage du calendrier privé et public
29 * @pipeline_appel quete_calendrier_prive
30 * @uses quete_calendrier_interval_rv()
31 * @uses quete_calendrier_interval()
32 * @uses convert_fullcalendar_quete_calendrier_interval_rv()
33 * @uses convert_fullcalendar_quete_calendrier_interval()
37 function action_quete_calendrier_prive_dist() {
38 $securiser_action = charger_fonction('securiser_action', 'inc');
41 $start = strtotime(_request('start'));
42 $end = strtotime(_request('end'));
43 $quoi = _request('quoi');
45 include_spip('inc/quete_calendrier');
49 // recuperer la liste des evenements au format ics
50 $start = date('Y-m-d H:i:s', $start);
51 $end = date('Y-m-d H:i:s', $end);
52 $limites = array(sql_quote($start), sql_quote($end));
54 // on fonction de quoi on récupère : tout (rv + publication) ou l'un ou l'autre.
55 $entier = $duree = array();
57 if (!$quoi or $quoi == 'rv') {
58 $duree = quete_calendrier_interval_rv(reset($limites), end($limites));
59 $evt = convert_fullcalendar_quete_calendrier_interval_rv($duree, $evt);
62 if (!$quoi or $quoi == 'publication') {
63 list($entier, ) = quete_calendrier_interval($limites);
64 $evt = convert_fullcalendar_quete_calendrier_interval($entier, $evt);
68 // permettre aux plugins d'afficher leurs evenements dans ce calendrier
70 'quete_calendrier_prive',
72 'args' => array('start' => $start, 'end' => $end, 'quoi' => $quoi),
78 include_spip('inc/json');
79 echo json_encode($evt);
83 * Convertir une date au format ical renvoyée par quete_calendrier_interval
84 * dans le format attendu par fullcalendar : yyyy-mm-dd H:i:s
89 function convert_dateical($dateical) {
90 $d = explode('T', $dateical);
92 $s = substr($amj, 0, 4) . '-' . substr($amj, 4, 2) . '-' . substr($amj, 6, 2);
95 $s .= ' ' . substr($his, 0, 2) . ':' . substr($his, 2, 2) . ':' . substr($his, 4, 2);
102 * Convertir une sortie événement de quète calendrier_interval
103 * dans le format attendu par fullcalendar
105 * @param array $messages
106 * Les événements / messages au format de la quete calendrier_interval
108 * Les événements au format fullcalendar déjà présents
110 * Les événements au format fullcalendar
112 function convert_fullcalendar_quete_calendrier_interval($messages, $evt = array()) {
117 // la retransformer au format attendu par fullcalendar
118 // facile : chaque evt n'est mentionne qu'une fois, a une date
119 foreach ($messages as $amj => $l) {
120 $date = substr($amj, 0, 4) . '-' . substr($amj, 4, 2) . '-' . substr($amj, 6, 2);
124 'title' => $e['SUMMARY'],
128 'url' => str_replace('&', '&', $e['URL']),
129 'className' => 'calendrier-event ' . $e['CATEGORIES'],
130 'description' => $e['DESCRIPTION'],
139 * Convertir une sortie événement de quete calendrier_interval_rv
140 * dans le format attendu par fullcalendar
142 * @use convert_dateical()
144 * @param array $messages
145 * Les événements / messages au format issu de la quete calendrier_interval_rv
147 * Les événements au format fullcalendar déjà présents
149 * Les événements au format fullcalendar
151 function convert_fullcalendar_quete_calendrier_interval_rv($messages, $evt = array()) {
156 // ici il faut faire attention : un evt apparait N fois
160 // toutes les messages déjà inscrits qu'on ne remet pas
161 foreach ($evt as $e) {
162 $seen[$e['url']] = true;
165 foreach ($messages as $l) {
166 foreach ($l as $id => $e) {
167 $url = str_replace('&', '&', $e['URL']);
168 if (!isset($seen[$url])) {
171 'title' => $e['SUMMARY'],
173 'start' => convert_dateical($e['DTSTART']), //Ymd\THis
174 'end' => convert_dateical($e['DTEND']), // Ymd\THis
176 'className' => 'calendrier-event ' . $e['CATEGORIES'],
177 'description' => $e['DESCRIPTION'],