commit to avoid « bouffonneries » of inatentive administrators
[platal.git] / htdocs.net / groupe / evenements.php
1 <?php
2 require 'xnet.inc.php';
3
4 new_group_page('xnet/groupe/evenements.tpl');
5
6 $page->assign('logged', logged());
7 $page->assign('admin', may_update());
8
9 $moments = range(1, 4);
10 $page->assign('moments', $moments);
11
12 $page->assign('eid', Env::get('eid'));
13
14 if ($eid = Env::get('eid')) {
15 $res = $globals->xdb->query("SELECT asso_id, short_name FROM groupex.evenements WHERE eid = {?}", $eid);
16 $infos = $res->fetchOneAssoc();
17 if ($infos['asso_id'] != $globals->asso('id')) {
18 unset($eid);
19 unset($infos);
20 }
21 }
22
23 if (may_update() && Post::get('intitule')) {
24 $short_name = Env::get('short_name');
25 //Quelques vérifications sur l'alias (caractères spéciaux)
26 if ($short_name && !preg_match( "/^[a-zA-Z0-9\-.]{3,20}$/", $short_name))
27 {
28 $page->trig("Le raccourci demandé n'est pas valide.
29 Vérifie qu'il comporte entre 3 et 20 caractères
30 et qu'il ne contient que des lettres non accentuées,
31 des chiffres ou les caractères - et .");
32 $short_name = $infos['short_name'];
33 $page->assign('get_form', true);
34 $get_form = true;
35 // set the field to the previously requested field
36 $page->assign('evt', $_REQUEST);
37 }
38 //vérifier que l'alias n'est pas déja pris
39 if ($short_name && $short_name != $infos['short_name']) {
40 $res = $globals->xdb->query('SELECT COUNT(*) FROM virtual WHERE alias LIKE {?}', $short_name."-%");
41 if ($res->fetchOneCell() > 0) {
42 $page->trig("Le raccourci demandé est déjà utilisé. Choisis en un autre.");
43 $short_name = $infos['short_name'];
44 $page->assign('get_form', true);
45 $get_form = true;
46 // set the field to the previously requested field
47 $page->assign('evt', $_REQUEST);
48 }
49 }
50 if ($short_name && $infos['short_name'] && $short_name != $infos['short_name']) {
51 $globals->xdb->execute("UPDATE virtual SET alias = REPLACE(alias, {?}, {?}) WHERE type = 'evt' AND alias LIKE {?}",
52 $infos['short_name'], $short_name, $infos['short_name']."-%");
53 } elseif ($short_name && !$infos['short_name']) {
54 $globals->xdb->execute("INSERT INTO virtual SET type = 'evt', alias = {?}", $short_name."-participants@".$globals->xnet->evts_domain);
55 $res = $globals->xdb->query("SELECT LAST_INSERT_ID()");
56 $globals->xdb->execute("INSERT INTO virtual_redirect (
57 SELECT {?} AS vid, IF(u.nom IS NULL, m.email, CONCAT(a.alias, {?})) AS redirect
58 FROM groupex.evenements_participants AS ep
59 LEFT JOIN groupex.membres AS m ON (ep.uid = m.uid)
60 LEFT JOIN auth_user_md5 AS u ON (u.user_id = ep.uid)
61 LEFT JOIN aliases AS a ON (a.id = ep.uid AND a.type = 'a_vie')
62 WHERE ep.eid = {?}
63 GROUP BY ep.uid)",
64 $res->fetchOneCell(), "@".$globals->mail->domain, $eid);
65
66 $globals->xdb->execute("INSERT INTO virtual SET type = 'evt', alias = {?}", $short_name."-absents@".$globals->xnet->evts_domain);
67 $res = $globals->xdb->query("SELECT LAST_INSERT_ID()");
68 $globals->xdb->execute("INSERT INTO virtual_redirect (
69 SELECT {?} AS vid, IF(u.nom IS NULL, m.email, CONCAT(a.alias, {?})) AS redirect
70 FROM groupex.membres AS m
71 LEFT JOIN groupex.evenements_participants AS ep ON (ep.uid = m.uid)
72 LEFT JOIN auth_user_md5 AS u ON (u.user_id = m.uid)
73 LEFT JOIN aliases AS a ON (a.id = m.uid AND a.type = 'a_vie')
74 WHERE m.asso_id = {?} AND ep.uid IS NULL
75 GROUP BY m.uid)",
76 $res->fetchOneCell(), "@".$globals->mail->domain, $globals->asso('id'));
77 } elseif (!$short_name && $infos['short_name']) {
78 $globals->xdb->execute("DELETE virtual, virtual_redirect FROM virtual LEFT JOIN virtual_redirect USING(vid) WHERE virtual.alias LIKE {?}",
79 $infos['short_name']."-%");
80 }
81
82 $globals->xdb->execute("REPLACE INTO groupex.evenements
83 SET eid={?}, asso_id={?}, organisateur_uid={?}, intitule={?},
84 paiement_id = {?}, descriptif = {?},
85 debut = {?}, fin = {?},
86 membres_only = {?}, advertise = {?}, show_participants = {?}, short_name = {?}",
87 $eid, $globals->asso('id'), Session::get('uid'), Post::get('intitule'),
88 (Post::get('paiement_id')>0)?Post::get('paiement_id'):NULL, Post::get('descriptif'),
89 Post::get('deb_Year')."-".Post::get('deb_Month')."-".Post::get('deb_Day')." ".Post::get('deb_Hour').":".Post::get('deb_Minute').":00",
90 Post::get('fin_Year')."-".Post::get('fin_Month')."-".Post::get('fin_Day')." ".Post::get('fin_Hour').":".Post::get('fin_Minute').":00",
91 Post::get('membres_only'), Post::get('advertise'), Post::get('show_participants'), $short_name, $eid);
92
93 if (!$eid) {
94 $res = $globals->xdb->query("SELECT LAST_INSERT_ID()");
95 $eid = $res->fetchOneCell();
96 }
97 $nb_moments = 0;
98 $money_defaut = 0;
99 foreach ($moments as $i) if (Post::get('titre'.$i)) {
100 $nb_moments++;
101 if (!($money_defaut > 0)) $money_defaut = strtr(Post::get('montant'.$i), ',', '.');
102 $globals->xdb->execute("
103 REPLACE INTO groupex.evenements_items VALUES (
104 {?}, {?},
105 {?}, {?}, {?})",
106 $eid, $i,
107 Post::get('titre'.$i), Post::get('details'.$i), strtr(Post::get('montant'.$i), ',', '.'));
108 } else {
109 $globals->xdb->execute("DELETE FROM groupex.evenements_items WHERE eid = {?} AND item_id = {?}", $eid, $i);
110 }
111
112 // request for a new payment
113 if (Post::get('paiement_id') == -1 && $money_defaut >= 0) {
114 require_once ('validations.inc.php');
115 $p = new PayReq(Session::get('uid'), Post::get('intitule')." - ".$globals->asso('nom'), Post::get('site'), $money_defaut, Post::get('confirmation'),0, 999, $globals->asso('id'), $eid);
116 $p->submit();
117 }
118
119 // events with no sub-event
120 if ($nb_moments == 0)
121 $globals->xdb->execute("INSERT INTO groupex.evenements_items VALUES ({?}, {?}, '', '', 0)", $eid, 1);
122 }
123
124 if (may_update() && Env::has('sup') && $eid) {
125 // deletes the event
126 $globals->xdb->execute("DELETE FROM groupex.evenements WHERE eid = {?} AND asso_id = {?}", $eid, $globals->asso('id'));
127 // deletes the event items
128 $globals->xdb->execute("DELETE FROM groupex.evenements_items WHERE eid = {?}", $eid);
129 // deletes the event participants
130 $globals->xdb->execute("DELETE FROM groupex.evenements_participants WHERE eid = {?}", $eid);
131 // deletes the event mailing aliases
132 if ($infos['short_name'])
133 $globals->xdb->execute("DELETE FROM virtual WHERE type = 'evt' AND alias LIKE {?}", $infos['short_name']."-%");
134 // delete the requests for payments
135 require_once('validations.inc.php');
136 $globals->xdb->execute("DELETE FROM requests WHERE type = 'paiements' AND data LIKE {?}", PayReq::same_event($eid, $globals->asso('id')));
137 }
138
139 if (may_update() && (Env::has('add') || (Env::has('mod') && $eid || $get_form))) {
140 $page->assign('get_form', true);
141 $res = $globals->xdb->iterator
142 ("SELECT id, text FROM {$globals->money->mpay_tprefix}paiements WHERE asso_id = {?}", $globals->asso('id'));
143 $paiements = array();
144 while ($a = $res->next()) $paiements[$a['id']] = $a['text'];
145 $page->assign('paiements', $paiements);
146 }
147
148 if ($eid) {
149 $res = $globals->xdb->query(
150 "SELECT eid, intitule, descriptif, debut, fin, membres_only, advertise, show_participants, paiement_id, short_name
151 FROM groupex.evenements
152 WHERE eid = {?}", $eid);
153 $evt = $res->fetchOneAssoc();
154 require_once('validations.inc.php');
155 $res = $globals->xdb->query("SELECT stamp FROM requests WHERE type = 'paiements' AND data LIKE {?}", PayReq::same_event($eid, $globals->asso('id')));
156 $stamp = $res->fetchOneCell();
157 if ($stamp) {
158 $evt['paiement_id'] = -2;
159 $evt['paiement_req'] = $stamp;
160 }
161 $page->assign('evt', $evt);
162 }
163
164 if (may_update() && Env::has('mod') && $eid) {
165 $res = $globals->xdb->iterator(
166 "SELECT item_id, titre, details, montant
167 FROM groupex.evenements_items AS ei
168 INNER JOIN groupex.evenements AS e ON(e.eid = ei.eid)
169 WHERE e.eid = {?}
170 ORDER BY item_id", $eid);
171 $items = array();
172 while ($item = $res->next()) $items[$item['item_id']] = $item;
173 $page->assign('items', $items);
174 } else {
175
176 $evenements = $globals->xdb->iterator(
177 "SELECT e.eid, e.intitule, e.descriptif, e.debut, e.fin, e.show_participants, u.nom, u.prenom, u.promo, a.alias, MAX(ep.nb) AS inscrit,
178 e.short_name
179 FROM groupex.evenements AS e
180 INNER JOIN x4dat.auth_user_md5 AS u ON u.user_id = e.organisateur_uid
181 LEFT JOIN x4dat.aliases AS a ON (a.type = 'a_vie' AND a.id = u.user_id)
182 LEFT JOIN groupex.evenements_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?})
183 WHERE asso_id = {?}
184 GROUP BY e.eid
185 ORDER BY debut",Session::get('uid'),$globals->asso('id'));
186
187 $page->assign('evenements', $evenements);
188
189 $page->assign('nb_evt', $evenements->total());
190 }
191
192 $page->run();
193
194 ?>