b9196841b6ff5cca3ba8cab8a8e0b06afe13a6c4
[lhc/web/clavette_www.git] / www / plugins-dist / organiseur / inc / quete_calendrier.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
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 include_spip('inc/filtres');
16 // http://doc.spip.org/@calendrier_categories
17 function calendrier_categories($table, $num, $objet)
18 {
19 if (function_exists('generer_calendrier_class'))
20 return generer_calendrier_class($table, $num, $objet);
21 else {
22 // cf agenda.css
23 $num= sql_getfetsel((($objet != 'id_breve') ? 'id_secteur' : 'id_rubrique') . " AS id", $table, "$objet=$num");
24
25 return 'calendrier-couleur' . (($num%14)+1);
26 }
27 }
28
29 // ici on prend en fait le jour, la veille et le lendemain
30
31 // http://doc.spip.org/@quete_calendrier_jour
32 function quete_calendrier_jour($annee,$mois,$jour) {
33 $avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,$jour-1,$annee)) . "'";
34 $apres = "'" . date("Y-m-d", mktime(1,1,1,$mois,$jour+1,$annee)) .
35 " 23:59:59'";
36 return array($avant, $apres);
37 }
38
39 // retourne un tableau de 2 tableaux indexes par des dates
40 // - le premier indique les evenements du jour, sans indication de duree
41 // - le deuxime indique les evenements commencant ce jour, avec indication de duree
42
43 // http://doc.spip.org/@quete_calendrier_interval
44 function quete_calendrier_interval($limites) {
45 include_spip('inc/urls');
46 list($avant, $apres) = $limites;
47 $evt = array();
48 quete_calendrier_interval_articles($avant, $apres, $evt);
49 quete_calendrier_interval_breves($avant, $apres, $evt);
50 quete_calendrier_interval_rubriques($avant, $apres, $evt);
51 return array($evt, quete_calendrier_interval_rv($avant, $apres));
52 }
53
54 // http://doc.spip.org/@quete_calendrier_interval_forums
55 function quete_calendrier_interval_forums($limites, &$evenements) {
56 list($avant, $apres) = $limites;
57 $result=sql_select("DISTINCT titre, date_heure, id_forum", "spip_forum", "date_heure >= $avant AND date_heure < $apres", '', "date_heure");
58 while($row=sql_fetch($result)){
59 $amj = date_anneemoisjour($row['date_heure']);
60 $id = $row['id_forum'];
61 if (autoriser('voir','forum',$id))
62 $evenements[$amj][]=
63 array(
64 'URL' => generer_url_entite($id, 'forum'),
65 'CATEGORIES' => 'calendrier-couleur7',
66 'SUMMARY' => $row['titre'],
67 'DTSTART' => date_ical($row['date_heure']));
68 }
69 }
70
71 # 3 fonctions retournant les evenements d'une periode
72 # le tableau retourne est indexe par les balises du format ics
73 # afin qu'il soit facile de produire de tels documents.
74 # L'URL de chacun de ces evenements est celle de l'espace prive
75 # pour faciliter la navigation, ce qu'on obtient utilisant
76 # le 4e argument des fonctions generer_url_ecrire_$table
77
78 // http://doc.spip.org/@quete_calendrier_interval_articles
79 function quete_calendrier_interval_articles($avant, $apres, &$evenements) {
80
81 $result=sql_select('id_article, titre, date, descriptif, chapo, lang', 'spip_articles', "statut='publie' AND date >= $avant AND date < $apres", '', "date");
82
83 // tables traduites
84 $objets = explode(',', $GLOBALS['meta']['multi_objets']);
85
86 if (in_array('spip_articles', $objets)) {
87 include_spip('inc/lang_liste');
88 $langues = $GLOBALS['codes_langues'];
89 } else $langues = array();
90 while($row=sql_fetch($result)){
91 $amj = date_anneemoisjour($row['date']);
92 $id = $row['id_article'];
93 if (autoriser('voir','article',$id))
94 $evenements[$amj][]=
95 array(
96 'CATEGORIES' => calendrier_categories('spip_articles', $id, 'id_article'),
97 'DESCRIPTION' => $row['descriptif'] ? $row['descriptif'] : $langues[$row['lang']],
98 'SUMMARY' => $row['titre'],
99 'URL' => generer_url_ecrire_objet('article',$id, '','','prop'));
100 }
101 }
102
103 // http://doc.spip.org/@quete_calendrier_interval_rubriques
104 function quete_calendrier_interval_rubriques($avant, $apres, &$evenements) {
105
106 $result=sql_select('DISTINCT R.id_rubrique, titre, descriptif, date', 'spip_rubriques AS R, spip_documents_liens AS L', "statut='publie' AND date >= $avant AND date < $apres AND R.id_rubrique = L.id_objet AND L.objet='rubrique'",'', "date");
107 while($row=sql_fetch($result)){
108 $amj = date_anneemoisjour($row['date']);
109 $id = $row['id_rubrique'];
110 if (autoriser('voir','rubrique',$id))
111 $evenements[$amj][]=
112 array(
113 'CATEGORIES' => calendrier_categories('spip_rubriques', $id, 'id_rubrique'),
114 'DESCRIPTION' => $row['descriptif'],
115 'SUMMARY' => $row['titre'],
116 'URL' => generer_url_ecrire_objet('rubrique',$id, '','', 'prop'));
117 }
118 }
119
120 // http://doc.spip.org/@quete_calendrier_interval_breves
121 function quete_calendrier_interval_breves($avant, $apres, &$evenements) {
122 $result=sql_select("id_breve, titre, date_heure, id_rubrique", 'spip_breves', "statut='publie' AND date_heure >= $avant AND date_heure < $apres", '', "date_heure");
123 while($row=sql_fetch($result)){
124 $amj = date_anneemoisjour($row['date_heure']);
125 $id = $row['id_breve'];
126 $ir = $row['id_rubrique'];
127 if (autoriser('voir','breve',$id))
128 $evenements[$amj][]=
129 array(
130 'URL' => generer_url_ecrire_objet('breve',$id, '','', 'prop'),
131 'CATEGORIES' => calendrier_categories('spip_breves', $ir, 'id_breve'),
132 'SUMMARY' => $row['titre']);
133 }
134 }
135
136 // http://doc.spip.org/@quete_calendrier_interval_rv
137 function quete_calendrier_interval_rv($avant, $apres) {
138 include_spip('inc/session');
139 $connect_id_auteur = session_get('id_auteur');
140
141 $evenements= array();
142 if (!$connect_id_auteur) return $evenements;
143 $result=sql_select("M.id_message, M.titre, M.texte, M.date_heure, M.date_fin, M.type",
144 "spip_messages AS M LEFT JOIN spip_auteurs_liens AS L ON (L.id_objet=M.id_message)",
145 "((L.objet='message' AND (L.id_auteur=$connect_id_auteur OR M.type='affich')) OR (L.objet IS NULL AND M.id_auteur=$connect_id_auteur AND ".sql_in('M.type',array('pb','affich'))."))"
146 ." AND M.rv='oui' AND ((M.date_fin >= $avant OR M.date_heure >= $avant) AND M.date_heure <= $apres) AND M.statut='publie'",
147 "M.id_message", "M.date_heure");
148 while($row=sql_fetch($result)){
149 $date_heure=$row["date_heure"];
150 $date_fin=$row["date_fin"];
151 $type=$row["type"];
152 $id_message=$row['id_message'];
153
154 if ($type=="pb")
155 $cat = 'calendrier-couleur2';
156 else {
157 if ($type=="affich")
158 $cat = 'calendrier-couleur4';
159 else {
160 if ($type!="normal")
161 $cat = 'calendrier-couleur12';
162 else {
163 $cat = 'calendrier-couleur9';
164 $auteurs = array_map('array_shift', sql_allfetsel("nom", "spip_auteurs AS A LEFT JOIN spip_auteurs_liens AS L ON L.id_auteur=A.id_auteur", "(L.objet='message' AND L.id_objet=$id_message AND (A.id_auteur!=$connect_id_auteur))"));
165 }
166 }
167 }
168
169 $jour_avant = substr($avant, 9,2);
170 $mois_avant = substr($avant, 6,2);
171 $annee_avant = substr($avant, 1,4);
172 $jour_apres = substr($apres, 9,2);
173 $mois_apres = substr($apres, 6,2);
174 $annee_apres = substr($apres, 1,4);
175 $ical_apres = date_anneemoisjour("$annee_apres-$mois_apres-".sprintf("%02d",$jour_apres));
176
177 // Calcul pour les semaines a cheval sur deux mois
178 $j = 0;
179 $amj = date_anneemoisjour("$annee_avant-$mois_avant-".sprintf("%02d", $j+($jour_avant)));
180
181 while ($amj <= $ical_apres) {
182 if (!($amj == date_anneemoisjour($date_fin) AND preg_match(",00:00:00,", $date_fin))) // Ne pas prendre la fin a minuit sur jour precedent
183 $evenements[$amj][$id_message]=
184 array(
185 'URL' => generer_url_ecrire("message","id_message=$id_message"),
186 'DTSTART' => date_ical($date_heure),
187 'DTEND' => date_ical($date_fin),
188 'DESCRIPTION' => $row['texte'],
189 'SUMMARY' => $row['titre'],
190 'CATEGORIES' => $cat,
191 'ATTENDEE' => (count($auteurs) == 0) ? '' : join($auteurs,", "));
192
193 $j ++;
194 $ladate = date("Y-m-d",mktime (1,1,1,$mois_avant, ($j + $jour_avant), $annee_avant));
195
196 $amj = date_anneemoisjour($ladate);
197
198 }
199
200 }
201 return $evenements;
202 }
203
204 // http://doc.spip.org/@quete_calendrier_agenda
205 function quete_calendrier_agenda ($annee, $mois) {
206 include_spip('inc/session');
207 $connect_id_auteur = session_get('id_auteur');
208
209 $rv = array();
210 if (!$connect_id_auteur) return $rv;
211 $date = date("Y-m-d", mktime(0,0,0,$mois, 1, $annee));
212 $mois = mois($date);
213 $annee = annee($date);
214
215 // rendez-vous personnels dans le mois
216 $result_messages = sql_select("M.titre AS summary, M.texte AS description, M.id_message AS uid, M.date_heure", "spip_messages AS M, spip_auteurs_liens AS L", "((L.id_auteur=$connect_id_auteur AND L.id_objet=M.id_message AND L.objet='message') OR M.type='affich') AND M.rv='oui' AND M.date_heure >='$annee-$mois-1' AND date_heure < DATE_ADD('$annee-$mois-1', INTERVAL 1 MONTH) AND M.statut='publie'");
217 while($row=sql_fetch($result_messages)) {
218 $rv[journum($row['date_heure'])] = $row;
219 }
220 return $rv;
221 }
222
223 ?>