source: spip-zone/_plugins_branche_stable_/_spip_1_9_0_/agenda/exec/agenda_evenements.php @ 4533

Last change on this file since 4533 was 4533, checked in by cedric@…, 15 years ago

gestion des champs <multi> dans les evenements (M.Possoz)

File size: 16.5 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5include_spip('inc/texte');
6include_spip('inc/presentation');
7include_spip('inc/agenda_filtres');
8include_spip('inc/agenda_gestion');
9
10function date_debut_fin($annee,$mois,$jour,$type){
11        if ($type=='jour'){
12                $ts_start=strtotime("$annee-$mois-01 00:00:00");
13                $ts_start+=($jour-1)*24*60*60;
14                $ts_fin=$ts_start+24*60*60;
15        } else
16        if ($type=="semaine"){
17                $ts_start=strtotime("$annee-$mois-01 01:00:00");
18                $ts_start+=($jour-1)*24*60*60;
19                while (date('w',$ts_start)!=1) $ts_start-=24*60*60;
20                $ts_fin=$ts_start+7*24*60*60+60*60;
21                $ts_start-=2*60*60;
22        } else
23        if ($type=='mois'){
24                $ts_start=strtotime("$annee-$mois-01 00:00:00");
25                if ($mois<'12')
26                        $ts_fin=strtotime("$annee-".($mois+1)."-01 00:00:00");
27                else
28                        $ts_fin=strtotime(($annee+1)."-$mois-01 00:00:00");
29        }
30        return array($ts_start,$ts_fin);       
31}
32function ajoute_creneaux_horaires($urlbase,$ts_start,$ts_fin,$type,$partie_cal,$echelle){
33        if ($echelle<=120)
34                $freq_creneaux=30*60;
35        else
36                $freq_creneaux=60*60;
37
38        $today=date('Y-m-d');
39        // creneaux pour ajout uniquement si ajouter_id_article present
40        if (($type!='mois')&&($partie_cal!='sansheure'))
41        {
42                $heuremin='08';$heuremax='20';
43                if ($partie_cal=='matin'){
44                        $heuremin='04';$heuremax='15';
45                }
46                if ($partie_cal=='soir'){
47                        $heuremin='12';$heuremax='23';
48                }
49                for ($j=$ts_start;$j<=$ts_fin;$j+=$freq_creneaux){
50                        $heure=date('H',$j);
51                        if (($heure>=$heuremin)&&($heure<=$heuremax)){
52                                $url=parametre_url($urlbase,'ndate',urlencode(date('Y-m-d H:i',$j)));
53                                $creneau=date('Y-m-d H:i:s',$j);
54                                if (date('Y-m-d',$j)==$today)
55                                        Agenda_memo_full($creneau,$creneau,preg_replace(",\s+,","&nbsp;",date('H:i',$j)." "._T('agenda:ajouter_un_evenement')), " ", "", $url,'calendrier-creneau-today');
56                                else if (date('w',$j)==0)
57                                        Agenda_memo_full($creneau,$creneau,preg_replace(",\s+,","&nbsp;",date('H:i',$j)." "._T('agenda:ajouter_un_evenement')), " ", "",$url,'calendrier-creneau-sunday');
58                                else
59                                        Agenda_memo_full($creneau,$creneau,preg_replace(",\s+,","&nbsp;",date('H:i',$j)." "._T('agenda:ajouter_un_evenement')), " ", "",$url,'calendrier-creneau');
60                        }
61                }
62        }
63       
64}
65
66function affiche_evenements_agenda($flag_editable){
67        global $visu_evenements;
68        $type = _request('type');
69        $partie_cal = _request('partie_cal');
70        if (!$type) $type='semaine';
71        $id_evenement = intval(_request('id_evenement'));
72        $ajouter_id_article = intval(_request('ajouter_id_article'));
73        global $annee,$mois,$jour;
74        $annee = intval(_request('annee'));
75        $mois = intval(_request('mois'));
76        $jour = intval(_request('jour'));
77
78        if ($flag_editable)
79                Agenda_action_formulaire_article($ajouter_id_article);
80
81        $visu_evenements=array();
82
83        if ((!$annee)||(!$mois)||(!$jour)){
84                if (!$id_evenement){ // pas d'id_evenement--> date du jour
85                        $stamp=time();
86                }
87                else { // date de l'evenement
88                        $res = spip_query("SELECT date_debut FROM spip_evenements WHERE id_evenement=".spip_abstract_quote($id_evenement));
89                        if ($row = spip_fetch_array($res))
90                                $stamp=strtotime($row['date_debut']);
91                        else 
92                                $stamp=time();
93                }
94                $annee=date('Y',$stamp);
95                $mois=date('m',$stamp);
96                $jour=date('d',$stamp);
97        }
98
99
100        $urlbase=self();
101        $urlbase=parametre_url($urlbase,'edit','');
102        $urlbase=parametre_url($urlbase,'del','');
103        $urlbase=parametre_url($urlbase,'ndate','');
104        $urlbase=parametre_url($urlbase,'id_evenement','');
105        $urlbase=parametre_url($urlbase,'neweven','1');
106       
107        //$urlbase=str_replace("&amp;","&",$urlbase);
108
109        // creation des boites creneaux horaires pour ajout rapide
110        list($ts_start,$ts_fin) = date_debut_fin($annee,$mois,$jour,$type);
111        if ($flag_editable)
112                ajoute_creneaux_horaires($urlbase,$ts_start,$ts_fin,$type,$partie_cal,$echelle);
113
114
115        $categorie_concerne=array('plage'=>'calendrier-plage','evenement'=>'calendrier-evenement');
116        $categorie_info=array('plage'=>'calendrier-plage-info','evenement'=>'calendrier-evenement-info');
117
118        $datestart=date('Y-m-d H:i:s',$ts_start-24*60*60);
119        $datefin=date('Y-m-d H:i:s',$ts_fin+24*60*60);
120
121        // tous les evenements
122        $res = spip_query("SELECT *
123                                                        FROM spip_evenements AS evenements
124                                                 WHERE ((evenements.date_debut>='$datestart' AND evenements.date_debut<='$datefin')
125                                                                OR (evenements.date_fin>='$datestart' AND evenements.date_fin<='$datefin')
126                                                                OR (evenements.date_debut<'$datestart' AND evenements.date_fin>'$datefin'))
127                                                 ORDER BY evenements.date_debut;");
128        $urlbase=parametre_url($urlbase,'neweven','');
129        $urlbase=parametre_url($urlbase,'annee',$annee);
130        $urlbase=parametre_url($urlbase,'mois',$mois);
131        $urlbase=parametre_url($urlbase,'jour',$jour);
132        while ($row = spip_fetch_array($res)){
133                $is_evt=($row['horaire']!='oui')
134                                                ||($row['date_debut']<$datestart && $row['date_fin']>$datefin);
135                $concerne=(!$ajouter_id_article) || ($ajouter_id_article==$row['id_article']);
136
137                $url=parametre_url($urlbase,'id_evenement',$row['id_evenement']);
138                $url=parametre_url($url,'ajouter_id_article',$row['id_article']);
139               
140                $titre = typo($row['titre']);
141                $descriptif = typo($row['descriptif']);
142                $lieu = typo($row['lieu']);
143                $texte=wordwrap(entites_html($row['titre'],ENT_QUOTES),15,"<br />\n");
144                if (($type!='mois')&&(!$is_evt))
145                        $texte.="<hr />" . wordwrap(entites_html($row['descriptif'],ENT_QUOTES),15, "<br />\n");
146                if (strlen($texte)==0) $texte=_L("(sans objet)");
147
148                if ($concerne)  $categorie = $categorie_concerne;
149                else                                            $categorie = $categorie_info;
150                if ($is_evt)            $categorie = $categorie['evenement'];
151                else                                            $categorie = $categorie['plage'];
152                if ($id_evenement==$row['id_evenement'])
153                        $categorie.='-selection';
154
155                if (!$is_evt)
156                        Agenda_memo_full($row['date_debut'], $row['date_fin'], $titre, $descriptif, $lieu, $url, $categorie);
157                else{
158                        //if ($type!='mois')
159                        //      Agenda_memo_evt_full($row['date_debut'], $row['date_debut'], Agenda_rendu_boite($titre,$descriptif,$lieu), "", "", $url, $categorie);
160                        //else
161                                Agenda_memo_evt_full($row['date_debut'], $row['date_fin'], $titre, $descriptif, $lieu, $url, $categorie);
162                }
163                $visu_evenements[$row['id_evenement']]=1;
164        }
165
166        $s = "<span class='agenda-calendrier'>\n";
167        // attention : bug car $type est modifie apres cet appel !
168        $s .= Agenda_affiche_full(1,'', $type, 'calendrier-creneau','calendrier-creneau-today','calendrier-creneau-sunday','calendrier-plage','calendrier-evenement','calendrier-plage-info','calendrier-evenement-info','calendrier-plage-selection','calendrier-evenement-selection');
169        $s .= "</span>";
170
171        return $s;
172}
173
174
175function visu_evenement_agenda($id_evenement,$flag_editable){
176        $out = "";
177        $ndate = _request('ndate');
178        $del = _request('del');
179
180        if ($id_evenement!=NULL){
181                $res = spip_query("SELECT evenements.* FROM spip_evenements AS evenements WHERE evenements.id_evenement=".spip_abstract_quote($id_evenement));
182                if ($row = spip_fetch_array($res)){
183                        if (!isset($neweven)){
184                                $fid_evenement=$row['id_evenement'];
185                                $ftitre=attribut_html(typo($row['titre']));
186                                $flieu=attribut_html(typo($row['lieu']));
187
188                                $fhoraire=attribut_html($row['horaire']);
189                                $fdescriptif=attribut_html(typo($row['descriptif']));
190                                $fstdatedeb=strtotime($row['date_debut']);
191                                $fstdatefin=strtotime($row['date_fin']);
192                                $fid_evenement_source=$row['id_evenement_source'];
193                        }
194                }
195                $out .= "<div class='agenda-visu-evenement'>";
196                $res2 = spip_query("SELECT articles.* FROM spip_articles AS articles LEFT JOIN spip_evenements AS J ON J.id_article=articles.id_article WHERE J.id_evenement=".spip_abstract_quote($id_evenement));
197                if ($row2 = spip_fetch_array($res2)){
198                        $out .= "<div class='article-evenement'>";
199                        $out .= "<a href='".generer_url_ecrire('articles',"id_article=".$row2['id_article'])."'>";
200                        $out .= http_img_pack("article-24.gif", "", "width='24' height='24' border='0'");
201                        $out .= entites_html(typo($row2['titre']))."</a>";
202                        $out .= "</div>\n";
203                }
204               
205                $out .= "<div class='agenda-visu-evenement-bouton-fermer'>";
206                $url=self();
207                $url=parametre_url($url,'edit','');
208                $url=parametre_url($url,'neweven','');
209                $url=parametre_url($url,'del','');
210                $url=parametre_url($url,'id_evenement','');
211
212                $out .= "<a href='$url'><img src='"._DIR_PLUGIN_AGENDA_EVENEMENTS."/img_pack/croix.png' width='12' height='12' style='border:none;'></a>";
213                $out .= "</div>\n";
214
215                $fobjet = entites_html($fobjet,ENT_QUOTES);
216                $flieu = entites_html($flieu,ENT_QUOTES);
217                $fdescription = entites_html($fdescription,ENT_QUOTES);
218
219                $out .= "<div class='titre-titre'>Titre</div><div class='titre-visu'>$ftitre &nbsp;</div>\n";
220                $out .= "<div class='lieu-titre'>Lieu</div><div class='lieu-visu'>$flieu &nbsp;</div>\n";
221                $out .= "<div class='horaire-titre'>&nbsp;</div>";
222                $out .= "<div class='date-titre'>Date </div>";
223                $out .= "<div class='date-visu'>";
224                $out .= "Du ".affdate_jourcourt(date("Y-m-d H:i",$fstdatedeb));
225                if ($fhoraire=='oui')
226                        $out .= " &agrave; ".date("H:i",$fstdatedeb);
227                $out .= " <br/>\n";
228                $out .= "Au ".affdate_jourcourt(date("Y-m-d H:i",$fstdatefin));
229                if ($fhoraire=='oui')
230                        $out .= " &agrave; ".date("H:i",$fstdatefin);
231                $out .= " <br/>\n";
232                $out .= "</div>\n";
233                $out .= "<div class='descriptif-titre'>Description</div><div class='descriptif-visu'>$fdescriptif &nbsp;</div>\n";
234
235                $out .=  "<div class='agenda_mots_cles'>";
236                $res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui' ORDER BY titre");
237                $sep = "";
238                while ($row = spip_fetch_array($res,SPIP_ASSOC)){
239                        $id_groupe = $row['id_groupe'];
240                        $row2 = spip_fetch_array(
241                                                spip_query("SELECT mots.titre FROM spip_mots_evenements AS mots_evenements
242                                                                LEFT JOIN spip_mots AS mots ON mots.id_mot=mots_evenements.id_mot
243                                                                WHERE mots.id_groupe=".spip_abstract_quote($id_groupe).
244                                                                " AND mots_evenements.id_evenement=".spip_abstract_quote($id_evenement)));
245                        if ($row2){
246                                $out .= $sep . supprimer_numero($row['titre'])."&nbsp;:&nbsp;".supprimer_numero($row2['titre']);
247                                $sep = "\n, ";
248                        }
249                }
250                $out .= "</div>\n";
251               
252
253                $url = parametre_url(self(),'annee','');
254                $url = parametre_url($url,'mois','');
255                $url = parametre_url($url,'jour','');
256
257                $out .= "<div class='repetitions-calendrier'>";
258                $id_source = $fid_evenement_source?$fid_evenement_source:$id_evenement;
259                $res2 = spip_query("SELECT * FROM spip_evenements WHERE id_evenement=".spip_abstract_quote($id_source)." OR id_evenement_source=".spip_abstract_quote($id_source)." ORDER BY date_debut");
260                if (spip_num_rows($res2)>1){
261                        $out .= _T('agenda:evenement_autres_occurences');
262                        while($row2 = spip_fetch_array($res2)){
263                                if ($row2['id_evenement']!=$fid_evenement){
264                                        $url = parametre_url(self(),'id_evenement',$row2['id_evenement']);
265                                        $out .= " <a href='$url'>" . affdate_jourcourt($row2['date_debut']) ."</a>";
266                                }
267                        }
268                }
269                $out .= "</div>";
270       
271                if ($fid_evenement_source!=0){
272                        $res2 = spip_query("SELECT evenements.* FROM spip_evenements AS evenements WHERE evenements.id_evenement=".spip_abstract_quote($fid_evenement_source));
273                        if ($row2 = spip_fetch_array($res2)){
274                                $url = parametre_url($url,'id_evenement',$row2['id_evenement']);
275                          $out .= "<div class='edition-bouton'>";
276                          $out .= _T('agenda:repetition_de')." <a href='";
277                          $out .= $url;
278                          $out .= "'>".($row2['titre']?typo($row2['titre']):_T('agenda:sans_titre'))."</a>";
279                          $out .= "</div>";
280                        }
281                }
282                else if ($flag_editable){
283                        $url=self();
284                        $url=parametre_url($url,'edit','');
285                        $url=parametre_url($url,'neweven','');
286                        $url=parametre_url($url,'del','');
287                        $url=parametre_url($url,'id_evenement','');
288                        if ($del==1)    { //---------------Suppression RDV ------------------------------
289                          $out .= "<form name='edition_rdv' action='$url' method='post'>";
290                          //$out .= "<input type='hidden' name='redirect' value='$url' />\n";
291                          $out .= "<input type='hidden' name='id_evenement' value='$fid_evenement' />\n";
292                          $out .= "<input type='hidden' name='suppr' value='1' />\n";
293                          $out .= "<div class='edition-bouton'>";
294                          $out .= "<input type='submit' name='submit' value='Annuler' />";
295                          $out .= "<input type='submit' name='submit' value='Confirmer la suppression' />";
296                          $out .= "</div></form>";
297                }
298                else {
299                                $url=parametre_url($url,'id_evenement',$id_evenement);
300                          $out .= "<form name='edition_rdv' action='$url' method='post'>";
301                          //$out .= "<input type='hidden' name='redirect' value='$url' />\n";
302                          $out .= "<input type='hidden' name='id_evenement' value='$fid_evenement' />\n";
303                          $out .= "<input type='hidden' name='edit' value='1' />\n";
304                          $out .= "<div class='edition-bouton'>";
305                                $out .= "<div style='text-align:$spip_lang_right'><input type='submit' name='modifier' value='"._T('bouton_modifier')."' class='fondo'></div>";
306                          $out .= "</div></form>";
307                }
308                }
309                $out .= "</div>\n";
310        }
311        return $out;
312}
313
314function exec_agenda_evenements_dist(){
315        // s'assurer que les tables sont crees
316        Agenda_install();
317        include_spip('inc/calendar');
318        // Reserver les widgets agenda
319        WCalendar_ajoute_lies(_T('agenda:evenement_date_debut'),'_evenement_debut',_T('agenda:evenement_date_fin'),'_evenement_fin');
320        WCalendar_ajoute_statique(_T('agenda:evenement_repetitions'),'_repetitions');
321
322        $ajouter_id_article = intval(_request('ajouter_id_article'));
323        $flag_editable = article_editable($ajouter_id_article);
324
325        global $visu_evenements;
326        $type = _request('type');
327        if (!$type) $type='semaine';
328        $id_evenement = intval(_request('id_evenement'));
329        $edit = _request('edit');
330        $neweven = _request('neweven');
331
332        $annee = intval(_request('annee'));
333        $mois = intval(_request('mois'));
334        $jour = intval(_request('jour'));
335        $date = date("Y-m-d", time());
336        if ($annee&&$mois&&$jour)
337                $date = date("Y-m-d", strtotime("$annee-$mois-$jour"));
338
339
340               
341        if ($type == 'semaine') {
342       
343                //$GLOBALS['afficher_bandeau_calendrier_semaine'] = true;
344                $titre = _T('titre_page_calendrier',
345                        array('nom_mois' => nom_mois($date), 'annee' => annee($date)));
346        }
347  elseif ($type == 'jour') {
348                $titre = nom_jour($date)." ". affdate_jourcourt($date);
349  }
350        else {
351                $titre = _T('titre_page_calendrier',
352                    array('nom_mois' => nom_mois($date), 'annee' => annee($date)));
353        }
354
355  debut_page($titre, "redacteurs", "calendrier","",$css);
356        barre_onglets("calendrier", "evenements");
357
358        $out = "<div>";
359        if ($ajouter_id_article){
360                $res2 = spip_query("SELECT * FROM spip_articles AS articles WHERE id_article=".spip_abstract_quote($ajouter_id_article));
361                if ($row2 = spip_fetch_array($res2)){
362                        $out .= "<div style=' width:750px; font-size: 18px; color: #9DBA00; font-weight: bold;text-align:left;'>";
363                        $out .= "<a href='".generer_url_ecrire('articles',"id_article=".$row2['id_article'])."'>";
364                        $out .= http_img_pack("article-24.gif", "", "width='24' height='24' border='0'");
365                        $out .= entites_html(typo($row2['titre']))."</a></div>";
366                }
367        }
368        echo $out ."&nbsp;</div>" ;
369
370        echo affiche_evenements_agenda($flag_editable);
371
372        if (($edit||$neweven)&&($flag_editable))        { //---------------Edition RDV ------------------------------
373                $ndate = _request('ndate');
374                echo Agenda_formulaire_edition_evenement($id_evenement,$neweven,$ndate);
375        }
376        else
377                if ((isset($id_evenement))&&(isset($visu_evenements[$id_evenement]))){ //---------------Visualisation RDV ------------------------------
378                        echo visu_evenement_agenda($id_evenement,$flag_editable);
379                }
380        fin_page();
381
382}
383
384function http_calendrier_ics_message($annee, $mois, $jour, $large)
385{
386        return "";
387}
388
389function http_calendrier_aide_mess()
390{
391        return "";
392}
393
394function http_calendrier_semainesh($annee, $mois, $jour, $echelle, $partie_cal, $script, $ancre, $evt)
395{
396        global $spip_ecran;
397        if (!isset($spip_ecran)) $spip_ecran = 'large';
398
399        $init = date("w",mktime(1,1,1,$mois,$jour,$annee));
400        $init = $jour+1-($init ? $init : 7);
401        $sd = '';
402
403        if (is_array($evt))
404          {
405                  list($sansduree, $evenements, $premier_jour, $dernier_jour) = $evt;
406                  if ($sansduree)
407                    foreach($sansduree as $d => $r) 
408                      $evenements[$d] = !$evenements[$d] ? $r : array_merge($evenements[$d], $r);
409            $finurl = "&amp;echelle=$echelle&amp;partie_cal=$partie_cal$ancre";
410            $evt =
411              http_calendrier_semaine_noms($annee, $mois, $init, $script, $finurl) .
412              http_calendrier_mois_sept($annee, $mois, $init, $init+ 6, $evenements, $script);
413          } else $evt = "<tr><td>$evt</td></tr>";
414
415        return 
416          "\n<table class='calendrier-table-$spip_ecran' cellspacing='0' cellpadding='0'>" .
417          http_calendrier_semaine_navigation($annee, $mois, $init, $echelle, $partie_cal, $script, $ancre) .
418          $evt .
419          "</table>" .
420          (_DIR_RESTREINT ? "" : http_calendrier_aide_mess());
421}
Note: See TracBrowser for help on using the repository browser.