source: plugins/agenda/1_9_0/inc/agenda_gestion.php @ 10

Last change on this file since 10 was 10, checked in by guille, 17 years ago

Plugins Necesarios

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