3 /* * * * * * * * * * * * * * * * * * * *
5 * - FullCalendar pour SPIP -
7 * Formulaires d'ajout et modification des évènements
9 * Auteur : Grégory PASCAL - ngombe at gmail dot com
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');
24 # Récupère l'id du calendrier à éditer
26 $id_fullcalendar=($_GET['id'])?
intval($_GET['id']):intval($_GET['id_calendrier']);
27 if(!$id_fullcalendar) die("Erreur dans l'appel de cette page!");
29 $HTML=$INFO=$INTERFACE=$LISTE=$LISTE_CALENDRIER='';
31 # Récupère les autres calendriers
33 $res = sql_select('*', 'spip_fullcalendar_main','id_fullcalendar!='.$id_fullcalendar);
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>";
44 ######################
45 # Ajout d'un mot clé #
46 ######################
49 $_POST['action_to_take']=='add_mot'
51 && $_POST['id_calendrier']
52 && strlen($_POST['id_mot'])
54 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/ok.png'> "._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'])).")");
58 #######################
59 # Modifier le mot clé #
60 #######################
63 $_POST['action_to_take']=='update_mot'
65 && $_POST['id_calendrier']
66 && strlen($_POST['id_mot'])
68 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/ok.png'> "._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'])) );
72 ########################
73 # Ajout d'une rubrique #
74 ########################
77 $_POST['action_to_take']=='add_rubrique'
79 && $_POST['id_calendrier']
80 && strlen($_POST['id_rubrique'])
82 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/ok.png'> "._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'])).")");
86 ########################
87 # Modifier la rubrique #
88 ########################
91 $_POST['action_to_take']=='update_rubrique'
93 && $_POST['id_calendrier']
94 && strlen($_POST['id_rubrique'])
96 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/ok.png'> "._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'])) );
100 ##########################
101 # Ajout d'une clé Google #
102 ##########################
105 $_POST['action_to_take']=='add'
107 && $_POST['id_calendrier']
108 && strlen($_POST['gcalID'])
110 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/ok.png'> "._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']).")");
114 ##########################
115 # Modifier la clé Google #
116 ##########################
119 $_POST['action_to_take']=='update'
121 && $_POST['id_calendrier']
122 && strlen($_POST['gcalID'])
124 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/ok.png'> "._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'])) );
128 ##############################
129 # Ajout d'un évènement MySQL #
130 ##############################
133 $_POST['action_to_take']=='AddEvent'
134 && strlen($_POST['Nom_Evenement'])
135 && $_POST['id_calendrier']
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'];
144 sql_insert("spip_fullcalendar_events",
145 "(id_fullcalendar, id_style, titre, lien, start, end)",
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")."
155 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/ok.png'> "._T('fullcalendar:event_add').".</center><br/>";
159 ###############################
160 # Modification d'un évènement #
161 ###############################
164 $_POST['action_to_take']=='EditEvent'
165 && strlen($_POST['Nom_Evenement'])
166 && strlen($_POST['id_evenement'])
167 && $_POST['id_calendrier']
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];
176 sql_update('spip_fullcalendar_events',
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")
185 "id_event=".sql_quote(intval($_POST['id_evenement']))
188 $INFO="<center><img src='"._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/ok.png'> "._T('fullcalendar:event_edit').".</center><br/>";
192 #######################
193 # Efface un évènement #
194 #######################
197 $_POST['action_to_take']=='del'
198 && $_POST['id_calendrier']
199 && $_POST['id_evenement']
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'> "._T('fullcalendar:event_del')."</center><br/>";
205 #################################
206 # Calendrier en cours d'édition #
207 #################################
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/>";
214 $row = sql_fetch($req);
215 $id = $row['id_fullcalendar'];
216 $type = $row['type'];
220 # Récupère les styles pour les évènements
222 $req = sql_select('*', 'spip_fullcalendar_styles');
223 $num_style = sql_count($req);
224 if(!$num_style) $STYLES=_T('fullcalendar:no_style');
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>";
231 $STYLES.="</select></p>";
234 $LISTE_CALENDRIER.='<option SELECTED value="'.$id_fullcalendar.'">'.$nom.'</option>';
238 # Modification d'un évènement
241 $_POST['action_to_take']=='edit'
242 && $_POST['id_evenement']
245 $req = sql_select('*', 'spip_fullcalendar_events', array('id_fullcalendar='.$id_fullcalendar, 'id_event='.intval($_POST['id_evenement'])) );
246 $rw = sql_fetch($req);
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\" />";
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\" />";
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'];
284 # Récupère les évènements du calendrier MySQL
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');
294 <script type=\"text/javascript\">
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();
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();
316 <table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\">
320 <th>"._T('fullcalendar:event_title')."</th>
321 <th>"._T('fullcalendar:event_start')."</th>
322 <th>"._T('fullcalendar:event_end')."</th>
326 while ($row = sql_fetch($req)) {
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='';
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));
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']."'";
343 if(strlen(trim($row['lien']))){
344 $lien_start="<a href=\"".$row['lien']."\">";
349 $t=substr($date,5,2);
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."
358 $url="url:\"javascript:ModifierEvenement('".$row['id_event']."')\",";
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."},";
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>
367 <a href=\"javascript:ModifierEvenement('".$row['id_event']."')\"><img src=\""._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/event_edit.png\"></a>
368 <a href=\"javascript:EffacerEvenement('".$row['id_event']."')\"><img src=\""._DIR_PLUGIN_FULLCALENDAR
."prive/themes/spip/images/event_remove.png\"></a>
377 $events=substr($events,0,strlen($events)-1);
383 <script type='text/javascript'>
384 $(document).ready(function() {
386 $('#HeureFin').timepicker();
388 $('#HeureDebut').timepicker();
390 $.datepicker.regional['fr'] = {
392 prevText: '<Préc',
393 nextText: 'Suiv>',
394 currentText: 'Courant',
395 monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
396 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
397 monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
398 'Jul','Aoû','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'],
403 dateFormat: 'dd/mm/yy',
406 showMonthAfterYear: false,
410 $.datepicker.setDefaults($.datepicker.regional['fr']);
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);
425 buttonImage:'"._DIR_PLUGIN_FULLCALENDAR
."css/calendar.png',
426 buttonImageOnly: true,
429 origin: ['top', 'left']
433 $('#Date_Fin').datepicker($.extend({},
434 $.datepicker.regional['fr'], {
441 buttonImage:'"._DIR_PLUGIN_FULLCALENDAR
."css/calendar.png',
442 buttonImageOnly: true,
445 origin: ['top', 'left']
449 var day =$('#Date').datepicker('getDate');
450 $('#Date_Fin').datepicker('option','minDate',day);
452 $('#calendar_aff').fullCalendar({
455 defaultView: 'month',
457 header: { left: 'prev,next', center: 'title', right: 'today, month, agendaWeek, agendaDay' },
465 week: \"d [MMMM] [ yyyy]{ - d MMMM yyyy}\",
466 day: 'dddd d MMMM yyyy'
475 agendaDay: \"H:mm{ - H:mm}\",
476 agendaWeek: \"H(:mm){ - H:mm}\",
477 basicWeek: \"H(:mm){ - H:mm}\",
478 basicDay: \"H:mm{ - H:mm}\",
485 if($rw['id_style']) $INTERFACE .= "$(\"select#id_style option[value='".$rw['id_style']."']\").attr(\"selected\", \"selected\");";
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."\">
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."\">
503 <p>"._T('fullcalendar:event_title')." : <input type='text' name='Nom_Evenement' class=\"forml\" style=\"width:98%\" value=\"".$NOM."\"></p>
505 <p>"._T('fullcalendar:lien')." : <input type='text' name='Lien_Evenement' class=\"forml\" style=\"width:98%\" value=\"".$LIEN."\"></p>
507 <div class=\"boutons\">".$BUTTON."</div>
512 } else if($type=='google') {
514 $INFO="<b>"._T('fullcalendar:google_agenda')."</b><br/><br/>"._T('fullcalendar:google_agenda_info')."<br/><br/>".$INFO;
516 # Récupère le lien Google dans les évènements
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);
523 $URL_AGENDA = "http://www.google.com/calendar/feeds/".$rw['lien']."/public/basic";
525 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('fullcalendar:key_update')." \" class=\"fondo\" />";
526 } else { # on ajoute la clé
529 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('fullcalendar:key_save')." \" class=\"fondo\" />";
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>
541 <div class="boutons">'.$BUTTON.'</div>
545 } else if($type=='rub') {
547 $INFO="<b>"._T('fullcalendar:rub_agenda')."</b><br/><br/>"._T('fullcalendar:rub_agenda_info')."<br/><br/>".$INFO;
549 # Récupère le secteur utilisé pour les évènements
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']);
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';
561 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('bouton_enregistrer')." \" class=\"fondo\" />";
564 # Rubriques du site (contenant des articles)
570 "DISTINCT R.id_rubrique",
573 "spip_rubriques AS R",
574 "spip_articles AS A" ),
577 "R.id_rubrique=A.id_rubrique",
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>";
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>
601 <div class=\"boutons\">".$BUTTON."</div>
605 # dans le cas de sous-rubriques, récupère les ids des rubriques filles
614 "id_parent='".$ID_MOT."'"
619 while ($row = sql_fetch($req)) {
620 $ID_RUBRIQUES.="'".$row['id_rubrique']."',";
623 $ID_RUBRIQUES.="'".$ID_MOT."'";
625 # Récupère les article liés à ce secteur/rubrique
634 "spip_articles AS A",
635 "spip_rubriques AS R" ),
637 "A.id_rubrique IN (".$ID_RUBRIQUES.")",
638 "A.id_rubrique=R.id_rubrique" ),
642 $num_events = sql_count($req);
643 if(!$num_events) $INFO.=_T('fullcalendar:no_event');
646 <table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\">
649 <th>"._T('fullcalendar:event_title')."</th>
650 <th>"._T('fullcalendar:event_start')."</th>
651 <th>"._T('fullcalendar:event_end')."</th>
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
665 $end.="<- <b>"._T('fullcalendar:event_error')."</b>";
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>
677 } else if($type=='article') {
679 $INFO="<b>"._T('fullcalendar:mot_agenda')."</b><br/><br/>"._T('fullcalendar:mot_agenda_info')."<br/><br/>".$INFO;
681 # Récupère le mot clé dans les évènements
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']);
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é
693 $BUTTON = "<input type=\"submit\" name=\"ajouter\" value=\" "._T('bouton_enregistrer')." \" class=\"fondo\" />";
696 # Mots clés du site (des groupes liés aux articles)
706 "spip_groupes_mots AS G" ),
708 "M.id_groupe=G.id_groupe",
709 "G.tables_liees like '%articles%'" ),
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>";
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>
732 <div class=\"boutons\">".$BUTTON."</div>
736 # Récupère les article liés à ce mot clé
745 "spip_articles AS A",
746 "spip_mots_articles AS M" ),
748 "M.id_mot='".$ID_MOT."'",
749 "A.id_article=M.id_article" ),
753 $num_events = sql_count($req);
754 if(!$num_events) $INFO.=_T('fullcalendar:no_event');
757 <table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\">
760 <th>"._T('fullcalendar:event_title')."</th>
761 <th>"._T('fullcalendar:event_start')."</th>
762 <th>"._T('fullcalendar:event_end')."</th>
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
777 $end.="<- <b>"._T('fullcalendar:event_error')."</b>";
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>
793 $commencer_page = charger_fonction('commencer_page', 'inc');
794 print $commencer_page(_T('fullcalendar:fullcalendar'), "", "") ;
796 print gros_titre(_T('fullcalendar:fullcalendar')." : "._T('fullcalendar:gestion_evenements'),'',false);
797 print debut_gauche ("",true);
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/>";
803 print fin_boite_info(true);
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);
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);
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);
827 print debut_cadre_enfonce('',true,'',_T('fullcalendar:vos_calendriers'),'');
829 print fin_cadre_enfonce(true);
832 print creer_colonne_droite('',true);
833 print debut_droite("", true);
834 print debut_cadre_trait_couleur("", true, "", $titre=$nom,"","");
840 # GESTION DES EVENEMENTS
842 if(($type=='mysql'||
$type=='article'||
$type=='rub')
845 print debut_cadre_relief("", false,"", $titre = _T('fullcalendar:tous_evenements'));
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);
856 print fin_cadre_trait_couleur(true);
863 function MyMonth($v){
864 $mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
869 /* Formate un DATETIME mysql en locale fr */
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évrier","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
875 $t=explode('-', $MyDate);
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);
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];
893 /* Formate une date mysql vers locale fr */
895 function DateFromMysql ($date){
896 $t=explode('-', $date);
897 return $t['2'].'/'.$t['1'].'/'.$t['0'];