Add a message when a user valid his subscription to an event.
[platal.git] / modules / xnetevents.php
CommitLineData
4f10a058 1<?php
2/***************************************************************************
179afa7f 3 * Copyright (C) 2003-2008 Polytechnique.org *
4f10a058 4 * http://opensource.polytechnique.org/ *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
18 * Foundation, Inc., *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
21
ed21e24a 22define('NB_PER_PAGE', 25);
23
4f10a058 24class XnetEventsModule extends PLModule
25{
26 function handlers()
27 {
28 return array(
d1ebc57a 29 '%grp/events' => $this->make_hook('events', AUTH_MDP),
30 '%grp/events/sub' => $this->make_hook('sub', AUTH_MDP),
8fc4efa3 31 '%grp/events/csv' => $this->make_hook('csv', AUTH_MDP, 'user', NO_HTTPS),
32 '%grp/events/ical' => $this->make_hook('ical', AUTH_MDP, 'user', NO_HTTPS),
c6c10b6b 33 '%grp/events/edit' => $this->make_hook('edit', AUTH_MDP, 'groupadmin'),
1490093c 34 '%grp/events/admin' => $this->make_hook('admin', AUTH_MDP, 'groupmember'),
4f10a058 35 );
36 }
37
f02eefd4 38 function handler_events(&$page, $archive = null)
4f10a058 39 {
40 global $globals;
41
1490093c 42 $page->changeTpl('xnetevents/index.tpl');
f02eefd4 43 $action = null;
1490093c 44 $archive = ($archive == 'archive' && may_update());
45
2b9e5fd3 46 if (Post::has('del')) {
f02eefd4 47 $action = 'del';
48 $eid = Post::v('del');
49 } elseif (Post::has('archive')) {
50 $action = 'archive';
51 $eid = Post::v('archive');
52 } elseif (Post::has('unarchive')) {
53 $action = 'unarchive';
54 $eid = Post::v('unarchive');
55 }
56
57 if (!is_null($action)) {
2b9e5fd3 58 if (!may_update()) {
73fdb1e8 59 return PL_FORBIDDEN;
2b9e5fd3 60 }
4fcbb455 61 S::assert_xsrf_token();
2b9e5fd3 62
08cce2ff 63 $res = XDB::query("SELECT asso_id, short_name FROM groupex.evenements
3cabafae 64 WHERE eid = {?} AND asso_id = {?}",
65 $eid, $globals->asso('id'));
2b9e5fd3 66
67 $tmp = $res->fetchOneRow();
68 if (!$tmp) {
73fdb1e8 69 return PL_FORBIDDEN;
2b9e5fd3 70 }
f02eefd4 71 }
2b9e5fd3 72
f02eefd4 73 if ($action == 'del') {
2b9e5fd3 74 // deletes the event mailing aliases
75 if ($tmp[1]) {
08cce2ff 76 XDB::execute(
5070a22d 77 "DELETE FROM virtual WHERE type = 'evt' AND alias LIKE {?}",
78 $tmp[1].'-absents@%');
08cce2ff 79 XDB::execute(
5070a22d 80 "DELETE FROM virtual WHERE type = 'evt' AND alias LIKE {?}",
81 $tmp[1].'-participants@%');
2b9e5fd3 82 }
83
84 // deletes the event items
08cce2ff 85 XDB::execute("DELETE FROM groupex.evenements_items WHERE eid = {?}", $eid);
2b9e5fd3 86
87 // deletes the event participants
08cce2ff 88 XDB::execute("DELETE FROM groupex.evenements_participants
2b9e5fd3 89 WHERE eid = {?}", $eid);
90
91 // deletes the event
08cce2ff 92 XDB::execute("DELETE FROM groupex.evenements
2b9e5fd3 93 WHERE eid = {?} AND asso_id = {?}",
94 $eid, $globals->asso('id'));
95
96 // delete the requests for payments
97 require_once 'validations.inc.php';
08cce2ff 98 XDB::execute("DELETE FROM requests
2b9e5fd3 99 WHERE type = 'paiements' AND data LIKE {?}",
100 PayReq::same_event($eid, $globals->asso('id')));
ebfdf077 101 $globals->updateNbValid();
2b9e5fd3 102 }
103
f02eefd4 104 if ($action == 'archive') {
105 XDB::execute("UPDATE groupex.evenements
106 SET archive = 1
107 WHERE eid = {?} AND asso_id = {?}",
108 $eid, $globals->asso('id'));
109 }
110
111 if ($action == 'unarchive') {
112 XDB::execute("UPDATE groupex.evenements
113 SET archive = 0
114 WHERE eid = {?} AND asso_id = {?}",
115 $eid, $globals->asso('id'));
116 }
ab02e9bc 117
f02eefd4 118 $page->assign('archive', $archive);
08cce2ff 119 $evenements = XDB::iterator(
d6d580ec 120 "SELECT e.*, LEFT(10, e.debut) AS debut_day, LEFT(10, e.fin) AS fin_day,
bd46a8e4 121 IF(e.deadline_inscription, e.deadline_inscription >= LEFT(NOW(), 10),
d6d580ec 122 1) AS inscr_open, e.deadline_inscription,
123 u.nom, u.prenom, u.promo, a.alias,
9193e8f7 124 MAX(ep.nb) IS NOT NULL AS inscrit, MAX(ep.paid) AS paid
d6d580ec 125 FROM groupex.evenements AS e
4f10a058 126 INNER JOIN x4dat.auth_user_md5 AS u ON u.user_id = e.organisateur_uid
d6d580ec 127 INNER JOIN x4dat.aliases AS a ON (a.type = 'a_vie' AND a.id = u.user_id)
4f10a058 128 LEFT JOIN groupex.evenements_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?})
f02eefd4 129 WHERE asso_id = {?}
130 AND archive = " . ($archive ? "1 " : "0 ")
3cabafae 131 . "GROUP BY e.eid
cb24457f 132 ORDER BY inscr_open DESC, debut DESC", S::v('uid'), $globals->asso('id'));
4f10a058 133
134 $evts = array();
fbfc01a1 135 $undisplayed_events = 0;
d6d580ec 136
4f10a058 137 while ($e = $evenements->next()) {
fbfc01a1
SJ
138 if (!is_member() && !may_update() && !$e['accept_nonmembre']) {
139 $undisplayed_events ++;
140 continue;
141 }
142
3cabafae 143 $e['show_participants'] = ($e['show_participants'] && (is_member() || may_update()));
08cce2ff 144 $res = XDB::query(
98a7e9dc 145 "SELECT titre, details, montant, ei.item_id, nb, ep.paid
4f10a058 146 FROM groupex.evenements_items AS ei
147 LEFT JOIN groupex.evenements_participants AS ep
148 ON (ep.eid = ei.eid AND ep.item_id = ei.item_id AND uid = {?})
149 WHERE ei.eid = {?}",
cab08090 150 S::v('uid'), $e['eid']);
d6d580ec 151 $e['moments'] = $res->fetchAllAssoc();
152
153 $e['topay'] = 0;
98a7e9dc 154 $e['paid'] = $e['moments'][0]['paid'];
d6d580ec 155 foreach ($e['moments'] as $m) {
156 $e['topay'] += $m['nb'] * $m['montant'];
157 }
158
08cce2ff 159 $query = XDB::query(
4f10a058 160 "SELECT montant
161 FROM {$globals->money->mpay_tprefix}transactions AS t
cab08090 162 WHERE ref = {?} AND uid = {?}", $e['paiement_id'], S::v('uid'));
4f10a058 163 $montants = $query->fetchColumn();
d6d580ec 164
4f10a058 165 foreach ($montants as $m) {
d6d580ec 166 $p = strtr(substr($m, 0, strpos($m, 'EUR')), ',', '.');
4f10a058 167 $e['paid'] += trim($p);
168 }
d6d580ec 169
1f5b0b59 170 if (Env::has('updated') && $e['eid'] == Env::i('updated')) {
171 $page->assign('updated', $e);
172 }
4f10a058 173 $evts[] = $e;
174 }
ab02e9bc 175
4f10a058 176 $page->assign('evenements', $evts);
fbfc01a1 177 $page->assign('undisplayed_events', $undisplayed_events);
4f10a058 178 }
179
d6d580ec 180 function handler_sub(&$page, $eid = null)
181 {
460d8f55 182 $this->load('xnetevents.inc.php');
1490093c 183 $page->changeTpl('xnetevents/subscribe.tpl');
d6d580ec 184
185 $evt = get_event_detail($eid);
df1cf596 186 if (is_null($evt)) {
d6d580ec 187 return PL_NOT_FOUND;
188 }
df1cf596
FB
189 if ($evt === false) {
190 global $globals, $platal;
191 $url = $globals->asso('sub_url');
192 if (empty($url)) {
193 $url = $platal->ns . 'subscribe';
194 }
195 $page->kill('Cet événement est reservé aux membres du groupe ' . $globals->asso('nom') .
196 '. Pour devenir membre, rends-toi sur la page de <a href="' . $url . '">demande d\'inscripton</a>.');
197 }
d6d580ec 198
199 if (!$evt['inscr_open']) {
a7de4ef7 200 $page->kill('Les inscriptions pour cet événement sont closes');
d6d580ec 201 }
3cabafae 202 if (!$evt['accept_nonmembre'] && !is_member() && !may_update()) {
a7de4ef7 203 $page->kill('Cet événement est fermé aux non-membres du groupe');
3cabafae 204 }
d6d580ec 205
2ac0bcee
FB
206 global $globals;
207 $res = XDB::query("SELECT stamp FROM requests
208 WHERE type = 'paiements' AND data LIKE {?}",
209 PayReq::same_event($evt['eid'], $globals->asso('id')));
210 $page->assign('validation', $res->numRows());
d6d580ec 211 $page->assign('event', $evt);
212
213 if (!Post::has('submit')) {
214 return;
4fcbb455
VZ
215 } else {
216 S::assert_xsrf_token();
d6d580ec 217 }
218
5e2307dc 219 $moments = Post::v('moment', array());
220 $pers = Post::v('personnes', array());
d6d580ec 221 $subs = array();
222
223 foreach ($moments as $j => $v) {
224 $subs[$j] = intval($v);
225
226 // retreive ohter field when more than one person
227 if ($subs[$j] == 2) {
228 if (!isset($pers[$j]) || !is_numeric($pers[$j])
229 || $pers[$j] < 0)
230 {
a7d35093 231 $page->trigError('Tu dois choisir un nombre d\'invités correct !');
d6d580ec 232 return;
233 }
234 $subs[$j] = 1 + $pers[$j];
235 }
236 }
237
238 // impossible to unsubscribe if you already paid sthing
98a7e9dc 239 if (!array_sum($subs) && $evt['paid'] != 0) {
a7d35093
FB
240 $page->trigError("Impossible de te désinscrire complètement ".
241 "parce que tu as fait un paiement par ".
242 "chèque ou par liquide. Contacte un ".
243 "administrateur du groupe si tu es sûr de ".
244 "ne pas venir");
d6d580ec 245 return;
246 }
247
248 // update actual inscriptions
1f5b0b59 249 $updated = false;
9193e8f7 250 $total = 0;
30138a46 251 $paid = $evt['paid'] ? $evt['paid'] : 0;
8bac35d8 252 $telepaid= $evt['telepaid'] ? $evt['telepaid'] : 0;
d6d580ec 253 foreach ($subs as $j => $nb) {
9193e8f7 254 if ($nb >= 0) {
08cce2ff 255 XDB::execute(
d6d580ec 256 "REPLACE INTO groupex.evenements_participants
2ac0bcee 257 VALUES ({?}, {?}, {?}, {?}, {?}, {?})",
8bac35d8
FB
258 $eid, S::v('uid'), $j, $nb, Env::has('notify_payment') ? 'notify_payment' : '',
259 $j == 1 ? $paid - $telepaid : 0);
1f5b0b59 260 $updated = $eid;
d6d580ec 261 } else {
08cce2ff 262 XDB::execute(
d6d580ec 263 "DELETE FROM groupex.evenements_participants
264 WHERE eid = {?} AND uid = {?} AND item_id = {?}",
2847640f 265 $eid, S::v("uid"), $j);
1f5b0b59 266 $updated = $eid;
d6d580ec 267 }
9193e8f7 268 $total += $nb;
d6d580ec 269 }
9193e8f7 270 if ($updated !== false) {
6aac1d08 271 $page->trigSuccess('Ton inscription à l\'événement a été mise à jour avec succès.');
9193e8f7 272 subscribe_lists_event($total, S::i('uid'), $evt);
1f5b0b59 273 }
d6d580ec 274 $page->assign('event', get_event_detail($eid));
275 }
276
4f10a058 277 function handler_csv(&$page, $eid = null, $item_id = null)
278 {
460d8f55 279 $this->load('xnetevents.inc.php');
4f10a058 280
bd46a8e4 281 if (!is_numeric($item_id)) {
282 $item_id = null;
283 }
284
4f10a058 285 $evt = get_event_detail($eid, $item_id);
286 if (!$evt) {
287 return PL_NOT_FOUND;
288 }
289
493b6abe 290 header('Content-type: text/x-csv; encoding=UTF-8');
4f10a058 291 header('Pragma: ');
292 header('Cache-Control: ');
293
801fcad8 294 $page->changeTpl('xnetevents/csv.tpl', NO_SKIN);
4f10a058 295
296 $admin = may_update();
297
5e2307dc 298 $tri = (Env::v('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
4f10a058 299
ed21e24a 300 $page->assign('participants',
301 get_event_participants($evt, $item_id, $tri));
4f10a058 302
4f10a058 303 $page->assign('admin', $admin);
304 $page->assign('moments', $evt['moments']);
305 $page->assign('money', $evt['money']);
478f7c3a 306 $page->assign('telepayment', $evt['paiement_id']);
5e2307dc 307 $page->assign('tout', !Env::v('item_id', false));
4f10a058 308 }
bd46a8e4 309
11d8a183 310 function handler_ical(&$page, $eid = null)
311 {
312 global $globals;
313
460d8f55 314 $this->load('xnetevents.inc.php');
11d8a183 315 $evt = get_event_detail($eid);
316 if (!$evt) {
73fdb1e8 317 return PL_FORBIDDEN;
11d8a183 318 }
319 $evt['debut'] = preg_replace('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', "\\1\\2\\3T\\4\\5\\6", $evt['debut']);
320 $evt['fin'] = preg_replace('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', "\\1\\2\\3T\\4\\5\\6", $evt['fin']);
321
99544d53 322 foreach ($evt['moments'] as $m) {
323 $evt['descriptif'] .= "\n\n** " . $m['titre'] . " **\n" . $m['details'];
324 }
325
11d8a183 326 $page->changeTpl('xnetevents/calendar.tpl', NO_SKIN);
327
99544d53 328 require_once('ical.inc.php');
11d8a183 329 $page->assign('asso', $globals->asso());
330 $page->assign('timestamp', time());
99544d53 331 $page->assign('admin', may_update());
332
333 if (may_update()) {
334 $page->assign('participants', get_event_participants($evt, null, 'promo, nom, prenom'));
335 }
11d8a183 336 $page->register_function('display_ical', 'display_ical');
337 $page->assign_by_ref('e', $evt);
ab02e9bc 338
11d8a183 339 header('Content-Type: text/calendar; charset=utf-8');
340 }
341
bd46a8e4 342 function handler_edit(&$page, $eid = null)
343 {
344 global $globals;
345
5cbb1fad 346 // get eid if the the given one is a short name
347 if (!is_null($eid) && !is_numeric($eid)) {
348 $res = XDB::query("SELECT eid
349 FROM groupex.evenements
350 WHERE asso_id = {?} AND short_name = {?}",
351 $globals->asso('id'), $eid);
352 if ($res->numRows()) {
353 $eid = (int)$res->fetchOneCell();
354 }
355 }
356
5070a22d 357 // check the event is in our group
bd46a8e4 358 if (!is_null($eid)) {
73fdb1e8 359 $res = XDB::query("SELECT short_name
5cbb1fad 360 FROM groupex.evenements
73fdb1e8 361 WHERE eid = {?} AND asso_id = {?}",
362 $eid, $globals->asso('id'));
363 if ($res->numRows()) {
364 $infos = $res->fetchOneAssoc();
365 } else {
366 return PL_FORBIDDEN;
bd46a8e4 367 }
368 }
369
1490093c 370 $page->changeTpl('xnetevents/edit.tpl');
bd46a8e4 371
58d0edab 372 $moments = range(1, 4);
f56e5e53 373 $error = false;
5070a22d 374 $page->assign('moments', $moments);
bd46a8e4 375
5e2307dc 376 if (Post::v('intitule')) {
4fcbb455
VZ
377 S::assert_xsrf_token();
378
460d8f55 379 $this->load('xnetevents.inc.php');
2847640f
VZ
380 $short_name = event_change_shortname($page, $eid,
381 $infos['short_name'],
5e2307dc 382 Env::v('short_name', ''));
f56e5e53 383 if ($short_name != Env::v('short_name')) {
384 $error = true;
385 }
5070a22d 386 $evt = array(
387 'eid' => $eid,
388 'asso_id' => $globals->asso('id'),
5e2307dc 389 'paiement_id' => Post::v('paiement_id') > 0 ? Post::v('paiement_id') : null,
390 'debut' => Post::v('deb_Year').'-'.Post::v('deb_Month')
391 .'-'.Post::v('deb_Day').' '.Post::v('deb_Hour')
392 .':'.Post::v('deb_Minute').':00',
393 'fin' => Post::v('fin_Year').'-'.Post::v('fin_Month')
394 .'-'.Post::v('fin_Day').' '.Post::v('fin_Hour')
395 .':'.Post::v('fin_Minute').':00',
f56e5e53 396 'short_name' => $short_name,
5070a22d 397 );
398
399 $trivial = array('intitule', 'descriptif', 'noinvite',
25412aa4 400 'show_participants', 'accept_nonmembre', 'organisateur_uid');
5070a22d 401 foreach ($trivial as $k) {
5e2307dc 402 $evt[$k] = Post::v($k);
bd46a8e4 403 }
25412aa4 404 if (!$eid) {
405 $evt['organisateur_uid'] = S::v('uid');
406 }
bd46a8e4 407
5e2307dc 408 if (Post::v('deadline')) {
409 $evt['deadline_inscription'] = Post::v('inscr_Year').'-'
410 . Post::v('inscr_Month').'-'
411 . Post::v('inscr_Day');
5070a22d 412 } else {
413 $evt['deadline_inscription'] = null;
9ece1588 414 }
bd46a8e4 415
416 // Store the modifications in the database
08cce2ff 417 XDB::execute('REPLACE INTO groupex.evenements
bd46a8e4 418 SET eid={?}, asso_id={?}, organisateur_uid={?}, intitule={?},
5070a22d 419 paiement_id = {?}, descriptif = {?}, debut = {?},
420 fin = {?}, show_participants = {?}, short_name = {?},
3cabafae 421 deadline_inscription = {?}, noinvite = {?},
422 accept_nonmembre = {?}',
5070a22d 423 $evt['eid'], $evt['asso_id'], $evt['organisateur_uid'],
424 $evt['intitule'], $evt['paiement_id'], $evt['descriptif'],
425 $evt['debut'], $evt['fin'], $evt['show_participants'],
426 $evt['short_name'], $evt['deadline_inscription'],
3cabafae 427 $evt['noinvite'], $evt['accept_nonmembre']);
bd46a8e4 428
429 // if new event, get its id
430 if (!$eid) {
8b83a166 431 $eid = XDB::insertId();
bd46a8e4 432 }
433
5070a22d 434 $nb_moments = 0;
bd46a8e4 435 $money_defaut = 0;
436
437 foreach ($moments as $i) {
5e2307dc 438 if (Post::v('titre'.$i)) {
bd46a8e4 439 $nb_moments++;
5070a22d 440
5e2307dc 441 $montant = strtr(Post::v('montant'.$i), ',', '.');
5070a22d 442 $money_defaut += (float)$montant;
08cce2ff 443 XDB::execute("
bd46a8e4 444 REPLACE INTO groupex.evenements_items
445 VALUES ({?}, {?}, {?}, {?}, {?})",
5e2307dc 446 $eid, $i, Post::v('titre'.$i),
447 Post::v('details'.$i), $montant);
bd46a8e4 448 } else {
ab02e9bc 449 XDB::execute("DELETE FROM groupex.evenements_items
bd46a8e4 450 WHERE eid = {?} AND item_id = {?}", $eid, $i);
451 }
452 }
bd46a8e4 453 // request for a new payment
5e2307dc 454 if (Post::v('paiement_id') == -1 && $money_defaut >= 0) {
bd46a8e4 455 require_once 'validations.inc.php';
5daf68f6 456 $p = new PayReq(S::user(),
5e2307dc 457 Post::v('intitule')." - ".$globals->asso('nom'),
458 Post::v('site'), $money_defaut,
459 Post::v('confirmation'), 0, 999,
bd46a8e4 460 $globals->asso('id'), $eid);
20934085 461 if ($p->accept()) {
462 $p->submit();
463 } else {
464 $page->assign('paiement_message', Post::v('confirmation'));
465 $page->assign('paiement_site', Post::v('site'));
466 $error = true;
467 }
bd46a8e4 468 }
469
470 // events with no sub-event: add a sub-event with no name
471 if ($nb_moments == 0) {
08cce2ff 472 XDB::execute("INSERT INTO groupex.evenements_items
20934085 473 VALUES ({?}, {?}, '', '', 0)", $eid, 1);
bd46a8e4 474 }
bd46a8e4 475
f56e5e53 476 if (!$error) {
58d0edab 477 pl_redirect('events');
478 }
bd46a8e4 479 }
480
481 // get a list of all the payment for this asso
08cce2ff 482 $res = XDB::iterator("SELECT id, text
5cbb1fad 483 FROM {$globals->money->mpay_tprefix}paiements
484 WHERE asso_id = {?}", $globals->asso('id'));
bd46a8e4 485 $paiements = array();
486 while ($a = $res->next()) $paiements[$a['id']] = $a['text']; {
487 $page->assign('paiements', $paiements);
488 }
489
490 // when modifying an old event retreive the old datas
491 if ($eid) {
08cce2ff 492 $res = XDB::query(
25412aa4 493 "SELECT eid, intitule, descriptif, debut, fin, organisateur_uid,
494 show_participants, paiement_id, short_name,
495 deadline_inscription, noinvite, accept_nonmembre
bd46a8e4 496 FROM groupex.evenements
497 WHERE eid = {?}", $eid);
498 $evt = $res->fetchOneAssoc();
499 // find out if there is already a request for a payment for this event
500 require_once 'validations.inc.php';
08cce2ff 501 $res = XDB::query("SELECT stamp FROM requests
5cbb1fad 502 WHERE type = 'paiements' AND data LIKE {?}",
503 PayReq::same_event($eid, $globals->asso('id')));
bd46a8e4 504 $stamp = $res->fetchOneCell();
505 if ($stamp) {
f56e5e53 506 $evt['paiement_id'] = -2;
bd46a8e4 507 $evt['paiement_req'] = $stamp;
508 }
509 $page->assign('evt', $evt);
510 // get all the different moments infos
08cce2ff 511 $res = XDB::iterator(
bd46a8e4 512 "SELECT item_id, titre, details, montant
513 FROM groupex.evenements_items AS ei
514 INNER JOIN groupex.evenements AS e ON(e.eid = ei.eid)
515 WHERE e.eid = {?}
516 ORDER BY item_id", $eid);
517 $items = array();
518 while ($item = $res->next()) {
519 $items[$item['item_id']] = $item;
520 }
521 $page->assign('items', $items);
522 }
5cbb1fad 523 $page->assign('url_ref', $eid);
bd46a8e4 524 }
525
526 function handler_admin(&$page, $eid = null, $item_id = null)
527 {
528 global $globals;
529
460d8f55 530 $this->load('xnetevents.inc.php');
bd46a8e4 531
532 $evt = get_event_detail($eid, $item_id);
bd46a8e4 533 if (!$evt) {
534 return PL_NOT_FOUND;
535 }
536
1490093c 537 $page->changeTpl('xnetevents/admin.tpl');
538 if (!$evt['show_participants'] && !may_update()) {
539 return PL_FORBIDDEN;
bd46a8e4 540 }
541
5e2307dc 542 if (may_update() && Post::v('adm')) {
4fcbb455
VZ
543 S::assert_xsrf_token();
544
5e2307dc 545 $member = get_infos(Post::v('mail'));
ed21e24a 546 if (!$member) {
a7d35093 547 $page->trigError("Membre introuvable");
bd46a8e4 548 }
bd46a8e4 549
ed21e24a 550 // change the price paid by a participant
5e2307dc 551 if (Env::v('adm') == 'prix' && $member) {
08cce2ff 552 XDB::execute("UPDATE groupex.evenements_participants
dc2073c3 553 SET paid = IF(paid + {?} > 0, paid + {?}, 0)
4e4b828b 554 WHERE uid = {?} AND eid = {?} AND item_id = 1",
5e2307dc 555 strtr(Env::v('montant'), ',', '.'),
556 strtr(Env::v('montant'), ',', '.'),
dc2073c3 557 $member['uid'], $evt['eid']);
ed21e24a 558 }
bd46a8e4 559
ed21e24a 560 // change the number of personns coming with a participant
5e2307dc 561 if (Env::v('adm') == 'nbs' && $member) {
08cce2ff 562 $res = XDB::query("SELECT paid
dc2073c3 563 FROM groupex.evenements_participants
564 WHERE uid = {?} AND eid = {?}",
565 $member['uid'], $evt['eid']);
ed21e24a 566
567 $paid = intval($res->fetchOneCell());
5e2307dc 568 $nbs = Post::v('nb', array());
ed21e24a 569
570 foreach ($nbs as $id => $nb) {
5070a22d 571 $nb = max(intval($nb), 0);
fd282ae1 572 XDB::execute("REPLACE INTO groupex.evenements_participants
2ac0bcee 573 VALUES ({?}, {?}, {?}, {?}, {?}, {?})",
d6e94d43 574 $evt['eid'], $member['uid'], $id, $nb, '', $id == 1 ? $paid : 0);
bd46a8e4 575 }
ed21e24a 576
9193e8f7 577 $res = XDB::query("SELECT COUNT(uid) AS cnt, SUM(nb) AS nb
dc2073c3 578 FROM groupex.evenements_participants
9193e8f7 579 WHERE uid = {?} AND eid = {?}
580 GROUP BY uid",
dc2073c3 581 $member['uid'], $evt['eid']);
9193e8f7 582 $u = $res->fetchOneAssoc();
2847640f 583 $u = $u['cnt'] ? $u['nb'] : null;
ed21e24a 584 subscribe_lists_event($u, $member['uid'], $evt);
bd46a8e4 585 }
ed21e24a 586
bd46a8e4 587 $evt = get_event_detail($eid, $item_id);
588 }
589
e01ebe65 590 $page->assign_by_ref('evt', $evt);
1f3362a3 591 $page->assign('tout', is_null($item_id));
bd46a8e4 592
ed21e24a 593 if (count($evt['moments'])) {
594 $page->assign('moments', $evt['moments']);
595 }
bd46a8e4 596
5e2307dc 597 $tri = (Env::v('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
1f3362a3 598 $whereitemid = is_null($item_id) ? '' : "AND ep.item_id = $item_id";
08cce2ff 599 $res = XDB::iterRow(
ed21e24a 600 'SELECT UPPER(SUBSTRING(IF(u.nom IS NULL, m.nom,
601 IF(u.nom_usage<>"", u.nom_usage, u.nom)), 1, 1)),
602 COUNT(DISTINCT ep.uid)
bd46a8e4 603 FROM groupex.evenements_participants AS ep
604 INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
605 LEFT JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
606 LEFT JOIN auth_user_md5 AS u ON ( u.user_id = ep.uid )
ab02e9bc 607 WHERE ep.eid = {?} '.$whereitemid . '
dc2073c3 608 GROUP BY UPPER(SUBSTRING(IF(u.nom IS NULL,m.nom,u.nom), 1, 1))', $evt['eid']);
bd46a8e4 609
610 $alphabet = array();
611 $nb_tot = 0;
612 while (list($char, $nb) = $res->next()) {
613 $alphabet[ord($char)] = $char;
614 $nb_tot += $nb;
5e2307dc 615 if (Env::has('initiale') && $char == strtoupper(Env::v('initiale'))) {
bd46a8e4 616 $tot = $nb;
617 }
618 }
619 ksort($alphabet);
620 $page->assign('alphabet', $alphabet);
621
bd46a8e4 622 if ($evt['paiement_id']) {
08cce2ff 623 $res = XDB::iterator(
bd46a8e4 624 "SELECT IF(u.nom_usage<>'', u.nom_usage, u.nom) AS nom, u.prenom,
625 u.promo, a.alias AS email, t.montant
626 FROM {$globals->money->mpay_tprefix}transactions AS t
dc2073c3 627 INNER JOIN auth_user_md5 AS u ON(t.uid = u.user_id)
628 INNER JOIN aliases AS a ON (a.id = t.uid AND a.type='a_vie' )
629 LEFT JOIN groupex.evenements_participants AS ep ON(ep.uid = t.uid AND ep.eid = {?})
bd46a8e4 630 WHERE t.ref = {?} AND ep.uid IS NULL",
631 $evt['eid'], $evt['paiement_id']);
ed21e24a 632 $page->assign('oublis', $res->total());
633 $page->assign('oubliinscription', $res);
bd46a8e4 634 }
635
61664f8b 636 $absents = XDB::iterator("SELECT p.uid,
637 IF(m.origine = 'X', IF(u.nom_usage != '', u.nom_usage, u.nom), m.nom) AS nom,
638 IF(m.origine = 'X', u.prenom, u.prenom) AS prenom,
639 IF(m.origine = 'X', u.promo, m.origine) AS promo,
640 IF(m.origine = 'X', FIND_IN_SET('femme', u.flags), m.sexe) AS sexe,
641 IF(m.origine = 'X', a.alias, m.email) AS email
642 FROM groupex.evenements_participants AS p
643 INNER JOIN groupex.membres AS m USING(uid)
ab02e9bc 644 LEFT JOIN groupex.evenements_participants AS p2 ON (p2.uid = m.uid AND p2.eid = p.eid
ab9fe2c9 645 AND p2.nb != 0)
61664f8b 646 LEFT JOIN auth_user_md5 AS u ON (u.user_id = m.uid)
647 LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie')
ab9fe2c9 648 WHERE p.eid = {?} AND p2.eid IS NULL
ab02e9bc 649 " . (Env::v('initiale') ? " AND IF(u.nom IS NULL, m.nom,
650 IF(u.nom_usage<>'', u.nom_usage, u.nom)) LIKE '" . Env::v('initiale') . "%'"
651 : "") . "
ab9fe2c9 652 GROUP BY m.uid
ab02e9bc 653 ORDER BY nom, prenom, promo", $evt['eid']);
654
655 $ofs = Env::i('offset');
656 $tot = (Env::v('initiale') ? $tot : $nb_tot) - $absents->total();
657 $nbp = intval(($tot-1)/NB_PER_PAGE);
658 $links = array();
659 if ($ofs) {
660 $links['précédent'] = $ofs-1;
661 }
662 for ($i = 0; $i <= $nbp; $i++) {
663 $links[(string)($i+1)] = $i;
664 }
665 if ($ofs < $nbp) {
666 $links['suivant'] = $ofs+1;
667 }
668 if (count($links)>1) {
669 $page->assign('links', $links);
670 }
671
61664f8b 672
673 $page->assign('absents', $absents);
ab02e9bc 674 $page->assign('participants',
ed21e24a 675 get_event_participants($evt, $item_id, $tri,
676 "LIMIT ".($ofs*NB_PER_PAGE).", ".NB_PER_PAGE));
bd46a8e4 677 }
4f10a058 678}
679
a7de4ef7 680// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
4f10a058 681?>