source: spip-zone/_plugins_/_stable_/agenda/1_9_1/inc/agenda_gestion.php @ 5780

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

pas le bon format de date dans Agenda_heure_selector
filtrer les evenements en fonction du statut de l'article associé. Par defaut seuls les evenements des articles publiés sont visibles. Le critere {tout} permet de tous les recuperer, et le critere {statut=..} permet de selectioner les evenements en fonction du statut de l'article associé

File size: 29.7 KB
Line 
1<?php
2
3include_spip('inc/texte');
4include_spip('inc/date');
5include_spip('agenda_mes_fonctions');
6
7function Agenda_install(){
8        Agenda_verifier_base();
9}
10
11function 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
20function 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
84function 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
117function 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
160function 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_EVENEMENTS."/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')."&nbsp;". 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
251function 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')."&nbsp; </strong></span>\n";
273                } else {
274                        $out .=  "<span class='verdana1'><strong>"._T('agenda:titre_cadre_ajouter_evenement')."&nbsp; </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_EVENEMENTS."/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
306function 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_EVENEMENTS."/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
343function 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}
424function 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
433function 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
447function 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--)." "._request('heure_evenement_debut').":"._request('minute_evenement_debut');
485                        $st_date_deb=strtotime($date_deb);
486                }
487                $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);
488       
489                // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas
490                $maxiter=4;
491                $st_date_fin=FALSE;
492                $jour_fin=_request('jour_evenement_fin');
493                // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions
494                while(($st_date_fin<=FALSE)&&($maxiter-->0)) {
495                        $st_date_fin=_request('annee_evenement_fin')."-"._request('mois_evenement_fin')."-".($jour_fin--)." "._request('heure_evenement_fin').":"._request('minute_evenement_fin');
496                        $st_date_fin=strtotime($st_date_fin);
497                }
498                $st_date_fin = max($st_date_deb,$st_date_fin);
499                $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);
500       
501                // mettre a jour l'evenement
502                $res=spip_query("UPDATE spip_evenements SET `titre`=".spip_abstract_quote($titre)
503                . ",`descriptif`=".spip_abstract_quote($descriptif)
504                . ",`lieu`=".spip_abstract_quote($lieu)
505                . ",`horaire`=".spip_abstract_quote($horaire)
506                . ",`date_debut`=".spip_abstract_quote($date_deb)
507                . ",`date_fin`=".spip_abstract_quote($date_fin)
508                . " WHERE `id_evenement` =".spip_abstract_quote($id_evenement));
509
510                // les mots cles : par groupes
511                $res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui' ORDER BY titre");
512                $liste_mots = array();
513                while ($row = spip_fetch_array($res,SPIP_ASSOC)){
514                        $id_groupe = $row['id_groupe'];
515                        $id_mot_a = _request("evenement_groupe_mot_select_$id_groupe"); // un array
516                        if (is_array($id_mot_a) && count($id_mot_a)){
517                                if ($row['unseul']=='oui')
518                                        $liste_mots[] = intval(reset($id_mot_a));
519                                else 
520                                        foreach($id_mot_a as $id_mot)
521                                                $liste_mots[] = intval($id_mot);
522                        }                               
523                }
524
525                Agenda_action_update_liste_mots($id_evenement,$liste_mots);
526                               
527                // gestion des repetitions
528                if (($repetitions = _request('selected_date_repetitions'))!=NULL){
529                        $repetitions = explode(',',$repetitions);
530                        $rep = array();
531                        foreach($repetitions as $key=>$date){
532                                if (preg_match(",[0-9][0-9]?/[0-9][0-9]?/[0-9][0-9][0-9][0-9],",$date)){
533                                        $date = explode('/',$date);
534                                        $date = $date[2]."/".$date[0]."/".$date[1];
535                                        $date = strtotime($date);
536                                }
537                                else {
538                                        $date = preg_replace(",[0-2][0-9]:[0-6][0-9]:[0-6][0-9]\s*(UTC|GMT)(\+|\-)[0-9]{4},","",$date);
539                                        $date = explode(' ',$date);
540                                        $date = strtotime($date[2]." ".$date[1]." ".$date[3]);
541                                }
542                                if (!in_array($date,$repetitions))
543                                        $rep[] = $date;
544                        }
545                        $repetitions = $rep;
546                }
547                else 
548                        $repetitions = array();
549                Agenda_action_update_repetitions($id_evenement, $repetitions, $liste_mots);
550        }
551        else if ($supp_evenement){
552                $id_article = intval(_request('id_article'));
553
554                if (!$id_article)
555                        $id_article = intval(_request('ajouter_id_article'));
556                $res = spip_query("SELECT * FROM spip_evenements WHERE id_article=".spip_abstract_quote($id_article)." AND id_evenement=".spip_abstract_quote($supp_evenement));
557                if ($row = spip_fetch_array($res)){
558                        spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement=".spip_abstract_quote($supp_evenement));
559                        spip_query("DELETE FROM spip_evenements WHERE id_evenement=".spip_abstract_quote($supp_evenement));
560                }
561                Agenda_action_supprime_repetitions($supp_evenement);
562        }
563        return "";
564}
565
566
567function Agenda_formulaire_edition_evenement($id_evenement, $neweven, $ndate="", $titre_defaut=""){
568        global $spip_lang_right;
569        $out = "";
570
571        // inits
572        $ftitre=$titre_defaut;
573        $flieu='';
574        $fdescriptif='';
575        $fstdatedeb=time();
576        $fhoraire = 'oui';
577        if (($neweven)&&($ndate)){
578                $newdate=urldecode($ndate);
579                $test=strtotime($newdate);
580                if ($test>0)
581                        $fstdatedeb=$test;
582        }
583        $fstdatefin=$fstdatedeb+60*60;
584
585        if ($id_evenement!=NULL){
586                $res = spip_query("SELECT evenements.* FROM spip_evenements AS evenements WHERE evenements.id_evenement=".spip_abstract_quote($id_evenement));
587                if ($row = spip_fetch_array($res)){
588                        if (!$neweven){
589                                $fid_evenement=$row['id_evenement'];
590                                $ftitre=attribut_html($row['titre']);
591                                $flieu=attribut_html($row['lieu']);
592                                $fhoraire=attribut_html($row['horaire']);
593                                $fdescriptif=attribut_html($row['descriptif']);
594                                $fstdatedeb=strtotime($row['date_debut']);
595                                $fstdatefin=strtotime($row['date_fin']);
596                        }
597                }
598        }
599
600        $url=self();
601        $url=parametre_url($url,'edit','');
602        $url=parametre_url($url,'neweven','');
603        $url=parametre_url($url,'ndate','');
604        $url=parametre_url($url,'id_evenement','');
605
606        $out .= "<div class='agenda-visu-evenement'>";
607
608        $ajouter_id_article = _request('ajouter_id_article');
609        if ($ajouter_id_article && !_request('id_article')){
610                $res2 = spip_query("SELECT * FROM spip_articles AS articles WHERE id_article=".spip_abstract_quote($ajouter_id_article));
611                if ($row2 = spip_fetch_array($res2)){
612                        $out .= "<div class='article-evenement'>";
613                        $out .= "<a href='".generer_url_ecrire('articles',"id_article=".$row2['id_article'])."'>";
614                        $out .= http_img_pack("article-24.gif", "", "width='24' height='24' border='0'");
615                        $out .= entites_html($row2['titre'])."</a>";
616                        $out .= "</div>\n";
617                }
618        }
619       
620        $out .= "<div class='agenda-visu-evenement-bouton-fermer'>";
621  $out .=       "<a href='$url'><img src='"._DIR_PLUGIN_AGENDA_EVENEMENTS."/img_pack/croix.png' width='12' height='12' style='border:none;'></a>";
622  $out .= "</div>\n";
623  $out .=  "<form name='edition_evenement' action='$url' method='post'>";
624  #$out .=  "<input type='hidden' name='redirect' value='$url' />\n";
625        if (!$neweven){
626          $out .=  "<input type='hidden' name='id_evenement' value='$fid_evenement' />\n";
627          $out .=  "<input type='hidden' name='evenement_modif' value='1' />\n";
628        }
629        else {
630          $out .=  "<input type='hidden' name='evenement_insert' value='1' />\n";
631        }
632       
633        // TITRE
634        $out .=  "<div class='titre-titre'>"._T('agenda:evenement_titre')."</div>\n";
635        $out .=  "<div class='titre-visu'>";
636        $out .=  "<input type='text' name='evenement_titre' value=\"$ftitre\" style='width:100%;' />";
637        $out .=  "</div>\n";
638
639        // LIEU
640        $out .=  "<div class='lieu-titre'>"._T('agenda:evenement_lieu')."</div>";
641        $out .=  "<div class='lieu-visu'>";
642        $out .=  "<input type='text' name='evenement_lieu' value=\"$flieu\" style='width:100%;' />";
643        $out .=  "</div>\n";
644
645        // Horaire
646        $out .=  "<div class='horaire-titre'>";
647        $out .=  "<input type='checkbox' name='evenement_horaire' value='oui' ";
648        $out .= ($fhoraire=='oui'?"checked='checked' ":"");
649        $out .= " onClick=\"var element =  findObj('evenement_horaire');var choix = element.checked;
650        if (choix==true){       setvisibility('afficher_horaire_debut_evenement', 'visible');setvisibility('afficher_horaire_fin_evenement', 'visible');}
651        else{setvisibility('afficher_horaire_debut_evenement', 'hidden');setvisibility('afficher_horaire_fin_evenement', 'hidden');}\"";
652        $out .= "/>";
653        $out .= _T('agenda:evenement_horaire')."</div>";
654
655        // DATES
656        $out .=  "<div class='date-titre'>"._T('agenda:evenement_date')."</div>";
657        $out .=  "<div class='date-visu'>";
658        $out .=  _T('agenda:evenement_date_de');
659        $out .= WCalendar_controller($d=date('Y-m-d H:i:s',$fstdatedeb),"_evenement_debut");
660        $out .= "<span class='agenda_".($fhoraire=='oui'?"":"in")."visible_au_chargement' id='afficher_horaire_debut_evenement'>";
661        $out .=  _T('agenda:evenement_date_a');
662        $out .= Agenda_heure_selector($d,"_debut");
663        $out .= "</span>";
664        $out .=  "<br/>";
665        $out .=  _T('agenda:evenement_date_au');
666        $out .= WCalendar_controller($d=date('Y-m-d H:i:s',$fstdatefin),"_evenement_fin");
667        $out .= "<span class='agenda_".($fhoraire=='oui'?"":"in")."visible_au_chargement' id='afficher_horaire_fin_evenement'>";
668        $out .=  _T('agenda:evenement_date_a');
669        $out .= Agenda_heure_selector($d,"_fin");
670        $out .= "</span>";
671        $out .=  "</div>\n";
672       
673        // DESCRIPTIF
674        $out .=  "<div class='descriptif-titre'>"._T('agenda:evenement_descriptif')."</div>";
675        $out .=  "<div class='descriptif-visu'>";
676        $out .=  "<textarea name='evenement_descriptif' style='width:100%;' rows='3'>";
677        $out .=  $fdescriptif;
678        $out .=  "</textarea>\n";
679        $out .=  "</div>\n";
680
681        // MOTS CLES : chaque groupe de mot cle attribuable a un evenement agenda
682        // donne un select
683        $out .=  "<div class='agenda_mots_cles'>";
684        $res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui' ORDER BY titre");
685        while ($row = spip_fetch_array($res,SPIP_ASSOC)){
686                $id_groupe = $row['id_groupe'];
687                $multiple = ($row['unseul']=='oui')?"size='4'":"multiple='multiple' size='4'";
688               
689                $id_mot_select = array();
690                if ($id_evenement){
691                        $res2 = spip_query("SELECT mots_evenements.id_mot FROM spip_mots_evenements AS mots_evenements
692                                                                LEFT JOIN spip_mots AS mots ON mots.id_mot=mots_evenements.id_mot
693                                                                WHERE mots.id_groupe=".spip_abstract_quote($id_groupe)." AND mots_evenements.id_evenement=".spip_abstract_quote($id_evenement));
694                        while ($row2 = spip_fetch_array($res2))
695                                $id_mot_select[] = $row2['id_mot'];
696                }
697
698                $nb_mots = 0;
699                $select = "";   
700                $select .= "<select name='evenement_groupe_mot_select_{$id_groupe}[]' class='fondl verdana1 agenda_mot_cle_select' $multiple>\n";
701                $select .= "\n<option value='x' style='font-variant: small-caps;' >".supprimer_numero($row['titre'])."</option>";
702
703                $res2= spip_query("SELECT * FROM spip_mots WHERE id_groupe=".spip_abstract_quote($id_groupe)." ORDER BY titre");
704                while ($row2 = spip_fetch_array($res2,SPIP_ASSOC)){
705                        $id_mot = $row2['id_mot'];
706                        $titre = $row2['titre'];
707                        $select .= my_sel($id_mot, "&nbsp;&nbsp;&nbsp;$titre", in_array($id_mot,$id_mot_select)?$id_mot:0);
708                        $nb_mots++;
709                }
710                $select .= "</select>\n";
711                if ($nb_mots)
712                        $out .= $select;
713        }
714        $out .=  "</div>";
715       
716        $dates = "";
717        if ($id_evenement!=NULL){
718                $dates = array();
719                $res = spip_query("SELECT date_debut FROM spip_evenements WHERE id_evenement_source=".spip_abstract_quote($id_evenement));
720                while ($row=spip_fetch_array($res)){
721                        $dates[] = date('m/d/Y',strtotime($row['date_debut']));
722                }
723                $dates = implode(",",$dates);
724        }
725        $out .= "<div class='repetitions-calendrier'>";
726        $out .= WCalendar_statique_point_entree('_repetitions',$dates);
727        $out .= "</div>";
728       
729  $out .=  "<div class='edition-bouton'>";
730  #echo "<input type='submit' name='submit' value='Annuler' />";
731        if ($neweven==1){
732                $out .= "<div style='text-align:$spip_lang_right'><input type='submit' name='ajouter' value='"._T('bouton_ajouter')."' class='fondo' onclick='javascript:getSelectedDate_repetitions()'></div>";
733        }
734        else{
735                $out .= "<div style='text-align:$spip_lang_right'><input type='submit' name='ajouter' value='"._T('bouton_enregistrer')."' class='fondo' onclick='javascript:getSelectedDate_repetitions()'></div>";
736        }
737        $out .=  "</div>\n";
738
739        // feature desactivee pour le moment
740        // $out .= "<script type='text/javascript' src='"._DIR_PLUGIN_AGENDA_EVENEMENTS."/img_pack/multiselect.js'></script>";
741
742  $out .=  "</div>";
743
744        $out .=  "</form>";
745        $out .=  "</div>\n";
746        return $out;
747}
748
749
750?>
Note: See TracBrowser for help on using the repository browser.