source: trunk/spip/esqueleto-redcta/plugins/agenda/1_9_2/inc/editer_evenement.php @ 30

Last change on this file since 30 was 30, checked in by sebas, 17 years ago

nueva importacion del codigo del esqueleto de redcta con los plugins

File size: 8.9 KB
Line 
1<?php
2
3function Agenda_action_update_repetitions($id_evenement,$repetitions,$liste_mots){
4        // evenement source
5        $res = spip_query("SELECT * FROM spip_evenements WHERE id_evenement="._q($id_evenement));
6        if ($row = spip_fetch_array(($res))){
7                $titre = $row['titre'];
8                $descriptif = $row['descriptif'];
9                $horaire = $row['horaire'];
10                $lieu = $row['lieu'];
11                $date_debut = strtotime($row['date_debut']);
12                $date_fin = strtotime($row['date_fin']);
13                $duree = $date_fin - $date_debut;
14                $id_evenement_source = $row['id_evenement_source'];
15                $id_article = $row['id_article'];
16                if ($id_evenement_source!=0)
17                        return; // pas un evenement source donc rien a faire ici
18
19                $repetitions_updated = array();
20                // mettre a jour toutes les repetitions deja existantes ou les supprimer si plus lieu
21                $res = spip_query("SELECT id_evenement FROM spip_evenements WHERE id_evenement_source="._q($id_evenement));
22                while ($row = spip_fetch_array($res)){
23                        $date = strtotime(date('Y-m-d',$row['date_debut']));
24                        if (in_array($date,$repetitions)){
25                                // il est maintenu, on l'update
26                                $repetitions_updated[] = $date;
27                                $update_date_debut = date('Y-m-d',$date)." ".date('H:i:s',$date_debut);
28                                $update_date_fin = date('Y-m-d H:i:s',strtotime($update_date_debut)+$duree);
29                               
30                                // TODO : prendre en charge la mise a jour uniquement si conforme a l'original
31                                $update_titre = $titre;
32                                $update_descriptif = $descriptif;
33                                $update_lieu = $lieu;
34                               
35                                // mettre a jour l'evenement
36                                $res=spip_query("UPDATE spip_evenements SET `titre`="._q($update_titre)
37                                . ",`descriptif`="._q($update_descriptif)
38                                . ",`lieu`="._q($update_lieu)
39                                . ",`horaire`="._q($horaire)
40                                . ",`date_debut`="._q($update_date_debut)
41                                . ",`date_fin`="._q($update_date_fin)
42                                . ",`id_article`="._q($id_article)
43                                . " WHERE `id_evenement` ="._q($row['id_evenement']));
44                                Agenda_action_update_liste_mots($row['id_evenement'],$liste_mots);
45                        }
46                        else {
47                                // il est supprime
48                                spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement=".$row['id_evenement']);
49                                spip_query("DELETE FROM spip_evenements WHERE id_evenement=".$row['id_evenement']);
50                        }
51                       
52                }
53                // regarder les repetitions a ajouter
54                foreach($repetitions as $date){
55                        if (!in_array($date,$repetitions_updated)){
56                                $update_date_debut = date('Y-m-d',$date)." ".date('H:i:s',$date_debut);
57                                $update_date_fin = date('Y-m-d H:i:s',strtotime($update_date_debut)+$duree);
58                                $update_titre = $titre;
59                                $update_descriptif = $descriptif;
60                                $update_lieu = $lieu;
61
62                                $id_evenement_new = spip_abstract_insert("spip_evenements",
63                                        "(id_evenement_source,maj)",
64                                        "("._q($id_evenement).",NOW())");
65                                if ($id_evenement_new==0)
66                                        spip_log("agenda action formulaire article : impossible d'ajouter un evenement repete");
67                                else {
68                                        // mettre a jour l'evenement
69                                        $res=spip_query("UPDATE spip_evenements SET `titre`="._q($update_titre)
70                                        . ",`descriptif`="._q($update_descriptif)
71                                        . ",`lieu`="._q($update_lieu)
72                                        . ",`horaire`="._q($horaire)
73                                        . ",`date_debut`="._q($update_date_debut)
74                                        . ",`date_fin`="._q($update_date_fin)
75                                        . ",`id_article`="._q($id_article)
76                                        . " WHERE `id_evenement` ="._q($id_evenement_new));
77                                       
78                                        Agenda_action_update_liste_mots($id_evenement_new,$liste_mots);
79                                }
80                        }
81                }
82        }
83}
84function Agenda_action_supprime_repetitions($supp_evenement){
85        $res = spip_query("SELECT * FROM spip_evenements WHERE id_evenement_source="._q($supp_evenement));
86        while ($row = spip_fetch_array($res)){
87                $id_evenement = $row['id_evenement'];
88                spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement="._q($id_evenement));
89                spip_query("DELETE FROM spip_evenements WHERE id_evenement="._q($id_evenement));
90        }
91}
92
93function Agenda_action_update_liste_mots($id_evenement,$liste_mots){
94        // suppression des mots obsoletes
95        $cond_in = "";
96        if (count($liste_mots))
97                $cond_in = "AND " . calcul_mysql_in('id_mot', implode(",",$liste_mots), 'NOT');
98        spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement="._q($id_evenement)." ".$cond_in);
99        // ajout/maj des nouveaux mots
100        foreach($liste_mots as $id_mot){
101                if (!spip_fetch_array(spip_query("SELECT * FROM spip_mots_evenements WHERE id_evenement="._q($id_evenement)." AND id_mot="._q($id_mot))))
102                        spip_query("INSERT INTO spip_mots_evenements (id_mot,id_evenement) VALUES ("._q($id_mot).","._q($id_evenement).")");
103        }
104}
105
106
107function Agenda_action_formulaire_article($id_article,$id_evenement, $c=NULL){
108        include_spip('base/abstract_sql');
109        // gestion des requetes de mises a jour dans la base
110        $insert = _request('evenement_insert',$c);
111        $modif = _request('evenement_modif',$c);
112        if (($insert || $modif)){
113       
114                if ( ($insert) && (!$id_evenement) ){
115                        $id_evenement = spip_abstract_insert("spip_evenements",
116                                "(id_evenement_source,maj)",
117                                "('0',NOW())");
118                        if ($id_evenement==0){
119                                spip_log("agenda action formulaire article : impossible d'ajouter un evenement");
120                                return 0;
121                        }
122                }
123                if ($id_article){
124                        // mettre a jour le lien evenement-article
125                        spip_query("UPDATE spip_evenements SET id_article="._q($id_article)." WHERE id_evenement="._q($id_evenement));
126                }
127                $titre = _request('evenement_titre',$c);
128                $descriptif = _request('evenement_descriptif',$c);
129                $lieu = _request('evenement_lieu',$c);
130                $horaire = _request('evenement_horaire',$c);
131                if ($horaire!='oui') $horaire='non';
132       
133                // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas
134                $maxiter=4;
135                $st_date_deb=FALSE;
136                $jour_debut=_request('jour_evenement_debut',$c);
137                // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions
138                while(($st_date_deb<=FALSE)&&($maxiter-->0)) {
139                        $date_deb=_request('annee_evenement_debut',$c).'-'._request('mois_evenement_debut',$c).'-'.($jour_debut--)
140                                .' '._request('heure_evenement_debut',$c).':'._request('minute_evenement_debut',$c);
141                        $st_date_deb=strtotime($date_deb);
142                }
143                $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);
144       
145                // pour les cas ou l'utilisateur a saisi 29-30-31 un mois ou ca n'existait pas
146                $maxiter=4;
147                $st_date_fin=FALSE;
148                $jour_fin=_request('jour_evenement_fin',$c);
149                // test <= car retour strtotime retourne -1 ou FALSE en cas d'echec suivant les versions
150                while(($st_date_fin<=FALSE)&&($maxiter-->0)) {
151                        $st_date_fin=_request('annee_evenement_fin',$c).'-'._request('mois_evenement_fin',$c).'-'.($jour_fin--)
152                                .' '._request('heure_evenement_fin',$c).':'._request('minute_evenement_fin',$c);
153                        $st_date_fin=strtotime($st_date_fin);
154                }
155                $st_date_fin = max($st_date_deb,$st_date_fin);
156                $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);
157       
158                // mettre a jour l'evenement
159                $res=spip_query("UPDATE spip_evenements SET `titre`="._q($titre)
160                . ",`descriptif`="._q($descriptif)
161                . ",`lieu`="._q($lieu)
162                . ",`horaire`="._q($horaire)
163                . ",`date_debut`="._q($date_deb)
164                . ",`date_fin`="._q($date_fin)
165                . " WHERE `id_evenement` ="._q($id_evenement));
166
167                // les mots cles : par groupes
168                $res = spip_query("SELECT * FROM spip_groupes_mots WHERE evenements='oui' ORDER BY titre");
169                $liste_mots = array();
170                while ($row = spip_fetch_array($res,SPIP_ASSOC)){
171                        $id_groupe = $row['id_groupe'];
172                        $id_mot_a = _request("evenement_groupe_mot_select_$id_groupe",$c); // un array
173                        if (is_array($id_mot_a) && count($id_mot_a)){
174                                if ($row['unseul']=='oui')
175                                        $liste_mots[] = intval(reset($id_mot_a));
176                                else 
177                                        foreach($id_mot_a as $id_mot)
178                                                $liste_mots[] = intval($id_mot);
179                        }                               
180                }
181
182                Agenda_action_update_liste_mots($id_evenement,$liste_mots);
183                               
184                // gestion des repetitions
185                if (($repetitions = _request('selected_date_repetitions',$c))!=NULL){
186                        $repetitions = explode(',',$repetitions);
187                        $rep = array();
188                        foreach($repetitions as $key=>$date){
189                                if (preg_match(",[0-9][0-9]?/[0-9][0-9]?/[0-9][0-9][0-9][0-9],",$date)){
190                                        $date = explode('/',$date);
191                                        $date = $date[2]."/".$date[0]."/".$date[1];
192                                        $date = strtotime($date);
193                                }
194                                else {
195                                        $date = preg_replace(",[0-2][0-9]:[0-6][0-9]:[0-6][0-9]\s*(UTC|GMT)(\+|\-)[0-9]{4},","",$date);
196                                        $date = explode(' ',$date);
197                                        $date = strtotime($date[2]." ".$date[1]." ".$date[3]);
198                                }
199                                if (!in_array($date,$repetitions))
200                                        $rep[] = $date;
201                        }
202                        $repetitions = $rep;
203                }
204                else 
205                        $repetitions = array();
206                Agenda_action_update_repetitions($id_evenement, $repetitions, $liste_mots);
207        }
208        return $id_evenement;
209}
210
211function Agenda_action_supprime_evenement($id_article,$supp_evenement){
212        $res = spip_query("SELECT * FROM spip_evenements WHERE id_article="._q($id_article)." AND id_evenement="._q($supp_evenement));
213        if ($row = spip_fetch_array($res)){
214                spip_query("DELETE FROM spip_mots_evenements WHERE id_evenement="._q($supp_evenement));
215                spip_query("DELETE FROM spip_evenements WHERE id_evenement="._q($supp_evenement));
216        }
217        Agenda_action_supprime_repetitions($supp_evenement);
218        $id_evenement = 0;
219        return $id_evenement;
220}
221
222?>
Note: See TracBrowser for help on using the repository browser.