1 | <?php |
---|
2 | |
---|
3 | function 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 | } |
---|
84 | function 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 | |
---|
93 | function 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 | |
---|
107 | function 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 | |
---|
211 | function 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 | ?> |
---|