1 | <?php |
---|
2 | |
---|
3 | include_spip('inc/texte'); |
---|
4 | include_spip('inc/date'); |
---|
5 | include_spip('agenda_mes_fonctions'); |
---|
6 | |
---|
7 | function Agenda_install(){ |
---|
8 | Agenda_verifier_base(); |
---|
9 | } |
---|
10 | |
---|
11 | function Agenda_uninstall(){ |
---|
12 | include_spip('base/agenda_evenements'); |
---|
13 | include_spip('base/abstract_sql'); |
---|
14 | |
---|
15 | // suppression du champ evenements a la table spip_groupe_mots |
---|
16 | spip_query("ALTER TABLE `spip_groupes_mots` DROP `evenements`"); |
---|
17 | |
---|
18 | } |
---|
19 | |
---|
20 | function Agenda_verifier_base(){ |
---|
21 | $version_base = 0.12; |
---|
22 | $current_version = 0.0; |
---|
23 | if ( (!isset($GLOBALS['meta']['agenda_base_version']) ) |
---|
24 | || (($current_version = $GLOBALS['meta']['agenda_base_version'])!=$version_base)){ |
---|
25 | include_spip('base/agenda_evenements'); |
---|
26 | if ($current_version==0.0){ |
---|
27 | include_spip('base/create'); |
---|
28 | include_spip('base/abstract_sql'); |
---|
29 | creer_base(); |
---|
30 | // ajout du champ evenements a la table spip_groupe_mots |
---|
31 | // si pas deja existant |
---|
32 | $desc = spip_abstract_showtable("spip_groupes_mots", '', true); |
---|
33 | if (!isset($desc['field']['evenements'])){ |
---|
34 | spip_query("ALTER TABLE spip_groupes_mots ADD `evenements` VARCHAR(3) NOT NULL AFTER `syndic`"); |
---|
35 | } |
---|
36 | ecrire_meta('agenda_base_version',$current_version=$version_base); |
---|
37 | } |
---|
38 | if ($current_version<0.11){ |
---|
39 | spip_query("ALTER TABLE spip_evenements ADD `horaire` ENUM('oui','non') DEFAULT 'oui' NOT NULL AFTER `lieu`"); |
---|
40 | ecrire_meta('agenda_base_version',$current_version=0.11); |
---|
41 | } |
---|
42 | if ($current_version<0.12){ |
---|
43 | spip_query("ALTER TABLE spip_evenements ADD `id_article` bigint(21) DEFAULT '0' NOT NULL AFTER `id_evenement`"); |
---|
44 | spip_query("ALTER TABLE spip_evenements ADD INDEX ( `id_article` )"); |
---|
45 | $res = spip_query ("SELECT * FROM spip_evenements_articles"); |
---|
46 | while ($row = spip_fetch_array($res)){ |
---|
47 | $id_article = $row['id_article']; |
---|
48 | $id_evenement = $row['id_evenement']; |
---|
49 | spip_query("UPDATE spip_evenements SET id_article=$id_article WHERE id_evenement=$id_evenement"); |
---|
50 | } |
---|
51 | spip_query("DROP TABLE spip_evenements_articles"); |
---|
52 | ecrire_meta('agenda_base_version',$current_version=0.12); |
---|
53 | } |
---|
54 | |
---|
55 | ecrire_metas(); |
---|
56 | } |
---|
57 | |
---|
58 | if (isset($GLOBALS['meta']['INDEX_elements_objet'])){ |
---|
59 | $INDEX_elements_objet = unserialize($GLOBALS['meta']['INDEX_elements_objet']); |
---|
60 | if (!isset($INDEX_elements_objet['spip_evenements'])){ |
---|
61 | $INDEX_elements_objet['spip_evenements'] = array('titre'=>8,'descriptif'=>4,'lieu'=>3); |
---|
62 | ecrire_meta('INDEX_elements_objet',serialize($INDEX_elements_objet)); |
---|
63 | ecrire_metas(); |
---|
64 | } |
---|
65 | } |
---|
66 | if (isset($GLOBALS['meta']['INDEX_objet_associes'])){ |
---|
67 | $INDEX_objet_associes = unserialize($GLOBALS['meta']['INDEX_objet_associes']); |
---|
68 | if (!isset($INDEX_objet_associes['spip_articles']['spip_evenements'])){ |
---|
69 | $INDEX_objet_associes['spip_articles']['spip_evenements'] = 1; |
---|
70 | ecrire_meta('INDEX_objet_associes',serialize($INDEX_objet_associes)); |
---|
71 | ecrire_metas(); |
---|
72 | } |
---|
73 | } |
---|
74 | if (isset($GLOBALS['meta']['INDEX_elements_associes'])){ |
---|
75 | $INDEX_elements_associes = unserialize($GLOBALS['meta']['INDEX_elements_associes']); |
---|
76 | if (!isset($INDEX_elements_associes['spip_evenements'])){ |
---|
77 | $INDEX_elements_associes['spip_evenements'] = array('titre'=>2,'descriptif'=>1); |
---|
78 | ecrire_meta('INDEX_elements_associes',serialize($INDEX_elements_associes)); |
---|
79 | ecrire_metas(); |
---|
80 | } |
---|
81 | } |
---|
82 | } |
---|
83 | |
---|
84 | function article_editable($id_article){ |
---|
85 | $flag_editable = false; |
---|
86 | global $connect_id_auteur, $id_secteur; |
---|
87 | |
---|
88 | $id_parent = intval($id_parent); |
---|
89 | if (!($id_article=intval($id_article))) |
---|
90 | return false; |
---|
91 | |
---|
92 | if ($row = spip_fetch_array(spip_query("SELECT statut, titre, id_rubrique FROM spip_articles WHERE id_article=".spip_abstract_quote($id_article)))) { |
---|
93 | $statut_article = $row['statut']; |
---|
94 | $titre_article = $row['titre']; |
---|
95 | $id_rubrique = $row['id_rubrique']; |
---|
96 | $statut_rubrique = acces_rubrique($id_rubrique); |
---|
97 | if ($titre_article=='') $titre_article = _T('info_sans_titre'); |
---|
98 | } |
---|
99 | else { |
---|
100 | $statut_article = ''; |
---|
101 | $statut_rubrique = false; |
---|
102 | $id_rubrique = '0'; |
---|
103 | if ($titre=='') $titre = _T('info_sans_titre'); |
---|
104 | } |
---|
105 | |
---|
106 | $flag_auteur = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs_articles WHERE id_article=".spip_abstract_quote($id_article)." AND id_auteur=".spip_abstract_quote($connect_id_auteur)." LIMIT 1")); |
---|
107 | |
---|
108 | $ok_nouveau_statut = false; |
---|
109 | $flag_editable = ($statut_rubrique |
---|
110 | OR ($flag_auteur |
---|
111 | AND ($statut_article == 'prepa' |
---|
112 | OR $statut_article == 'prop' |
---|
113 | OR $statut_article == 'poubelle'))); |
---|
114 | return $flag_editable; |
---|
115 | } |
---|
116 | |
---|
117 | function Agenda_afficher_date_evenement($date_debut, $date_fin, $horaire){ |
---|
118 | $s = ""; |
---|
119 | if (($d=date("Y-m-d",$date_debut))==date("Y-m-d",$date_fin)) |
---|
120 | { // meme jour |
---|
121 | $s = affdate_jourcourt($d); |
---|
122 | if ($horaire=='oui'){ |
---|
123 | $s .= " ".($hd=date("H:i",$date_debut)); |
---|
124 | if ($hd!=($hf=date("H:i",$date_fin))) |
---|
125 | $s .= "-$hf"; |
---|
126 | } |
---|
127 | } |
---|
128 | else if ((date("Y-m",$date_debut))==date("Y-m",$date_fin)) |
---|
129 | { // meme annee et mois, jours differents |
---|
130 | $d=date("Y-m-d",$date_debut); |
---|
131 | $s = affdate_jourcourt($d); |
---|
132 | if ($horaire=='oui') |
---|
133 | $s .= " ".($hd=date("H:i",$date_debut)); |
---|
134 | $s .= "<br/>"._T('agenda:evenement_date_au').date(($horaire=='oui')?"d H:i ":"d ",$date_fin); |
---|
135 | } |
---|
136 | else if ((date("Y",$date_debut))==date("Y",$date_fin)) |
---|
137 | { // meme annee, mois et jours differents |
---|
138 | $d=date("Y-m-d",$date_debut); |
---|
139 | $s = affdate_jourcourt($d); |
---|
140 | if ($horaire=='oui') |
---|
141 | $s .= " ".date("H:i",$date_debut); |
---|
142 | $d = date("Y-m-d",$date_fin); |
---|
143 | $s .= "<br/>"._T('agenda:evenement_date_au').affdate_jourcourt($d); |
---|
144 | if ($horaire=='oui') |
---|
145 | $s .= " ".date("H:i",$date_fin); |
---|
146 | } |
---|
147 | else |
---|
148 | { // tout different |
---|
149 | $s = affdate($d); |
---|
150 | if ($horaire=='oui') |
---|
151 | $s .= " ".date("(H:i)",$date_debut); |
---|
152 | $d = date("Y-m-d",$date_fin); |
---|
153 | $s .= "<br/>"._T('agenda:evenement_date_au').affdate($d); |
---|
154 | if ($horaire=='oui') |
---|
155 | $s .= " ".date("(H:i)",$date_fin); |
---|
156 | } |
---|
157 | return $s; |
---|
158 | } |
---|
159 | |
---|
160 | function Agenda_formulaire_article_afficher_evenements($id_article, $flag_editable) |
---|
161 | { |
---|
162 | global $connect_statut, $options,$connect_id_auteur; |
---|
163 | $out = ""; |
---|
164 | |
---|
165 | $les_evenements = array(); |
---|
166 | |
---|
167 | $result = spip_query( "SELECT * FROM spip_evenements AS evenements " |
---|
168 | . "WHERE evenements.id_article=".spip_abstract_quote($id_article) |
---|
169 | . " AND evenements.id_evenement_source=0" |
---|
170 | . " GROUP BY evenements.id_evenement ORDER BY evenements.date_debut"); |
---|
171 | |
---|
172 | if (spip_num_rows($result)) { |
---|
173 | $out .= "<div class='liste liste-evenements'>"; |
---|
174 | $out .= "<table width='100%' cellpadding='3' cellspacing='0' border='0' background=''>"; |
---|
175 | $table = array(); |
---|
176 | while ($row = spip_fetch_array($result,SPIP_ASSOC)) { |
---|
177 | $vals = array(); |
---|
178 | $id_evenement = $row['id_evenement']; |
---|
179 | $titre = typo($row['titre']); |
---|
180 | $descriptif = typo($row['descriptif']); |
---|
181 | $horaire = $row['horaire']; |
---|
182 | $date_debut = strtotime($row['date_debut']); |
---|
183 | $date_fin = strtotime($row['date_fin']); |
---|
184 | $id_evenement_source = $row['id_evenement_source']; |
---|
185 | $repetition = ($id_evenement_source!=0); |
---|
186 | |
---|
187 | $les_evenements[] = $id_evenement; |
---|
188 | |
---|
189 | $s = "<a href='".generer_url_ecrire('calendrier',"id_evenement=$id_evenement&ajouter_id_article=$id_article")."'>"; |
---|
190 | $s .= http_img_pack("../"._DIR_PLUGIN_AGENDA."/img_pack/agenda-12.png",'', "border='0'", _T('agenda:titre_sur_l_agenda')); |
---|
191 | $s .= "</a>"; |
---|
192 | $vals[] = $s; |
---|
193 | |
---|
194 | $s = Agenda_afficher_date_evenement($date_debut,$date_fin, $horaire); |
---|
195 | $s_rep = ""; |
---|
196 | $count_rep = 0; |
---|
197 | $res2 = spip_query("SELECT * FROM spip_evenements WHERE id_evenement_source=".spip_abstract_quote($id_evenement)." ORDER BY date_debut"); |
---|
198 | while ($row2 = spip_fetch_array($res2)){ |
---|
199 | $s_rep .= Agenda_afficher_date_evenement(strtotime($row2['date_debut']),strtotime($row2['date_fin']),$row2['horaire'])."<br/>"; |
---|
200 | $count_rep++; |
---|
201 | } |
---|
202 | if (strlen($s_rep)){ |
---|
203 | $s .= "<br/>".bouton_block_invisible("repetitions_evenement_$id_evenement"); |
---|
204 | $s .= "$count_rep ". _T('agenda:evenement_repetitions'); |
---|
205 | $s .= debut_block_invisible("repetitions_evenement_$id_evenement"); |
---|
206 | $s .= $s_rep; |
---|
207 | $s .= fin_block(); |
---|
208 | } |
---|
209 | |
---|
210 | $vals[] = $s; |
---|
211 | |
---|
212 | |
---|
213 | if ($flag_editable) { |
---|
214 | $url = self(); |
---|
215 | $url = parametre_url($url,'id_article',$id_article); |
---|
216 | $url = parametre_url($url,'id_evenement',$id_evenement); |
---|
217 | $url = parametre_url($url,'edit',1); |
---|
218 | $s = "<a href='$url'>".($titre ? $titre : '<em>('._T('info_sans_titre').')</em>')."</a>"; |
---|
219 | $vals[] = $s; |
---|
220 | } |
---|
221 | else{ |
---|
222 | $vals[] = $titre; |
---|
223 | } |
---|
224 | $vals[] = propre($descriptif); |
---|
225 | |
---|
226 | if ($flag_editable) { |
---|
227 | $vals[] = "<a href='" . generer_url_ecrire("articles","id_article=$id_article&supp_evenement=$id_evenement#agenda") . "'>"._T('agenda:lien_retirer_evenement')." ". http_img_pack('croix-rouge.gif', "X", "width='7' height='7' border='0' align='middle'") . "</a>"; |
---|
228 | } else { |
---|
229 | $vals[] = ""; |
---|
230 | } |
---|
231 | |
---|
232 | $table[] = $vals; |
---|
233 | } |
---|
234 | |
---|
235 | $largeurs = array('', '', '', '', ''); |
---|
236 | $styles = array('arial11', 'arial11', 'arial2', 'arial11', 'arial11'); |
---|
237 | $out .= afficher_liste($largeurs, $table, $styles, false); |
---|
238 | |
---|
239 | $out .= "</table></div>\n"; |
---|
240 | |
---|
241 | $les_evenements = join(',', $les_evenements); |
---|
242 | } |
---|
243 | return array($out,$les_evenements) ; |
---|
244 | } |
---|
245 | |
---|
246 | |
---|
247 | // |
---|
248 | // Liste des evenements agenda de l'article |
---|
249 | // |
---|
250 | |
---|
251 | function Agenda_formulaire_article_ajouter_evenement($id_article, $les_evenements, $flag_editable){ |
---|
252 | global $spip_lang_left, $spip_lang_right, $options; |
---|
253 | global $connect_statut, $options,$connect_id_auteur, $couleur_claire ; |
---|
254 | $id_evenement = intval(_request('id_evenement')); |
---|
255 | $edit = _request('edit'); |
---|
256 | |
---|
257 | $out = ""; |
---|
258 | $out .= "<div style='clear: both;'></div>"; |
---|
259 | if ($flag_editable){ |
---|
260 | if ((in_array($id_evenement,explode(",",$les_evenements)) && $edit==1)||_request('neweven')) |
---|
261 | $out .= debut_block_visible("evenementsarticle"); |
---|
262 | else |
---|
263 | $out .= debut_block_invisible("evenementsarticle"); |
---|
264 | |
---|
265 | $out .= "<div style='width:100%;'>"; |
---|
266 | $out .= "<table width='100%'>"; |
---|
267 | $out .= "<tr>"; |
---|
268 | $out .= "<td>"; |
---|
269 | |
---|
270 | $out .= generer_url_post_ecrire("articles", "id_article=$id_article"); |
---|
271 | if (in_array($id_evenement,explode(",",$les_evenements)) && $edit==1){ |
---|
272 | $out .= "<span class='verdana1'><strong>"._T('agenda:titre_cadre_modifier_evenement')." </strong></span>\n"; |
---|
273 | } else { |
---|
274 | $out .= "<span class='verdana1'><strong>"._T('agenda:titre_cadre_ajouter_evenement')." </strong></span>\n"; |
---|
275 | } |
---|
276 | $out .= "<div><input type='hidden' name='id_article' value=\"$id_article\">"; |
---|
277 | |
---|
278 | if (in_array($id_evenement,explode(",",$les_evenements)) && $edit==1){ |
---|
279 | $out .= Agenda_formulaire_edition_evenement($id_evenement, false); |
---|
280 | $out .= "</div>"; |
---|
281 | $out .= "</td></tr></table>"; |
---|
282 | $out .= "<div style='clear: both;'></div>"; |
---|
283 | $url = parametre_url(self(),'edit',''); |
---|
284 | $url = parametre_url($url,'neweven','1'); |
---|
285 | $url = parametre_url($url,'id_evenement',''); |
---|
286 | $out .= icone_horizontale(_T("agenda:icone_creer_evenement"),$url , "../"._DIR_PLUGIN_AGENDA."/img_pack/agenda-24.png", "creer.gif",false); |
---|
287 | } |
---|
288 | else{ |
---|
289 | // recuperer le titre de l'article pour le mettre par defaut sur l'evenement |
---|
290 | $titre_defaut = ""; |
---|
291 | $res = spip_query("SELECT titre FROM spip_articles where id_article=".spip_abstract_quote($id_article)); |
---|
292 | if ($row = spip_fetch_array($res)) |
---|
293 | $titre_defaut = $row['titre']; |
---|
294 | |
---|
295 | $out .= Agenda_formulaire_edition_evenement(NULL, true, '', $titre_defaut); |
---|
296 | $out .= "</div>"; |
---|
297 | $out .= "</td></tr></table>"; |
---|
298 | } |
---|
299 | |
---|
300 | $out .= "</div>"; |
---|
301 | $out .= fin_block(); |
---|
302 | } |
---|
303 | return $out; |
---|
304 | } |
---|
305 | |
---|
306 | function Agenda_formulaire_article($id_article, $flag_editable){ |
---|
307 | |
---|
308 | global $spip_lang_left, $spip_lang_right, $options; |
---|
309 | global $connect_statut, $options,$connect_id_auteur, $couleur_claire ; |
---|
310 | |
---|
311 | $out = ""; |
---|
312 | $out .= "<a name='agenda'></a>"; |
---|
313 | if ($flag_editable) { |
---|
314 | $out .= Agenda_action_formulaire_article($id_article); |
---|
315 | if (_request('edit')||_request('neweven')) |
---|
316 | $bouton = bouton_block_visible("evenementsarticle"); |
---|
317 | else |
---|
318 | $bouton = bouton_block_invisible("evenementsarticle"); |
---|
319 | } |
---|
320 | |
---|
321 | $out .= debut_cadre_enfonce("../"._DIR_PLUGIN_AGENDA."/img_pack/agenda-24.png", true, "", $bouton._T('agenda:texte_agenda') |
---|
322 | ." <a href='".generer_url_ecrire('calendrier',"ajouter_id_article=$id_article")."'>"._T('icone_calendrier')."</a>"); |
---|
323 | |
---|
324 | // |
---|
325 | // Afficher les evenements |
---|
326 | // |
---|
327 | |
---|
328 | list($s,$les_evenements) = Agenda_formulaire_article_afficher_evenements($id_article, $flag_editable); |
---|
329 | $out .= $s; |
---|
330 | // |
---|
331 | // Ajouter un evenements |
---|
332 | // |
---|
333 | |
---|
334 | if ($flag_editable) |
---|
335 | $out .= Agenda_formulaire_article_ajouter_evenement($id_article, $les_evenements, $flag_editable); |
---|
336 | |
---|
337 | |
---|
338 | $out .= fin_cadre_enfonce(true); |
---|
339 | return $out; |
---|
340 | } |
---|
341 | |
---|
342 | |
---|
343 | function Agenda_action_update_repetitions($id_evenement,$repetitions,$liste_mots){ |
---|
344 | // evenement source |
---|
345 | $res = spip_query("SELECT * FROM spip_evenements WHERE id_evenement=".spip_abstract_quote($id_evenement)); |
---|
346 | if ($row = spip_fetch_array(($res))){ |
---|
347 | $titre = $row['titre']; |
---|
348 | $descriptif = $row['descriptif']; |
---|
349 | $horaire = $row['horaire']; |
---|
350 | $lieu = $row['lieu']; |
---|
351 | $date_debut = strtotime($row['date_debut']); |
---|
352 | $date_fin = strtotime($row['date_fin']); |
---|
353 | $duree = $date_fin - $date_debut; |
---|
354 | $id_evenement_source = $row['id_evenement_source']; |
---|
355 | $id_article = $row['id_article']; |
---|
356 | if ($id_evenement_source!=0) |
---|
357 | return; // pas un evenement source donc rien a faire ici |
---|
358 | |
---|
359 | $repetitions_updated = array(); |
---|
360 | // mettre a jour toutes les repetitions deja existantes ou les supprimer si plus lieu |
---|
361 | $res = spip_query("SELECT id_evenement FROM spip_evenements WHERE id_evenement_source=".spip_abstract_quote($id_evenement)); |
---|
362 | while ($row = spip_fetch_array($res)){ |
---|
363 | $date = strtotime(date('Y-m-d',$row['date_debut'])); |
---|
364 | if (in_array($date,$repetitions)){ |
---|
365 | // il est maintenu, on l'update |
---|
366 | $repetitions_updated[] = $date; |
---|
367 | $update_date_debut = date('Y-m-d',$date)." ".date('H:i:s',$date_debut); |
---|
368 | $update_date_fin = date('Y-m-d H:i:s',strtotime($update_date_debut)+$duree); |
---|
369 | |
---|
370 | // TODO : prendre en charge la mise a jour uniquement si conforme a l'original |
---|
371 | $update_titre = $titre; |
---|
372 | $update_descriptif = $descriptif; |
---|
373 | $update_lieu = $lieu; |
---|
374 | |
---|
375 | // mettre a jour l'evenement |
---|
376 | $res=spip_query("UPDATE spip_evenements SET `titre`=".spip_abstract_quote($update_titre) |
---|
377 | . ",`descriptif`=".spip_abstract_quote($update_descriptif) |
---|
378 | . ",`lieu`=".spip_abstract_quote($update_lieu) |
---|
379 | . ",`horaire`=".spip_abstract_quote($horaire) |
---|
380 | . ",`date_debut`=".spip_abstract_quote($update_date_debut) |
---|
381 | . ",`date_fin`=".spip_abstract_quote($update_date_fin) |
---|
382 | . ",`id_article`=".spip_abstract_quote($id_article) |
---|
383 | . " WHERE `id_evenement` =".spip_abstract_quote($row['id_evenement'])); |
---|
384 | Agenda_action_update_liste_mots($row['id_evenement'],$liste_mots); |
---|
385 | } |
---|
386 | else { |
---|
387 | // il est supprime |
---|
388 | spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement=".$row['id_evenement']); |
---|
389 | spip_query("DELETE FROM spip_evenements WHERE id_evenement=".$row['id_evenement']); |
---|
390 | } |
---|
391 | |
---|
392 | } |
---|
393 | // regarder les repetitions a ajouter |
---|
394 | foreach($repetitions as $date){ |
---|
395 | if (!in_array($date,$repetitions_updated)){ |
---|
396 | $update_date_debut = date('Y-m-d',$date)." ".date('H:i:s',$date_debut); |
---|
397 | $update_date_fin = date('Y-m-d H:i:s',strtotime($update_date_debut)+$duree); |
---|
398 | $update_titre = $titre; |
---|
399 | $update_descriptif = $descriptif; |
---|
400 | $update_lieu = $lieu; |
---|
401 | |
---|
402 | $id_evenement_new = spip_abstract_insert("spip_evenements", |
---|
403 | "(id_evenement_source,maj)", |
---|
404 | "(".spip_abstract_quote($id_evenement).",NOW())"); |
---|
405 | if ($id_evenement_new==0) |
---|
406 | spip_log("agenda action formulaire article : impossible d'ajouter un evenement repete"); |
---|
407 | else { |
---|
408 | // mettre a jour l'evenement |
---|
409 | $res=spip_query("UPDATE spip_evenements SET `titre`=".spip_abstract_quote($update_titre) |
---|
410 | . ",`descriptif`=".spip_abstract_quote($update_descriptif) |
---|
411 | . ",`lieu`=".spip_abstract_quote($update_lieu) |
---|
412 | . ",`horaire`=".spip_abstract_quote($horaire) |
---|
413 | . ",`date_debut`=".spip_abstract_quote($update_date_debut) |
---|
414 | . ",`date_fin`=".spip_abstract_quote($update_date_fin) |
---|
415 | . ",`id_article`=".spip_abstract_quote($id_article) |
---|
416 | . " WHERE `id_evenement` =".spip_abstract_quote($id_evenement_new)); |
---|
417 | |
---|
418 | Agenda_action_update_liste_mots($id_evenement_new,$liste_mots); |
---|
419 | } |
---|
420 | } |
---|
421 | } |
---|
422 | } |
---|
423 | } |
---|
424 | function Agenda_action_supprime_repetitions($supp_evenement){ |
---|
425 | $res = spip_query("SELECT * FROM spip_evenements WHERE id_evenement_source=".spip_abstract_quote($supp_evenement)); |
---|
426 | while ($row = spip_fetch_array($res)){ |
---|
427 | $id_evenement = $row['id_evenement']; |
---|
428 | spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement=".spip_abstract_quote($id_evenement)); |
---|
429 | spip_query("DELETE FROM spip_evenements WHERE id_evenement=".spip_abstract_quote($id_evenement)); |
---|
430 | } |
---|
431 | } |
---|
432 | |
---|
433 | function Agenda_action_update_liste_mots($id_evenement,$liste_mots){ |
---|
434 | // suppression des mots obsoletes |
---|
435 | $cond_in = ""; |
---|
436 | if (count($liste_mots)) |
---|
437 | $cond_in = "AND " . calcul_mysql_in('id_mot', implode(",",$liste_mots), 'NOT'); |
---|
438 | spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement=".spip_abstract_quote($id_evenement)." ".$cond_in); |
---|
439 | // ajout/maj des nouveaux mots |
---|
440 | foreach($liste_mots as $id_mot){ |
---|
441 | if (!spip_fetch_array(spip_query("SELECT * FROM spip_mots_evenements WHERE id_evenement=".spip_abstract_quote($id_evenement)." AND id_mot=".spip_abstract_quote($id_mot)))) |
---|
442 | spip_query("INSERT INTO spip_mots_evenements (id_mot,id_evenement) VALUES (".spip_abstract_quote($id_mot).",".spip_abstract_quote($id_evenement).")"); |
---|
443 | } |
---|
444 | } |
---|
445 | |
---|
446 | |
---|
447 | function Agenda_action_formulaire_article($id_article){ |
---|
448 | include_spip('base/abstract_sql'); |
---|
449 | // s'assurer que les tables sont crees |
---|
450 | Agenda_install(); |
---|
451 | // gestion des requetes de mises à jour dans la base |
---|
452 | $id_evenement = intval(_request('id_evenement')); |
---|
453 | $insert = _request('evenement_insert'); |
---|
454 | $modif = _request('evenement_modif'); |
---|
455 | $supp_evenement = intval(_request('supp_evenement')); |
---|
456 | |
---|
457 | if (($insert || $modif)&&(!$supp_evenement)){ |
---|
458 | |
---|
459 | if ( ($insert) && (!$id_evenement) ){ |
---|
460 | $id_evenement = spip_abstract_insert("spip_evenements", |
---|
461 | "(id_evenement_source,maj)", |
---|
462 | "('0',NOW())"); |
---|
463 | if ($id_evenement==0){ |
---|
464 | spip_log("agenda action formulaire article : impossible d'ajouter un evenement"); |
---|
465 | return; |
---|
466 | } |
---|
467 | } |
---|
468 | if ($id_article){ |
---|
469 | // mettre a jour le lien evenement-article |
---|
470 | spip_query("UPDATE spip_evenements SET id_article=".spip_abstract_quote($id_article)." WHERE id_evenement=".spip_abstract_quote($id_evenement)); |
---|
471 | } |
---|
472 | $titre = _request('evenement_titre'); |
---|
473 | $descriptif = _request('evenement_descriptif'); |
---|
474 | $lieu = _request('evenement_lieu'); |
---|
475 | $horaire = _request('evenement_horaire'); |
---|
476 | if ($horaire!='oui') $horaire='non'; |
---|
477 | |
---|
478 | // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas |
---|
479 | $maxiter=4; |
---|
480 | $st_date_deb=FALSE; |
---|
481 | $jour_debut=_request('jour_evenement_debut'); |
---|
482 | // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions |
---|
483 | while(($st_date_deb<=FALSE)&&($maxiter-->0)) { |
---|
484 | $date_deb=_request('annee_evenement_debut').'-'._request('mois_evenement_debut').'-'.($jour_debut--) |
---|
485 | .' '._request('heure_evenement_debut').':'._request('minute_evenement_debut'); |
---|
486 | $st_date_deb=strtotime($date_deb); |
---|
487 | } |
---|
488 | $date_deb=format_mysql_date(date("Y",$st_date_deb),date("m",$st_date_deb),date("d",$st_date_deb),date("H",$st_date_deb),date("i",$st_date_deb), $s=0); |
---|
489 | |
---|
490 | // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas |
---|
491 | $maxiter=4; |
---|
492 | $st_date_fin=FALSE; |
---|
493 | $jour_fin=_request('jour_evenement_fin'); |
---|
494 | // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions |
---|
495 | while(($st_date_fin<=FALSE)&&($maxiter-->0)) { |
---|
496 | $st_date_fin=_request('annee_evenement_fin').'-'._request('mois_evenement_fin').'-'.($jour_fin--) |
---|
497 | .' '._request('heure_evenement_fin').':'._request('minute_evenement_fin'); |
---|
498 | $st_date_fin=strtotime($st_date_fin); |
---|
499 | } |
---|
500 | $st_date_fin = max($st_date_deb,$st_date_fin); |
---|
501 | $date_fin=format_mysql_date(date("Y",$st_date_fin),date("m",$st_date_fin),date("d",$st_date_fin),date("H",$st_date_fin),date("i",$st_date_fin), $s=0); |
---|
502 | |
---|
503 | // mettre a jour l'evenement |
---|
504 | $res=spip_query("UPDATE spip_evenements SET `titre`=".spip_abstract_quote($titre) |
---|
505 | . ",`descriptif`=".spip_abstract_quote($descriptif) |
---|
506 | . ",`lieu`=".spip_abstract_quote($lieu) |
---|
507 | . ",`horaire`=".spip_abstract_quote($horaire) |
---|
508 | . ",`date_debut`=".spip_abstract_quote($date_deb) |
---|
509 | . ",`date_fin`=".spip_abstract_quote($date_fin) |
---|
510 | . " WHERE `id_evenement` =".spip_abstract_quote($id_evenement)); |
---|
511 | |
---|
512 | // les mots cles : par groupes |
---|
513 | $res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui' ORDER BY titre"); |
---|
514 | $liste_mots = array(); |
---|
515 | while ($row = spip_fetch_array($res,SPIP_ASSOC)){ |
---|
516 | $id_groupe = $row['id_groupe']; |
---|
517 | $id_mot_a = _request("evenement_groupe_mot_select_$id_groupe"); // un array |
---|
518 | if (is_array($id_mot_a) && count($id_mot_a)){ |
---|
519 | if ($row['unseul']=='oui') |
---|
520 | $liste_mots[] = intval(reset($id_mot_a)); |
---|
521 | else |
---|
522 | foreach($id_mot_a as $id_mot) |
---|
523 | $liste_mots[] = intval($id_mot); |
---|
524 | } |
---|
525 | } |
---|
526 | |
---|
527 | Agenda_action_update_liste_mots($id_evenement,$liste_mots); |
---|
528 | |
---|
529 | // gestion des repetitions |
---|
530 | if (($repetitions = _request('selected_date_repetitions'))!=NULL){ |
---|
531 | $repetitions = explode(',',$repetitions); |
---|
532 | $rep = array(); |
---|
533 | foreach($repetitions as $key=>$date){ |
---|
534 | if (preg_match(",[0-9][0-9]?/[0-9][0-9]?/[0-9][0-9][0-9][0-9],",$date)){ |
---|
535 | $date = explode('/',$date); |
---|
536 | $date = $date[2]."/".$date[0]."/".$date[1]; |
---|
537 | $date = strtotime($date); |
---|
538 | } |
---|
539 | else { |
---|
540 | $date = preg_replace(",[0-2][0-9]:[0-6][0-9]:[0-6][0-9]\s*(UTC|GMT)(\+|\-)[0-9]{4},","",$date); |
---|
541 | $date = explode(' ',$date); |
---|
542 | $date = strtotime($date[2]." ".$date[1]." ".$date[3]); |
---|
543 | } |
---|
544 | if (!in_array($date,$repetitions)) |
---|
545 | $rep[] = $date; |
---|
546 | } |
---|
547 | $repetitions = $rep; |
---|
548 | } |
---|
549 | else |
---|
550 | $repetitions = array(); |
---|
551 | Agenda_action_update_repetitions($id_evenement, $repetitions, $liste_mots); |
---|
552 | } |
---|
553 | else if ($supp_evenement){ |
---|
554 | $id_article = intval(_request('id_article')); |
---|
555 | |
---|
556 | if (!$id_article) |
---|
557 | $id_article = intval(_request('ajouter_id_article')); |
---|
558 | $res = spip_query("SELECT * FROM spip_evenements WHERE id_article=".spip_abstract_quote($id_article)." AND id_evenement=".spip_abstract_quote($supp_evenement)); |
---|
559 | if ($row = spip_fetch_array($res)){ |
---|
560 | spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement=".spip_abstract_quote($supp_evenement)); |
---|
561 | spip_query("DELETE FROM spip_evenements WHERE id_evenement=".spip_abstract_quote($supp_evenement)); |
---|
562 | } |
---|
563 | Agenda_action_supprime_repetitions($supp_evenement); |
---|
564 | } |
---|
565 | return ""; |
---|
566 | } |
---|
567 | |
---|
568 | |
---|
569 | function Agenda_formulaire_edition_evenement($id_evenement, $neweven, $ndate="", $titre_defaut=""){ |
---|
570 | global $spip_lang_right; |
---|
571 | $out = ""; |
---|
572 | |
---|
573 | // inits |
---|
574 | $ftitre=$titre_defaut; |
---|
575 | $flieu=''; |
---|
576 | $fdescriptif=''; |
---|
577 | $fstdatedeb=time(); |
---|
578 | $fhoraire = 'oui'; |
---|
579 | if (($neweven)&&($ndate)){ |
---|
580 | $newdate=urldecode($ndate); |
---|
581 | $test=strtotime($newdate); |
---|
582 | if ($test>0) |
---|
583 | $fstdatedeb=$test; |
---|
584 | } |
---|
585 | $fstdatefin=$fstdatedeb+60*60; |
---|
586 | |
---|
587 | if ($id_evenement!=NULL){ |
---|
588 | $res = spip_query("SELECT evenements.* FROM spip_evenements AS evenements WHERE evenements.id_evenement=".spip_abstract_quote($id_evenement)); |
---|
589 | if ($row = spip_fetch_array($res)){ |
---|
590 | if (!$neweven){ |
---|
591 | $fid_evenement=$row['id_evenement']; |
---|
592 | $ftitre=entites_html($row['titre']); |
---|
593 | $flieu=entites_html($row['lieu']); |
---|
594 | $fhoraire=entites_html($row['horaire']); |
---|
595 | $fdescriptif=entites_html($row['descriptif']); |
---|
596 | $fstdatedeb=strtotime($row['date_debut']); |
---|
597 | $fstdatefin=strtotime($row['date_fin']); |
---|
598 | } |
---|
599 | } |
---|
600 | } |
---|
601 | |
---|
602 | $url=self(); |
---|
603 | $url=parametre_url($url,'edit',''); |
---|
604 | $url=parametre_url($url,'neweven',''); |
---|
605 | $url=parametre_url($url,'ndate',''); |
---|
606 | $url=parametre_url($url,'id_evenement',''); |
---|
607 | |
---|
608 | $out .= "<div class='agenda-visu-evenement'>"; |
---|
609 | |
---|
610 | $ajouter_id_article = _request('ajouter_id_article'); |
---|
611 | if ($ajouter_id_article && !_request('id_article')){ |
---|
612 | $res2 = spip_query("SELECT * FROM spip_articles AS articles WHERE id_article=".spip_abstract_quote($ajouter_id_article)); |
---|
613 | if ($row2 = spip_fetch_array($res2)){ |
---|
614 | $out .= "<div class='article-evenement'>"; |
---|
615 | $out .= "<a href='".generer_url_ecrire('articles',"id_article=".$row2['id_article'])."'>"; |
---|
616 | $out .= http_img_pack("article-24.gif", "", "width='24' height='24' border='0'"); |
---|
617 | $out .= entites_html($row2['titre'])."</a>"; |
---|
618 | $out .= "</div>\n"; |
---|
619 | } |
---|
620 | } |
---|
621 | |
---|
622 | $out .= "<div class='agenda-visu-evenement-bouton-fermer'>"; |
---|
623 | $out .= "<a href='$url'><img src='"._DIR_PLUGIN_AGENDA."/img_pack/croix.png' width='12' height='12' style='border:none;'></a>"; |
---|
624 | $out .= "</div>\n"; |
---|
625 | $out .= "<form name='edition_evenement' action='$url' method='post'>"; |
---|
626 | #$out .= "<input type='hidden' name='redirect' value='$url' />\n"; |
---|
627 | if (!$neweven){ |
---|
628 | $out .= "<input type='hidden' name='id_evenement' value='$fid_evenement' />\n"; |
---|
629 | $out .= "<input type='hidden' name='evenement_modif' value='1' />\n"; |
---|
630 | } |
---|
631 | else { |
---|
632 | $out .= "<input type='hidden' name='evenement_insert' value='1' />\n"; |
---|
633 | } |
---|
634 | |
---|
635 | // TITRE |
---|
636 | $out .= "<div class='titre-titre'>"._T('agenda:evenement_titre')."</div>\n"; |
---|
637 | $out .= "<div class='titre-visu'>"; |
---|
638 | $out .= "<input type='text' name='evenement_titre' value=\"$ftitre\" style='width:100%;' />"; |
---|
639 | $out .= "</div>\n"; |
---|
640 | |
---|
641 | // LIEU |
---|
642 | $out .= "<div class='lieu-titre'>"._T('agenda:evenement_lieu')."</div>"; |
---|
643 | $out .= "<div class='lieu-visu'>"; |
---|
644 | $out .= "<input type='text' name='evenement_lieu' value=\"$flieu\" style='width:100%;' />"; |
---|
645 | $out .= "</div>\n"; |
---|
646 | |
---|
647 | // Horaire |
---|
648 | $out .= "<div class='horaire-titre'>"; |
---|
649 | $out .= "<input type='checkbox' name='evenement_horaire' value='oui' "; |
---|
650 | $out .= ($fhoraire=='oui'?"checked='checked' ":""); |
---|
651 | $out .= " onClick=\"var element = findObj('evenement_horaire');var choix = element.checked; |
---|
652 | if (choix==true){ setvisibility('afficher_horaire_debut_evenement', 'visible');setvisibility('afficher_horaire_fin_evenement', 'visible');} |
---|
653 | else{setvisibility('afficher_horaire_debut_evenement', 'hidden');setvisibility('afficher_horaire_fin_evenement', 'hidden');}\""; |
---|
654 | $out .= "/>"; |
---|
655 | $out .= _T('agenda:evenement_horaire')."</div>"; |
---|
656 | |
---|
657 | // DATES |
---|
658 | $out .= "<div class='date-titre'>"._T('agenda:evenement_date')."</div>"; |
---|
659 | $out .= "<div class='date-visu'>"; |
---|
660 | $out .= _T('agenda:evenement_date_de'); |
---|
661 | $out .= WCalendar_controller($d=date('Y-m-d H:i:s',$fstdatedeb),"_evenement_debut"); |
---|
662 | $out .= "<span class='agenda_".($fhoraire=='oui'?"":"in")."visible_au_chargement' id='afficher_horaire_debut_evenement'>"; |
---|
663 | $out .= _T('agenda:evenement_date_a_immediat'); |
---|
664 | $out .= Agenda_heure_selector($d,"_debut"); |
---|
665 | $out .= "</span>"; |
---|
666 | $out .= "<br/>"; |
---|
667 | $out .= _T('agenda:evenement_date_au'); |
---|
668 | $out .= WCalendar_controller($d=date('Y-m-d H:i:s',$fstdatefin),"_evenement_fin"); |
---|
669 | $out .= "<span class='agenda_".($fhoraire=='oui'?"":"in")."visible_au_chargement' id='afficher_horaire_fin_evenement'>"; |
---|
670 | $out .= _T('agenda:evenement_date_a_immediat'); |
---|
671 | $out .= Agenda_heure_selector($d,"_fin"); |
---|
672 | $out .= "</span>"; |
---|
673 | $out .= "</div>\n"; |
---|
674 | |
---|
675 | // DESCRIPTIF |
---|
676 | $out .= "<div class='descriptif-titre'>"._T('agenda:evenement_descriptif')."</div>"; |
---|
677 | $out .= "<div class='descriptif-visu'>"; |
---|
678 | $out .= "<textarea name='evenement_descriptif' style='width:100%;' rows='3'>"; |
---|
679 | $out .= $fdescriptif; |
---|
680 | $out .= "</textarea>\n"; |
---|
681 | $out .= "</div>\n"; |
---|
682 | |
---|
683 | // MOTS CLES : chaque groupe de mot cle attribuable a un evenement agenda |
---|
684 | // donne un select |
---|
685 | $out .= "<div class='agenda_mots_cles'>"; |
---|
686 | $res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui' ORDER BY titre"); |
---|
687 | while ($row = spip_fetch_array($res,SPIP_ASSOC)){ |
---|
688 | $id_groupe = $row['id_groupe']; |
---|
689 | $multiple = ($row['unseul']=='oui')?"size='4'":"multiple='multiple' size='4'"; |
---|
690 | |
---|
691 | $id_mot_select = array(); |
---|
692 | if ($id_evenement){ |
---|
693 | $res2 = spip_query("SELECT mots_evenements.id_mot FROM spip_mots_evenements AS mots_evenements |
---|
694 | LEFT JOIN spip_mots AS mots ON mots.id_mot=mots_evenements.id_mot |
---|
695 | WHERE mots.id_groupe=".spip_abstract_quote($id_groupe)." AND mots_evenements.id_evenement=".spip_abstract_quote($id_evenement)); |
---|
696 | while ($row2 = spip_fetch_array($res2)) |
---|
697 | $id_mot_select[] = $row2['id_mot']; |
---|
698 | } |
---|
699 | |
---|
700 | $nb_mots = 0; |
---|
701 | $select = ""; |
---|
702 | $select .= "<select name='evenement_groupe_mot_select_{$id_groupe}[]' class='fondl verdana1 agenda_mot_cle_select' $multiple>\n"; |
---|
703 | $select .= "\n<option value='x' style='font-variant: small-caps;' >".supprimer_numero($row['titre'])."</option>"; |
---|
704 | |
---|
705 | $res2= spip_query("SELECT * FROM spip_mots WHERE id_groupe=".spip_abstract_quote($id_groupe)." ORDER BY titre"); |
---|
706 | while ($row2 = spip_fetch_array($res2,SPIP_ASSOC)){ |
---|
707 | $id_mot = $row2['id_mot']; |
---|
708 | $titre = $row2['titre']; |
---|
709 | $select .= my_sel($id_mot, " $titre", in_array($id_mot,$id_mot_select)?$id_mot:0); |
---|
710 | $nb_mots++; |
---|
711 | } |
---|
712 | $select .= "</select>\n"; |
---|
713 | if ($nb_mots) |
---|
714 | $out .= $select; |
---|
715 | } |
---|
716 | $out .= "</div>"; |
---|
717 | |
---|
718 | $dates = ""; |
---|
719 | if ($id_evenement!=NULL){ |
---|
720 | $dates = array(); |
---|
721 | $res = spip_query("SELECT date_debut FROM spip_evenements WHERE id_evenement_source=".spip_abstract_quote($id_evenement)); |
---|
722 | while ($row=spip_fetch_array($res)){ |
---|
723 | $dates[] = date('m/d/Y',strtotime($row['date_debut'])); |
---|
724 | } |
---|
725 | $dates = implode(",",$dates); |
---|
726 | } |
---|
727 | $out .= "<div class='repetitions-calendrier'>"; |
---|
728 | $out .= WCalendar_statique_point_entree('_repetitions',$dates); |
---|
729 | $out .= "</div>"; |
---|
730 | |
---|
731 | $out .= "<div class='edition-bouton'>"; |
---|
732 | #echo "<input type='submit' name='submit' value='Annuler' />"; |
---|
733 | if ($neweven==1){ |
---|
734 | $out .= "<div style='text-align:$spip_lang_right'><input type='submit' name='ajouter' value='"._T('bouton_ajouter')."' class='fondo' onclick='javascript:getSelectedDate_repetitions()'></div>"; |
---|
735 | } |
---|
736 | else{ |
---|
737 | $out .= "<div style='text-align:$spip_lang_right'><input type='submit' name='ajouter' value='"._T('bouton_enregistrer')."' class='fondo' onclick='javascript:getSelectedDate_repetitions()'></div>"; |
---|
738 | } |
---|
739 | $out .= "</div>\n"; |
---|
740 | |
---|
741 | // feature desactivee pour le moment |
---|
742 | // $out .= "<script type='text/javascript' src='"._DIR_PLUGIN_AGENDA."/img_pack/multiselect.js'></script>"; |
---|
743 | |
---|
744 | $out .= "</div>"; |
---|
745 | |
---|
746 | $out .= "</form>"; |
---|
747 | $out .= "</div>\n"; |
---|
748 | return $out; |
---|
749 | } |
---|
750 | |
---|
751 | |
---|
752 | ?> |
---|