source: spip-zone/_plugins_/_stable_/agenda/saisie_rapide/inc/agenda_gestion.php @ 7817

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