[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / fullcalendar / exec / fullcalendar_edit.php
1 <?php
2
3 /* * * * * * * * * * * * * * * * * * * *
4 *
5 * - FullCalendar pour SPIP -
6 *
7 * Formulaires d'ajout et modification des évènements
8 *
9 * Auteur : Grégory PASCAL - ngombe at gmail dot com
10 * Modifs : 10/10/2011
11 *
12 */
13
14 function exec_fullcalendar_edit(){
15 include_spip("inc/presentation");
16 // vérifier les droits
17 global $connect_statut;
18 global $connect_toutes_rubriques;
19 if ($connect_statut != '0minirezo' OR !$connect_toutes_rubriques) {
20 print _T('avis_non_acces_page');
21 exit;
22 }
23
24 # Récupère l'id du calendrier à éditer
25
26 $id_fullcalendar=($_GET['id'])?intval($_GET['id']):intval($_GET['id_calendrier']);
27 if(!$id_fullcalendar) die("Erreur dans l'appel de cette page!");
28
29 $HTML=$INFO=$INTERFACE=$LISTE=$LISTE_CALENDRIER='';
30
31 # Récupère les autres calendriers
32
33 $res = sql_select('*', 'spip_fullcalendar_main','id_fullcalendar!='.$id_fullcalendar);
34 if(sql_count($res)){
35 $LISTE="<br/>";
36 while ($row = sql_fetch($res)) {
37 $LISTE .= "<center class='formulaire_spip'><a href=\"?exec=fullcalendar_edit&id=".$row['id_fullcalendar']."\">".$row['nom']."</a></center><br/>";
38 if($row['type']=='mysql')
39 $LISTE_CALENDRIER.="<option value=\"".$row['id_fullcalendar']."\">".$row['nom']."</option>";
40 }
41 }
42 sql_free($res);
43
44 ######################
45 # Ajout d'un mot clé #
46 ######################
47
48 if(
49 $_POST['action_to_take']=='add_mot'
50 && $_POST['ajouter']
51 && $_POST['id_calendrier']
52 && strlen($_POST['id_mot'])
53 ){
54 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/ok.png'> &nbsp; "._T('fullcalendar:action_mot_add').".</center><br/>";
55 sql_insert('spip_fullcalendar_events', '(id_fullcalendar, lien)', "(".sql_quote(intval($_POST['id_calendrier'])).", ".sql_quote(intval($_POST['id_mot'])).")");
56 }
57
58 #######################
59 # Modifier le mot clé #
60 #######################
61
62 if(
63 $_POST['action_to_take']=='update_mot'
64 && $_POST['ajouter']
65 && $_POST['id_calendrier']
66 && strlen($_POST['id_mot'])
67 ){
68 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/ok.png'> &nbsp; "._T('fullcalendar:action_mot_edit').".</center><br/>";
69 sql_update('spip_fullcalendar_events', array('lien' => sql_quote(intval($_POST['id_mot'])) ), "id_fullcalendar=".sql_quote(intval($_POST['id_calendrier'])) );
70 }
71
72 ########################
73 # Ajout d'une rubrique #
74 ########################
75
76 if(
77 $_POST['action_to_take']=='add_rubrique'
78 && $_POST['ajouter']
79 && $_POST['id_calendrier']
80 && strlen($_POST['id_rubrique'])
81 ){
82 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/ok.png'> &nbsp; "._T('fullcalendar:action_rub_add').".</center><br/>";
83 sql_insert('spip_fullcalendar_events', '(id_fullcalendar, lien)', "(".sql_quote(intval($_POST['id_calendrier'])).", ".sql_quote(intval($_POST['id_rubrique'])).")");
84 }
85
86 ########################
87 # Modifier la rubrique #
88 ########################
89
90 if(
91 $_POST['action_to_take']=='update_rubrique'
92 && $_POST['ajouter']
93 && $_POST['id_calendrier']
94 && strlen($_POST['id_rubrique'])
95 ){
96 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/ok.png'> &nbsp; "._T('fullcalendar:action_rub_edit').".</center><br/>";
97 sql_update('spip_fullcalendar_events', array('lien' => sql_quote(intval($_POST['id_rubrique'])) ), "id_fullcalendar=".sql_quote(intval($_POST['id_calendrier'])) );
98 }
99
100 ##########################
101 # Ajout d'une clé Google #
102 ##########################
103
104 if(
105 $_POST['action_to_take']=='add'
106 && $_POST['ajouter']
107 && $_POST['id_calendrier']
108 && strlen($_POST['gcalID'])
109 ){
110 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/ok.png'> &nbsp; "._T('fullcalendar:action_key_add').".</center><br/>";
111 sql_insert('spip_fullcalendar_events', '(id_fullcalendar, lien)', "(".sql_quote(intval($_POST['id_calendrier'])).", ".sql_quote($_POST['gcalID']).")");
112 }
113
114 ##########################
115 # Modifier la clé Google #
116 ##########################
117
118 if(
119 $_POST['action_to_take']=='update'
120 && $_POST['ajouter']
121 && $_POST['id_calendrier']
122 && strlen($_POST['gcalID'])
123 ){
124 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/ok.png'> &nbsp; "._T('fullcalendar:action_key_edit').".</center><br/>";
125 sql_update('spip_fullcalendar_events', array('lien' => sql_quote(trim($_POST['gcalID'])) ), "id_fullcalendar=".sql_quote(intval($_POST['id_calendrier'])) );
126 }
127
128 ##############################
129 # Ajout d'un évènement MySQL #
130 ##############################
131
132 if(
133 $_POST['action_to_take']=='AddEvent'
134 && strlen($_POST['Nom_Evenement'])
135 && $_POST['id_calendrier']
136 ){
137
138 $t = explode('/',$_POST['Date']);
139 $date = $t['2'].'-'.$t['1'].'-'.$t['0'];
140 $t = explode('/',$_POST['Date_Fin']);
141 $date_fin = $t['2'].'-'.$t['1'].'-'.$t['0'];
142 unset($t);
143
144 sql_insert("spip_fullcalendar_events",
145 "(id_fullcalendar, id_style, titre, lien, start, end)",
146 "(
147 ".sql_quote(intval($_POST['id_calendrier'])).",
148 ".sql_quote(intval($_POST['id_style'])).",
149 ".sql_quote($_POST['Nom_Evenement']).",
150 ".sql_quote($_POST['Lien_Evenement']).",
151 ".sql_quote($date." ".$_POST['HeureDebut'].":00").",
152 ".sql_quote($date_fin." ".$_POST['HeureFin'].":00")."
153 )");
154
155 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/ok.png'> &nbsp; "._T('fullcalendar:event_add').".</center><br/>";
156
157 }
158
159 ###############################
160 # Modification d'un évènement #
161 ###############################
162
163 if(
164 $_POST['action_to_take']=='EditEvent'
165 && strlen($_POST['Nom_Evenement'])
166 && strlen($_POST['id_evenement'])
167 && $_POST['id_calendrier']
168 ){
169
170 $t = explode('/',$_POST['Date']);
171 $date = $t[2].'-'.$t[1].'-'.$t[0];
172 $t = explode('/',$_POST['Date_Fin']);
173 $date_fin = $t[2].'-'.$t[1].'-'.$t[0];
174 unset($t);
175
176 sql_update('spip_fullcalendar_events',
177 array(
178 'id_fullcalendar' => sql_quote($_POST['id_calendrier']),
179 'id_style' => sql_quote($_POST['id_style']),
180 'titre' => sql_quote($_POST['Nom_Evenement']),
181 'lien' => sql_quote(trim($_POST['Lien_Evenement'])),
182 'start' => sql_quote($date." ".$_POST['HeureDebut'].":00"),
183 'end' => sql_quote($date_fin." ".$_POST['HeureFin'].":00")
184 ),
185 "id_event=".sql_quote(intval($_POST['id_evenement']))
186 );
187
188 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/ok.png'> &nbsp; "._T('fullcalendar:event_edit').".</center><br/>";
189
190 }
191
192 #######################
193 # Efface un évènement #
194 #######################
195
196 if(
197 $_POST['action_to_take']=='del'
198 && $_POST['id_calendrier']
199 && $_POST['id_evenement']
200 ){
201 sql_delete("spip_fullcalendar_events", "id_event=".sql_quote(intval($_POST['id_evenement'])) );
202 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/ok.png'> &nbsp; "._T('fullcalendar:event_del')."</center><br/>";
203 }
204
205 #################################
206 # Calendrier en cours d'édition #
207 #################################
208
209 $req = sql_select('*', 'spip_fullcalendar_main', 'id_fullcalendar='.$id_fullcalendar);
210 $num_calendar = sql_count($req);
211 if(!$num_calendar) $INFO="<center style=\"color:red\">"._T('fullcalendar:unknown_error')."</center><br/>";
212 else {
213
214 $row = sql_fetch($req);
215 $id = $row['id_fullcalendar'];
216 $type = $row['type'];
217 $nom = $row['nom'];
218 sql_free($req);
219
220 # Récupère les styles pour les évènements
221
222 $req = sql_select('*', 'spip_fullcalendar_styles');
223 $num_style = sql_count($req);
224 if(!$num_style) $STYLES=_T('fullcalendar:no_style');
225 else {
226 $STYLES="<p>"._T('fullcalendar:event_style').":<select name='id_style' id='id_style'>";
227 while ($rw = sql_fetch($req)) {
228 $STYLES.="<option value=\"".$rw['id_style']."\">".$rw['titre']."</option>";
229 }
230 sql_free($req);
231 $STYLES.="</select></p>";
232 }
233
234 $LISTE_CALENDRIER.='<option SELECTED value="'.$id_fullcalendar.'">'.$nom.'</option>';
235
236 if($type=='mysql'){
237
238 # Modification d'un évènement
239
240 if(
241 $_POST['action_to_take']=='edit'
242 && $_POST['id_evenement']
243 ){
244
245 $req = sql_select('*', 'spip_fullcalendar_events', array('id_fullcalendar='.$id_fullcalendar, 'id_event='.intval($_POST['id_evenement'])) );
246 $rw = sql_fetch($req);
247 sql_free($req);
248
249 $NOM=$rw['titre'];
250 $LIEN=$rw['lien'];
251
252 $ACTION='EditEvent';
253 $ID_EVENEMENT=$_POST['id_evenement'];
254 $DATE = DateFromMysql(substr($rw['start'],0,10));
255 $DATE_FIN = DateFromMysql(substr($rw['end'],0,10));
256 $START = substr($rw['start'],11,5);
257 $END = substr($rw['end'],11,5);
258 $BUTTON = "<input type=\"submit\" name=\"enregistrer\" value=\" "._T('bouton_enregistrer')." \" class=\"fondo\" />";
259
260 } else {
261
262 $ACTION='AddEvent';
263 $ID_EVENEMENT='';
264 $DATE=(strlen($_POST['Date'])==10)?stripslashes($_POST['Date']):Date("d/m/Y");
265 $DATE_FIN=(strlen($_POST['Date_Fin'])==10)?stripslashes($_POST['Date_Fin']):Date("d/m/Y");
266 $START=(strlen($_POST['HeureDebut'])==5)?stripslashes($_POST['HeureDebut']):Date("H:m");
267 $END=(strlen($_POST['HeureFin'])==5)?stripslashes($_POST['HeureFin']):Date("H:m");
268 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('fullcalendar:add')." \" class=\"fondo\" />";
269
270 }
271
272 # Récupère les style css
273 $HTML.="<style type='text/css'>";
274 $result = sql_select('*', 'spip_fullcalendar_styles');
275 while ( $row = sql_fetch($result)){
276 $HTML.=".f_".$row['id_style'].", .f_".$row['id_style']." a {background-color:".$row['bgcolor'].";border-color:".$row['bordercolor'].";color:".$row['textcolor'].";}\n";
277 $style[$row['id_style']]['back'] = $row['bgcolor'];
278 $style[$row['id_style']]['text'] = $row['textcolor'];
279 $style[$row['id_style']]['bord'] = $row['bordercolor'];
280 }
281 sql_free($result);
282 $HTML.="</style>";
283
284 # Récupère les évènements du calendrier MySQL
285
286 $events='';
287 $req = sql_select('*', 'spip_fullcalendar_events', 'id_fullcalendar='.$id_fullcalendar, '', 'start ASC');
288 $num_events = sql_count($req);
289 if(!$num_events) $INFO.=_T('fullcalendar:no_event');
290 else {
291
292 $HTML.="
293
294 <script type=\"text/javascript\">
295 //<!--
296 function EffacerEvenement(id){
297 if(!document.getElementById) return false;
298 if(confirm('"._T('fullcalendar:delete_event')."')){
299 document.Formulaire.id_evenement.value=id;
300 document.Formulaire.action_to_take.value='del';
301 document.Formulaire.submit();
302 return true;
303 }
304 }
305
306 function ModifierEvenement(id){
307 if(!document.getElementById) return false;
308 document.Formulaire.id_evenement.value=id;
309 document.Formulaire.action_to_take.value='edit';
310 document.Formulaire.submit();
311 return true;
312 }
313 //-->
314 </script>
315
316 <table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\">
317 <tbody>";
318
319 $entete="<tr>
320 <th>"._T('fullcalendar:event_title')."</th>
321 <th>"._T('fullcalendar:event_start')."</th>
322 <th>"._T('fullcalendar:event_end')."</th>
323 <th>&nbsp;</th>
324 </tr>";
325
326 while ($row = sql_fetch($req)) {
327
328 $date = substr($row['start'],0,10);
329 $date_fin = substr($row['end'],0,10);
330 $start = substr($row['start'],11,5);
331 $end = substr($row['end'],11,5);
332 $class=$url=$lien_start=$lien_end='';
333
334 $fc_date = explode('-',substr($row['start'],0,10));
335 $fc_date_fin = explode('-',substr($row['end'],0,10));
336 $fc_start = explode(':',substr($row['start'],11,5));
337 $fc_end = explode(':',substr($row['end'],11,5));
338
339 if($row['id_style']>0){
340 $class=",backgroundColor: '".$style[$row['id_style']]['back']."', textColor: '".$style[$row['id_style']]['text']."', borderColor: '".$style[$row['id_style']]['bord']."'";
341 } else $class='';
342
343 if(strlen(trim($row['lien']))){
344 $lien_start="<a href=\"".$row['lien']."\">";
345 $lien_end="</a>";
346 }
347
348 $bloc='';
349 $t=substr($date,5,2);
350 if($bloc_mois!=$t){
351 $bloc_mois=$t;
352 $annee=substr($date,0,4);
353 $bloc.="<tr class='spip_large'><th colspan=4 style=\"border-bottom:1px solid #000;padding-top:4px;\">
354 ".MyMonth($t)." ".$annee."
355 </th></tr>".$entete;
356 }
357
358 $url="url:\"javascript:ModifierEvenement('".$row['id_event']."')\",";
359
360 $events.="{title: '".texte_script($row['titre'])."',start: new Date(".$fc_date[0].", ".($fc_date[1]-1).", ".$fc_date[2].", ".$fc_start[0].", ".$fc_start[1]."),end: new Date(".$fc_date_fin[0].", ".($fc_date_fin[1]-1).", ".$fc_date_fin[2].", ".$fc_end[0].", ".$fc_end[1]."),".$url." allDay: false ".$class."},";
361
362 $HTML.= "$bloc<tr class=\"tr_liste f_".$row['id_style']."\">
363 <td class=\"verdana12\">".$lien_start."".$row['titre']."".$lien_end."</td>
364 <td class=\"arial1\">".MyDateEnLettre ($date)."<br/>".$start."</td>
365 <td class=\"arial1\">".MyDateEnLettre ($date_fin)."<br/>".$end."</td>
366 <td>
367 <a href=\"javascript:ModifierEvenement('".$row['id_event']."')\"><img src=\""._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/event_edit.png\"></a> &nbsp;
368 <a href=\"javascript:EffacerEvenement('".$row['id_event']."')\"><img src=\""._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/event_remove.png\"></a>
369 </td>
370 </tr>
371 ";
372
373 }
374 sql_free($req);
375 $HTML.="</table>";
376
377 $events=substr($events,0,strlen($events)-1);
378
379 }
380
381
382 $INTERFACE="
383 <script type='text/javascript'>
384 $(document).ready(function() {
385
386 $('#HeureFin').timepicker();
387
388 $('#HeureDebut').timepicker();
389
390 $.datepicker.regional['fr'] = {
391 closeText: 'Fermer',
392 prevText: '&#x3c;Préc',
393 nextText: 'Suiv&#x3e;',
394 currentText: 'Courant',
395 monthNames: ['Janvier','F&eacute;vrier','Mars','Avril','Mai','Juin',
396 'Juillet','Ao&ucirc;t','Septembre','Octobre','Novembre','D&eacute;cembre'],
397 monthNamesShort: ['Jan','F&eacute;v','Mar','Avr','Mai','Jun',
398 'Jul','Ao&ucirc;','Sep','Oct','Nov','Déc'],
399 dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
400 dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
401 dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
402 weekHeader: 'Sm',
403 dateFormat: 'dd/mm/yy',
404 firstDay: 1,
405 isRTL: false,
406 showMonthAfterYear: false,
407 yearSuffix: ''
408 };
409
410 $.datepicker.setDefaults($.datepicker.regional['fr']);
411
412 $('#Date').datepicker($.extend({},
413 $.datepicker.regional['fr'], {
414 onSelect: function(date) {
415 var day =$('#Date').datepicker('getDate');
416 $('#Date_Fin').datepicker('option','minDate',day);
417 $('#Date_Fin').datepicker('setDate',day);
418 },
419 showStatus: true,
420 showWeeks: true,
421 highlightWeek: true,
422 showOn: 'both',
423 numberOfMonths: 1,
424 firstDay: 1,
425 buttonImage:'"._DIR_PLUGIN_FULLCALENDAR."css/calendar.png',
426 buttonImageOnly: true,
427 showAnim: 'scale',
428 showOptions: {
429 origin: ['top', 'left']
430 }
431 }));
432
433 $('#Date_Fin').datepicker($.extend({},
434 $.datepicker.regional['fr'], {
435 showStatus: true,
436 showWeeks: true,
437 highlightWeek: true,
438 showOn: 'both',
439 numberOfMonths: 1,
440 firstDay: 1,
441 buttonImage:'"._DIR_PLUGIN_FULLCALENDAR."css/calendar.png',
442 buttonImageOnly: true,
443 showAnim: 'scale',
444 showOptions: {
445 origin: ['top', 'left']
446 }
447 }));
448
449 var day =$('#Date').datepicker('getDate');
450 $('#Date_Fin').datepicker('option','minDate',day);
451
452 $('#calendar_aff').fullCalendar({
453 theme: 0,
454 firstDay: 1,
455 defaultView: 'month',
456 aspectRatio: 1.80,
457 header: { left: 'prev,next', center: 'title', right: 'today, month, agendaWeek, agendaDay' },
458 editable: false,
459 events: [
460 ".$events."
461 ],
462 weekends: true,
463 titleFormat: {
464 month: 'MMMM yyyy',
465 week: \"d [MMMM] [ yyyy]{ - d MMMM yyyy}\",
466 day: 'dddd d MMMM yyyy'
467 },
468 columnFormat: {
469 month: 'dddd',
470 week: 'dddd d',
471 day: 'dddd d MMMM'
472 },
473 timeFormat: {
474 month: \"\",
475 agendaDay: \"H:mm{ - H:mm}\",
476 agendaWeek: \"H(:mm){ - H:mm}\",
477 basicWeek: \"H(:mm){ - H:mm}\",
478 basicDay: \"H:mm{ - H:mm}\",
479 '': 'H(:mm)'
480 }
481 });
482
483 ";
484
485 if($rw['id_style']) $INTERFACE .= "$(\"select#id_style option[value='".$rw['id_style']."']\").attr(\"selected\", \"selected\");";
486
487 $INTERFACE.="
488 });
489 </script>
490 <div id='calendar_aff'></div><br/>
491 <div class=\"formulaire_spip formulaire_config\">
492 <div class=\"cadre_padding\">
493 <form class=\"noajax\" action=\"\" name=\"Formulaire\" method=\"POST\">
494 <input type=\"hidden\" name=\"action_to_take\" value=\"".$ACTION."\">
495 <input type=\"hidden\" name=\"id_evenement\" value=\"".$ID_EVENEMENT."\">
496 <p>"._T('fullcalendar:calendar')." : <select name=\"id_calendrier\" style=\"width:84%\">".$LISTE_CALENDRIER."</select></p>
497 <p>"._T('fullcalendar:event_from')." : <input type='text' name='Date' id='Date' size='10' value=\"".$DATE."\">
498 <input type='text' name='HeureDebut' id='HeureDebut' size='5' value=\"".$START."\">
499 </p>
500 <p>"._T('fullcalendar:event_to')." : <input type='text' name='Date_Fin' id='Date_Fin' size='10' value=\"".$DATE_FIN."\">
501 <input type='text' name='HeureFin' id='HeureFin' size='5' value=\"".$END."\">
502 </p>
503 <p>"._T('fullcalendar:event_title')." : <input type='text' name='Nom_Evenement' class=\"forml\" style=\"width:98%\" value=\"".$NOM."\"></p>
504 ".$STYLES."
505 <p>"._T('fullcalendar:lien')." : <input type='text' name='Lien_Evenement' class=\"forml\" style=\"width:98%\" value=\"".$LIEN."\"></p>
506 </div>
507 <div class=\"boutons\">".$BUTTON."</div>
508 </form>
509 </div>";
510
511
512 } else if($type=='google') {
513
514 $INFO="<b>"._T('fullcalendar:google_agenda')."</b><br/><br/>"._T('fullcalendar:google_agenda_info')."<br/><br/>".$INFO;
515
516 # Récupère le lien Google dans les évènements
517
518 $req = sql_select('lien', 'spip_fullcalendar_events', 'id_fullcalendar='.$id);
519 if(sql_count($req)){ # Une clé est déjà renseignée
520 $rw = sql_fetch($req);
521 sql_free($req);
522 $gcalID=$rw['lien'];
523 $URL_AGENDA = "http://www.google.com/calendar/feeds/".$rw['lien']."/public/basic";
524 $ACTION='update';
525 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('fullcalendar:key_update')." \" class=\"fondo\" />";
526 } else { # on ajoute la clé
527 $ACTION='add';
528 $gcalID='';
529 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('fullcalendar:key_save')." \" class=\"fondo\" />";
530 }
531
532
533 $INTERFACE='
534 <div class="formulaire_spip formulaire_config">
535 <div class="cadre_padding">
536 <form action="" name="Formulaire" method="POST">
537 <input type="hidden" name="action_to_take" value="'.$ACTION.'">
538 <input type="hidden" name="id_calendrier" value="'.$id.'">
539 <p><label>'._T('fullcalendar:google_agenda_id').' : <input type="text" name="gcalID" style="width:75%" value="'.$gcalID.'" /></label></p>
540 </div>
541 <div class="boutons">'.$BUTTON.'</div>
542 </form>
543 </div>';
544
545 } else if($type=='rub') {
546
547 $INFO="<b>"._T('fullcalendar:rub_agenda')."</b><br/><br/>"._T('fullcalendar:rub_agenda_info')."<br/><br/>".$INFO;
548
549 # Récupère le secteur utilisé pour les évènements
550
551 $req = sql_select('lien', 'spip_fullcalendar_events', 'id_fullcalendar='.$id);
552 if(sql_count($req)){ # Une rubrique est déjà renseignée
553 $rw = sql_fetch($req);
554 $ID_MOT=intval($rw['lien']);
555 sql_free($req);
556 $ACTION='update_rubrique';
557 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('fullcalendar:rub_agenda_change')." \" class=\"fondo\" />";
558 } else { # on ajoute la clé
559 $ACTION='add_rubrique';
560 $ID_MOT='';
561 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('bouton_enregistrer')." \" class=\"fondo\" />";
562 }
563
564 # Rubriques du site (contenant des articles)
565
566 $LISTE_RUBRIQUES='';
567
568 $req = sql_select(
569 array(
570 "DISTINCT R.id_rubrique",
571 "R.titre" ),
572 array(
573 "spip_rubriques AS R",
574 "spip_articles AS A" ),
575 array(
576 "R.id_parent=0",
577 "R.id_rubrique=A.id_rubrique",
578 "R.id_parent=0" ),
579 "",
580 "R.titre ASC");
581
582 if(sql_count($req)){
583
584 while ($row = sql_fetch($req)) {
585 $LISTE_RUBRIQUES.="<option value=\"".$row['id_rubrique']."\"";
586 $LISTE_RUBRIQUES.=($row['id_rubrique']==$ID_MOT)?' SELECTED':'';
587 $LISTE_RUBRIQUES.=">".$row['titre']."</option>";
588 }
589 sql_free($req);
590
591 }
592
593 $INTERFACE="
594 <div class=\"formulaire_spip formulaire_config\">
595 <div class=\"cadre_padding\">
596 <form class=\"noajax\" action=\"\" name=\"Formulaire\" method=\"POST\">
597 <input type=\"hidden\" name=\"action_to_take\" value=\"".$ACTION."\">
598 <input type=\"hidden\" name=\"id_calendrier\" value=\"".$id."\">
599 <p>"._T('fullcalendar:rub_agenda_source')." : <select name=\"id_rubrique\">".$LISTE_RUBRIQUES."</select></p>
600 </div>
601 <div class=\"boutons\">".$BUTTON."</div>
602 </form>
603 </div>";
604
605 # dans le cas de sous-rubriques, récupère les ids des rubriques filles
606
607 $req = sql_select(
608 array(
609 "id_rubrique",
610 ),
611 array(
612 "spip_rubriques" ),
613 array(
614 "id_parent='".$ID_MOT."'"
615 ),
616 "",
617 "");
618
619 while ($row = sql_fetch($req)) {
620 $ID_RUBRIQUES.="'".$row['id_rubrique']."',";
621 }
622
623 $ID_RUBRIQUES.="'".$ID_MOT."'";
624
625 # Récupère les article liés à ce secteur/rubrique
626
627 $req = sql_select(
628 array(
629 "A.id_article",
630 "A.titre",
631 "A.date",
632 "A.date_redac" ),
633 array(
634 "spip_articles AS A",
635 "spip_rubriques AS R" ),
636 array(
637 "A.id_rubrique IN (".$ID_RUBRIQUES.")",
638 "A.id_rubrique=R.id_rubrique" ),
639 "",
640 "A.date ASC");
641
642 $num_events = sql_count($req);
643 if(!$num_events) $INFO.=_T('fullcalendar:no_event');
644 else {
645 $HTML="
646 <table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\">
647 <tbody>
648 <tr>
649 <th>"._T('fullcalendar:event_title')."</th>
650 <th>"._T('fullcalendar:event_start')."</th>
651 <th>"._T('fullcalendar:event_end')."</th>
652 </tr>";
653 while ($row = sql_fetch($req)) {
654 $date = substr($row['date'],0,10);
655 $date_fin = substr($row['date_redac'],0,10);
656 $start = substr($row['date'],11,5);
657 $end = substr($row['date_redac'],11,5);
658 $erreur = ($date_fin=="0000-00-00")?' ortho':'';
659 # repère un incohérence dans les dates
660 $test_debut = $row['date'];
661 $test_fin = $row['date_redac'];
662 $diff = strtotime($test_fin) - strtotime($test_debut); // Ecart en secondes
663 if($diff<0){
664 $erreur =' ortho';
665 $end.="<- <b>"._T('fullcalendar:event_error')."</b>";
666 }
667 $HTML.= "<tr class=\"tr_liste\">
668 <td class=\"verdana12\"><a href=\"?exec=articles&id_article=".$row['id_article']."\">".supprimer_numero($row['titre'])."</a></td>
669 <td class=\"arial1\">".MyDateEnLettre ($date)."<br/>".$start."</td>
670 <td class=\"arial1".$erreur."\">".MyDateEnLettre ($date_fin)."<br/>".$end."</td>
671 </tr>";
672 }
673 sql_free($req);
674 $HTML.="</table>";
675 }
676
677 } else if($type=='article') {
678
679 $INFO="<b>"._T('fullcalendar:mot_agenda')."</b><br/><br/>"._T('fullcalendar:mot_agenda_info')."<br/><br/>".$INFO;
680
681 # Récupère le mot clé dans les évènements
682
683 $req = sql_select('lien', 'spip_fullcalendar_events', 'id_fullcalendar='.$id);
684 if(sql_count($req)){ # Un mot clé est déjà renseigné
685 $rw = sql_fetch($req);
686 $ID_MOT=intval($rw['lien']);
687 sql_free($req);
688 $ACTION='update_mot';
689 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('fullcalendar:mot_agenda_change')." \" class=\"fondo\" />";
690 } else { # on ajoute la clé
691 $ACTION='add_mot';
692 $ID_MOT='';
693 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('bouton_enregistrer')." \" class=\"fondo\" />";
694 }
695
696 # Mots clés du site (des groupes liés aux articles)
697
698 $LISTE_MOTS='';
699
700 $req = sql_select(
701 array(
702 "M.id_mot",
703 "M.titre" ),
704 array(
705 "spip_mots AS M",
706 "spip_groupes_mots AS G" ),
707 array(
708 "M.id_groupe=G.id_groupe",
709 "G.tables_liees like '%articles%'" ),
710 "",
711 "M.titre ASC");
712
713 if(sql_count($req)){
714
715 while ($row = sql_fetch($req)) {
716 $LISTE_MOTS.="<option value=\"".$row['id_mot']."\"";
717 $LISTE_MOTS.=($row['id_mot']==$ID_MOT)?' SELECTED':'';
718 $LISTE_MOTS.=">".$row['titre']."</option>";
719 }
720 sql_free($req);
721
722 }
723
724 $INTERFACE="
725 <div class=\"formulaire_spip formulaire_config\">
726 <div class=\"cadre_padding\">
727 <form class=\"noajax\" action=\"\" name=\"Formulaire\" method=\"POST\">
728 <input type=\"hidden\" name=\"action_to_take\" value=\"".$ACTION."\">
729 <input type=\"hidden\" name=\"id_calendrier\" value=\"".$id."\">
730 <p>Mot clé utilisé pour générer les évènements de ce calendrier : <select name=\"id_mot\">".$LISTE_MOTS."</select></p>
731 </div>
732 <div class=\"boutons\">".$BUTTON."</div>
733 </form>
734 </div>";
735
736 # Récupère les article liés à ce mot clé
737
738 $req = sql_select(
739 array(
740 "A.id_article",
741 "A.titre",
742 "A.date",
743 "A.date_redac" ),
744 array(
745 "spip_articles AS A",
746 "spip_mots_articles AS M" ),
747 array(
748 "M.id_mot='".$ID_MOT."'",
749 "A.id_article=M.id_article" ),
750 "",
751 "A.date ASC");
752
753 $num_events = sql_count($req);
754 if(!$num_events) $INFO.=_T('fullcalendar:no_event');
755 else {
756 $HTML="
757 <table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\">
758 <tbody>
759 <tr>
760 <th>"._T('fullcalendar:event_title')."</th>
761 <th>"._T('fullcalendar:event_start')."</th>
762 <th>"._T('fullcalendar:event_end')."</th>
763 </tr>";
764
765 while ($row = sql_fetch($req)) {
766 $date = substr($row['date'],0,10);
767 $date_fin = substr($row['date_redac'],0,10);
768 $start = substr($row['date'],11,5);
769 $end = substr($row['date_redac'],11,5);
770 $erreur = ($date_fin=="0000-00-00")?' ortho':'';
771 # repère un incohérence dans les dates
772 $test_debut = $row['date'];
773 $test_fin = $row['date_redac'];
774 $diff = strtotime($test_fin) - strtotime($test_debut); // Ecart en secondes
775 if($diff<0){
776 $erreur =' ortho';
777 $end.="<- <b>"._T('fullcalendar:event_error')."</b>";
778 }
779 $HTML.= "<tr class=\"tr_liste\">
780 <td class=\"verdana12\"><a href=\"?exec=articles&id_article=".$row['id_article']."\">".supprimer_numero($row['titre'])."</a></td>
781 <td class=\"arial1\">".MyDateEnLettre ($date)."<br/>".$start."</td>
782 <td class=\"arial1".$erreur."\">".MyDateEnLettre ($date_fin)."<br/>".$end."</td>
783 </tr>";
784 }
785 sql_free($req);
786 $HTML.="</table>";
787 }
788
789 }
790
791 }
792
793 $commencer_page = charger_fonction('commencer_page', 'inc');
794 print $commencer_page(_T('fullcalendar:fullcalendar'), "", "") ;
795 print "<br/><br/>";
796 print gros_titre(_T('fullcalendar:fullcalendar')." : "._T('fullcalendar:gestion_evenements'),'',false);
797 print debut_gauche ("",true);
798
799 print debut_boite_info(true);
800 print "<center><b>"._T('fullcalendar:fullcalendar')."</b></center>";
801 print "<br/><center><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/fullcalendar.jpg'></center><br/>";
802 print $INFO;
803 print fin_boite_info(true);
804
805 print debut_cadre_enfonce('',true,'','','');
806 print "<table class=\"cellule-h-table\" style=\"vertical-align: middle;\" cellpadding=\"0\"><tbody><tr>
807 <td><a href=\"?exec=cfg&cfg=fullcalendar\" class=\"cellule-h\"><span class=\"cell-i\"><img src='../plugins/cfg/cfg-22.png' alt=\"CFG : "._T('fullcalendar:configuration')."\"></span></a></td>
808 <td class=\"cellule-h-lien\"><a href=\"?exec=cfg&cfg=fullcalendar\" class=\"cellule-h\">CFG - "._T('fullcalendar:configuration')."</a></td>
809 </tr></tbody></table>";
810 print fin_cadre_enfonce(true);
811
812 print debut_cadre_enfonce('',true,'','','');
813 print "<table class=\"cellule-h-table\" style=\"vertical-align: middle;\" cellpadding=\"0\"><tbody><tr>
814 <td><a href=\"?exec=fullcalendar_add\" class=\"cellule-h\"><span class=\"cell-i\"><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/calendar.png' alt=\""._T('fullcalendar:fullcalendar')." : "._T('fullcalendar:gestion')."\"></span></a></td>
815 <td class=\"cellule-h-lien\"><a href=\"?exec=fullcalendar_add\" class=\"cellule-h\">FullCalendar - "._T('fullcalendar:gestion')."</a></td>
816 </tr></tbody></table>";
817 print fin_cadre_enfonce(true);
818
819 print debut_cadre_enfonce('',true,'','','');
820 print "<table class=\"cellule-h-table\" style=\"vertical-align: middle;\" cellpadding=\"0\"><tbody><tr>
821 <td><a href=\"?exec=fullcalendar_css\" class=\"cellule-h\"><span class=\"cell-i\"><img src='"._DIR_PLUGIN_FULLCALENDAR."prive/themes/spip/images/edit_css.png' alt=\"CSS : "._T('fullcalendar:configuration')."\"></span></a></td>
822 <td class=\"cellule-h-lien\"><a href=\"?exec=fullcalendar_css\" class=\"cellule-h\">CSS - "._T('fullcalendar:configuration')."</a></td>
823 </tr></tbody></table>";
824 print fin_cadre_enfonce(true);
825
826 if(strlen($LISTE)){
827 print debut_cadre_enfonce('',true,'',_T('fullcalendar:vos_calendriers'),'');
828 print $LISTE;
829 print fin_cadre_enfonce(true);
830 }
831
832 print creer_colonne_droite('',true);
833 print debut_droite("", true);
834 print debut_cadre_trait_couleur("", true, "", $titre=$nom,"","");
835
836 # INTERFACE D'AJOUT
837
838 print $INTERFACE;
839
840 # GESTION DES EVENEMENTS
841
842 if(($type=='mysql'||$type=='article'||$type=='rub')
843 && strlen($HTML)
844 ){
845 print debut_cadre_relief("", false,"", $titre = _T('fullcalendar:tous_evenements'));
846 print $HTML;
847 print fin_cadre_relief(false);
848 }else if(strlen($URL_AGENDA)){
849 print debut_cadre_enfonce('',true,'',_T('fullcalendar:flux'),'');
850 print _T('fullcalendar:votre_lien')." : <a href='".$URL_AGENDA."'>".$URL_AGENDA."</a>";
851 print "<iframe src=\"".$URL_AGENDA."\" style=\"width:98%;height:250px\"></iframe>";
852 print fin_cadre_enfonce(true);
853
854 }
855
856 print fin_cadre_trait_couleur(true);
857
858 print fin_gauche();
859 print fin_page();
860
861 }
862
863 function MyMonth($v){
864 $mois = array("","Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet","Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre");
865 $v=intval($v);
866 return $mois[$v];
867 }
868
869 /* Formate un DATETIME mysql en locale fr */
870
871 function MyDateEnLettre ($MyDate,$digit=5){
872 $jour = array("","Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche");
873 $day_arr = array("","Mon","Tue","Wed","Thu","Fri","Sat","Sun");
874 $mois = array("","Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet","Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre");
875 $t=explode('-', $MyDate);
876 $Y=$t[0];
877 $M=(strlen($t[1])<2)?"0".$t[1]:$t[1];
878 $D=(strlen($t[2])<2)?"0".$t[2]:$t[2];
879 $day=date("D", mktime(0,0,0,$M,$D,$Y));
880 $date=$day.":".$D.":".$M.":".$Y;
881 $date_tmp = explode(':', $date);
882 $day = $date_tmp[0];
883 for ($d=1;$d<=7;$d++)
884 if(strstr($day,$day_arr[$d])) $n=$d;
885 if($digit>=1) $return = $jour[$n].' ';
886 if($digit>=2) $return .= $date_tmp[1]+0;
887 if($digit>=3) $return .= ($date_tmp[1]==1)?'er':'';
888 if($digit>=4) $return .= ' '.$mois[$date_tmp[2]+0];
889 if($digit>=5) $return .= ' '.$date_tmp[3];
890 return $return;
891 }
892
893 /* Formate une date mysql vers locale fr */
894
895 function DateFromMysql ($date){
896 $t=explode('-', $date);
897 return $t['2'].'/'.$t['1'].'/'.$t['0'];
898 }
899
900 ?>