Merge commit 'origin/fusionax' into account
[platal.git] / modules / xnetevents.php
CommitLineData
4f10a058 1<?php
2/***************************************************************************
8d84c630 3 * Copyright (C) 2003-2009 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);
07eb5b0e
FB
119 $evenements = XDB::iterator('SELECT e.*, LEFT(10, e.debut) AS first_day, LEFT(10, e.fin) AS last_day,
120 IF(e.deadline_inscription,
121 e.deadline_inscription >= LEFT(NOW(), 10),
122 1) AS inscr_open,
123 e.deadline_inscription,
124 MAX(ep.nb) IS NOT NULL AS inscrit, MAX(ep.paid) AS paid
125 FROM groupex.evenements AS e
126 LEFT JOIN groupex.evenements_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?})
127 WHERE asso_id = {?} AND archive = {?}
128 GROUP BY e.eid
129 ORDER BY inscr_open DESC, debut DESC',
130 S::i('uid'), $globals->asso('id'), $archive ? 1 : 0);
4f10a058 131
132 $evts = array();
fbfc01a1 133 $undisplayed_events = 0;
20c5c7e6 134 $this->load('xnetevents.inc.php');
d6d580ec 135
4f10a058 136 while ($e = $evenements->next()) {
fbfc01a1
SJ
137 if (!is_member() && !may_update() && !$e['accept_nonmembre']) {
138 $undisplayed_events ++;
139 continue;
140 }
141
3cabafae 142 $e['show_participants'] = ($e['show_participants'] && (is_member() || may_update()));
07eb5b0e
FB
143 $e['moments'] = XDB::fetchAllAssoc('SELECT titre, details, montant, ei.item_id, nb, ep.paid
144 FROM groupex.evenements_items AS ei
145 LEFT JOIN groupex.evenements_participants AS ep
146 ON (ep.eid = ei.eid AND ep.item_id = ei.item_id AND ep.uid = {?})
147 WHERE ei.eid = {?}',
148 S::i('uid'), $e['eid']);
d6d580ec 149
150 $e['topay'] = 0;
98a7e9dc 151 $e['paid'] = $e['moments'][0]['paid'];
d6d580ec 152 foreach ($e['moments'] as $m) {
153 $e['topay'] += $m['nb'] * $m['montant'];
154 }
155
08cce2ff 156 $query = XDB::query(
4f10a058 157 "SELECT montant
158 FROM {$globals->money->mpay_tprefix}transactions AS t
cab08090 159 WHERE ref = {?} AND uid = {?}", $e['paiement_id'], S::v('uid'));
4f10a058 160 $montants = $query->fetchColumn();
d6d580ec 161
4f10a058 162 foreach ($montants as $m) {
d6d580ec 163 $p = strtr(substr($m, 0, strpos($m, 'EUR')), ',', '.');
4f10a058 164 $e['paid'] += trim($p);
165 }
d6d580ec 166
20c5c7e6
SJ
167 make_event_date($e);
168
1f5b0b59 169 if (Env::has('updated') && $e['eid'] == Env::i('updated')) {
170 $page->assign('updated', $e);
171 }
4f10a058 172 $evts[] = $e;
173 }
ab02e9bc 174
4f10a058 175 $page->assign('evenements', $evts);
fbfc01a1 176 $page->assign('undisplayed_events', $undisplayed_events);
4f10a058 177 }
178
d6d580ec 179 function handler_sub(&$page, $eid = null)
180 {
460d8f55 181 $this->load('xnetevents.inc.php');
1490093c 182 $page->changeTpl('xnetevents/subscribe.tpl');
d6d580ec 183
184 $evt = get_event_detail($eid);
df1cf596 185 if (is_null($evt)) {
d6d580ec 186 return PL_NOT_FOUND;
187 }
df1cf596
FB
188 if ($evt === false) {
189 global $globals, $platal;
190 $url = $globals->asso('sub_url');
191 if (empty($url)) {
192 $url = $platal->ns . 'subscribe';
193 }
194 $page->kill('Cet événement est reservé aux membres du groupe ' . $globals->asso('nom') .
195 '. Pour devenir membre, rends-toi sur la page de <a href="' . $url . '">demande d\'inscripton</a>.');
196 }
d6d580ec 197
198 if (!$evt['inscr_open']) {
a7de4ef7 199 $page->kill('Les inscriptions pour cet événement sont closes');
d6d580ec 200 }
3cabafae 201 if (!$evt['accept_nonmembre'] && !is_member() && !may_update()) {
a7de4ef7 202 $page->kill('Cet événement est fermé aux non-membres du groupe');
3cabafae 203 }
d6d580ec 204
2ac0bcee
FB
205 global $globals;
206 $res = XDB::query("SELECT stamp FROM requests
207 WHERE type = 'paiements' AND data LIKE {?}",
208 PayReq::same_event($evt['eid'], $globals->asso('id')));
209 $page->assign('validation', $res->numRows());
d6d580ec 210 $page->assign('event', $evt);
211
212 if (!Post::has('submit')) {
213 return;
4fcbb455
VZ
214 } else {
215 S::assert_xsrf_token();
d6d580ec 216 }
217
5e2307dc 218 $moments = Post::v('moment', array());
219 $pers = Post::v('personnes', array());
d6d580ec 220 $subs = array();
221
222 foreach ($moments as $j => $v) {
223 $subs[$j] = intval($v);
224
225 // retreive ohter field when more than one person
226 if ($subs[$j] == 2) {
227 if (!isset($pers[$j]) || !is_numeric($pers[$j])
228 || $pers[$j] < 0)
229 {
a7d35093 230 $page->trigError('Tu dois choisir un nombre d\'invités correct !');
d6d580ec 231 return;
232 }
233 $subs[$j] = 1 + $pers[$j];
234 }
235 }
236
237 // impossible to unsubscribe if you already paid sthing
98a7e9dc 238 if (!array_sum($subs) && $evt['paid'] != 0) {
a7d35093
FB
239 $page->trigError("Impossible de te désinscrire complètement ".
240 "parce que tu as fait un paiement par ".
241 "chèque ou par liquide. Contacte un ".
242 "administrateur du groupe si tu es sûr de ".
243 "ne pas venir");
d6d580ec 244 return;
245 }
246
247 // update actual inscriptions
1f5b0b59 248 $updated = false;
9193e8f7 249 $total = 0;
30138a46 250 $paid = $evt['paid'] ? $evt['paid'] : 0;
8bac35d8 251 $telepaid= $evt['telepaid'] ? $evt['telepaid'] : 0;
d6d580ec 252 foreach ($subs as $j => $nb) {
9193e8f7 253 if ($nb >= 0) {
08cce2ff 254 XDB::execute(
d6d580ec 255 "REPLACE INTO groupex.evenements_participants
2ac0bcee 256 VALUES ({?}, {?}, {?}, {?}, {?}, {?})",
8bac35d8
FB
257 $eid, S::v('uid'), $j, $nb, Env::has('notify_payment') ? 'notify_payment' : '',
258 $j == 1 ? $paid - $telepaid : 0);
1f5b0b59 259 $updated = $eid;
d6d580ec 260 } else {
08cce2ff 261 XDB::execute(
d6d580ec 262 "DELETE FROM groupex.evenements_participants
263 WHERE eid = {?} AND uid = {?} AND item_id = {?}",
2847640f 264 $eid, S::v("uid"), $j);
1f5b0b59 265 $updated = $eid;
d6d580ec 266 }
9193e8f7 267 $total += $nb;
d6d580ec 268 }
9193e8f7 269 if ($updated !== false) {
6aac1d08 270 $page->trigSuccess('Ton inscription à l\'événement a été mise à jour avec succès.');
9193e8f7 271 subscribe_lists_event($total, S::i('uid'), $evt);
1f5b0b59 272 }
d6d580ec 273 $page->assign('event', get_event_detail($eid));
274 }
275
4f10a058 276 function handler_csv(&$page, $eid = null, $item_id = null)
277 {
460d8f55 278 $this->load('xnetevents.inc.php');
4f10a058 279
bd46a8e4 280 if (!is_numeric($item_id)) {
281 $item_id = null;
282 }
283
4f10a058 284 $evt = get_event_detail($eid, $item_id);
285 if (!$evt) {
286 return PL_NOT_FOUND;
287 }
288
493b6abe 289 header('Content-type: text/x-csv; encoding=UTF-8');
4f10a058 290 header('Pragma: ');
291 header('Cache-Control: ');
292
801fcad8 293 $page->changeTpl('xnetevents/csv.tpl', NO_SKIN);
4f10a058 294
295 $admin = may_update();
296
07eb5b0e 297 $tri = (Env::v('order') == 'alpha' ? UserFilter::sortByPromo() : UserFilter::sortByName());
4f10a058 298
ed21e24a 299 $page->assign('participants',
300 get_event_participants($evt, $item_id, $tri));
4f10a058 301
4f10a058 302 $page->assign('admin', $admin);
303 $page->assign('moments', $evt['moments']);
304 $page->assign('money', $evt['money']);
478f7c3a 305 $page->assign('telepayment', $evt['paiement_id']);
5e2307dc 306 $page->assign('tout', !Env::v('item_id', false));
4f10a058 307 }
bd46a8e4 308
11d8a183 309 function handler_ical(&$page, $eid = null)
310 {
311 global $globals;
312
460d8f55 313 $this->load('xnetevents.inc.php');
11d8a183 314 $evt = get_event_detail($eid);
315 if (!$evt) {
73fdb1e8 316 return PL_FORBIDDEN;
11d8a183 317 }
318 $evt['debut'] = preg_replace('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', "\\1\\2\\3T\\4\\5\\6", $evt['debut']);
319 $evt['fin'] = preg_replace('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', "\\1\\2\\3T\\4\\5\\6", $evt['fin']);
320
99544d53 321 foreach ($evt['moments'] as $m) {
322 $evt['descriptif'] .= "\n\n** " . $m['titre'] . " **\n" . $m['details'];
323 }
324
11d8a183 325 $page->changeTpl('xnetevents/calendar.tpl', NO_SKIN);
326
99544d53 327 require_once('ical.inc.php');
11d8a183 328 $page->assign('asso', $globals->asso());
329 $page->assign('timestamp', time());
99544d53 330 $page->assign('admin', may_update());
331
332 if (may_update()) {
07eb5b0e 333 $page->assign('participants', get_event_participants($evt, null, UserFilter::sortByPromo()));
99544d53 334 }
11d8a183 335 $page->register_function('display_ical', 'display_ical');
336 $page->assign_by_ref('e', $evt);
ab02e9bc 337
11d8a183 338 header('Content-Type: text/calendar; charset=utf-8');
339 }
340
bd46a8e4 341 function handler_edit(&$page, $eid = null)
342 {
343 global $globals;
344
5cbb1fad 345 // get eid if the the given one is a short name
346 if (!is_null($eid) && !is_numeric($eid)) {
347 $res = XDB::query("SELECT eid
348 FROM groupex.evenements
349 WHERE asso_id = {?} AND short_name = {?}",
350 $globals->asso('id'), $eid);
351 if ($res->numRows()) {
352 $eid = (int)$res->fetchOneCell();
353 }
354 }
355
5070a22d 356 // check the event is in our group
bd46a8e4 357 if (!is_null($eid)) {
73fdb1e8 358 $res = XDB::query("SELECT short_name
5cbb1fad 359 FROM groupex.evenements
73fdb1e8 360 WHERE eid = {?} AND asso_id = {?}",
361 $eid, $globals->asso('id'));
362 if ($res->numRows()) {
363 $infos = $res->fetchOneAssoc();
364 } else {
365 return PL_FORBIDDEN;
bd46a8e4 366 }
367 }
368
1490093c 369 $page->changeTpl('xnetevents/edit.tpl');
bd46a8e4 370
58d0edab 371 $moments = range(1, 4);
f56e5e53 372 $error = false;
5070a22d 373 $page->assign('moments', $moments);
bd46a8e4 374
5e2307dc 375 if (Post::v('intitule')) {
4fcbb455
VZ
376 S::assert_xsrf_token();
377
460d8f55 378 $this->load('xnetevents.inc.php');
2847640f
VZ
379 $short_name = event_change_shortname($page, $eid,
380 $infos['short_name'],
5e2307dc 381 Env::v('short_name', ''));
f56e5e53 382 if ($short_name != Env::v('short_name')) {
383 $error = true;
384 }
5070a22d 385 $evt = array(
386 'eid' => $eid,
387 'asso_id' => $globals->asso('id'),
5e2307dc 388 'paiement_id' => Post::v('paiement_id') > 0 ? Post::v('paiement_id') : null,
389 'debut' => Post::v('deb_Year').'-'.Post::v('deb_Month')
390 .'-'.Post::v('deb_Day').' '.Post::v('deb_Hour')
391 .':'.Post::v('deb_Minute').':00',
392 'fin' => Post::v('fin_Year').'-'.Post::v('fin_Month')
393 .'-'.Post::v('fin_Day').' '.Post::v('fin_Hour')
394 .':'.Post::v('fin_Minute').':00',
f56e5e53 395 'short_name' => $short_name,
5070a22d 396 );
397
398 $trivial = array('intitule', 'descriptif', 'noinvite',
25412aa4 399 'show_participants', 'accept_nonmembre', 'organisateur_uid');
5070a22d 400 foreach ($trivial as $k) {
5e2307dc 401 $evt[$k] = Post::v($k);
bd46a8e4 402 }
25412aa4 403 if (!$eid) {
404 $evt['organisateur_uid'] = S::v('uid');
405 }
bd46a8e4 406
5e2307dc 407 if (Post::v('deadline')) {
408 $evt['deadline_inscription'] = Post::v('inscr_Year').'-'
409 . Post::v('inscr_Month').'-'
410 . Post::v('inscr_Day');
5070a22d 411 } else {
412 $evt['deadline_inscription'] = null;
9ece1588 413 }
bd46a8e4 414
415 // Store the modifications in the database
08cce2ff 416 XDB::execute('REPLACE INTO groupex.evenements
bd46a8e4 417 SET eid={?}, asso_id={?}, organisateur_uid={?}, intitule={?},
5070a22d 418 paiement_id = {?}, descriptif = {?}, debut = {?},
419 fin = {?}, show_participants = {?}, short_name = {?},
3cabafae 420 deadline_inscription = {?}, noinvite = {?},
421 accept_nonmembre = {?}',
5070a22d 422 $evt['eid'], $evt['asso_id'], $evt['organisateur_uid'],
423 $evt['intitule'], $evt['paiement_id'], $evt['descriptif'],
424 $evt['debut'], $evt['fin'], $evt['show_participants'],
425 $evt['short_name'], $evt['deadline_inscription'],
3cabafae 426 $evt['noinvite'], $evt['accept_nonmembre']);
bd46a8e4 427
428 // if new event, get its id
429 if (!$eid) {
8b83a166 430 $eid = XDB::insertId();
bd46a8e4 431 }
432
5070a22d 433 $nb_moments = 0;
bd46a8e4 434 $money_defaut = 0;
435
436 foreach ($moments as $i) {
5e2307dc 437 if (Post::v('titre'.$i)) {
bd46a8e4 438 $nb_moments++;
5070a22d 439
5e2307dc 440 $montant = strtr(Post::v('montant'.$i), ',', '.');
5070a22d 441 $money_defaut += (float)$montant;
08cce2ff 442 XDB::execute("
bd46a8e4 443 REPLACE INTO groupex.evenements_items
444 VALUES ({?}, {?}, {?}, {?}, {?})",
5e2307dc 445 $eid, $i, Post::v('titre'.$i),
446 Post::v('details'.$i), $montant);
bd46a8e4 447 } else {
ab02e9bc 448 XDB::execute("DELETE FROM groupex.evenements_items
bd46a8e4 449 WHERE eid = {?} AND item_id = {?}", $eid, $i);
450 }
451 }
bd46a8e4 452 // request for a new payment
5e2307dc 453 if (Post::v('paiement_id') == -1 && $money_defaut >= 0) {
bd46a8e4 454 require_once 'validations.inc.php';
5daf68f6 455 $p = new PayReq(S::user(),
5e2307dc 456 Post::v('intitule')." - ".$globals->asso('nom'),
457 Post::v('site'), $money_defaut,
458 Post::v('confirmation'), 0, 999,
bd46a8e4 459 $globals->asso('id'), $eid);
20934085 460 if ($p->accept()) {
461 $p->submit();
462 } else {
463 $page->assign('paiement_message', Post::v('confirmation'));
464 $page->assign('paiement_site', Post::v('site'));
465 $error = true;
466 }
bd46a8e4 467 }
468
469 // events with no sub-event: add a sub-event with no name
470 if ($nb_moments == 0) {
08cce2ff 471 XDB::execute("INSERT INTO groupex.evenements_items
20934085 472 VALUES ({?}, {?}, '', '', 0)", $eid, 1);
bd46a8e4 473 }
bd46a8e4 474
f56e5e53 475 if (!$error) {
58d0edab 476 pl_redirect('events');
477 }
bd46a8e4 478 }
479
480 // get a list of all the payment for this asso
08cce2ff 481 $res = XDB::iterator("SELECT id, text
5cbb1fad 482 FROM {$globals->money->mpay_tprefix}paiements
483 WHERE asso_id = {?}", $globals->asso('id'));
bd46a8e4 484 $paiements = array();
485 while ($a = $res->next()) $paiements[$a['id']] = $a['text']; {
486 $page->assign('paiements', $paiements);
487 }
488
489 // when modifying an old event retreive the old datas
490 if ($eid) {
08cce2ff 491 $res = XDB::query(
25412aa4 492 "SELECT eid, intitule, descriptif, debut, fin, organisateur_uid,
493 show_participants, paiement_id, short_name,
494 deadline_inscription, noinvite, accept_nonmembre
bd46a8e4 495 FROM groupex.evenements
496 WHERE eid = {?}", $eid);
497 $evt = $res->fetchOneAssoc();
498 // find out if there is already a request for a payment for this event
499 require_once 'validations.inc.php';
08cce2ff 500 $res = XDB::query("SELECT stamp FROM requests
5cbb1fad 501 WHERE type = 'paiements' AND data LIKE {?}",
502 PayReq::same_event($eid, $globals->asso('id')));
bd46a8e4 503 $stamp = $res->fetchOneCell();
504 if ($stamp) {
f56e5e53 505 $evt['paiement_id'] = -2;
bd46a8e4 506 $evt['paiement_req'] = $stamp;
507 }
508 $page->assign('evt', $evt);
509 // get all the different moments infos
08cce2ff 510 $res = XDB::iterator(
bd46a8e4 511 "SELECT item_id, titre, details, montant
512 FROM groupex.evenements_items AS ei
513 INNER JOIN groupex.evenements AS e ON(e.eid = ei.eid)
514 WHERE e.eid = {?}
515 ORDER BY item_id", $eid);
516 $items = array();
517 while ($item = $res->next()) {
518 $items[$item['item_id']] = $item;
519 }
520 $page->assign('items', $items);
521 }
5cbb1fad 522 $page->assign('url_ref', $eid);
bd46a8e4 523 }
524
525 function handler_admin(&$page, $eid = null, $item_id = null)
526 {
527 global $globals;
528
460d8f55 529 $this->load('xnetevents.inc.php');
bd46a8e4 530
531 $evt = get_event_detail($eid, $item_id);
bd46a8e4 532 if (!$evt) {
533 return PL_NOT_FOUND;
534 }
535
1490093c 536 $page->changeTpl('xnetevents/admin.tpl');
537 if (!$evt['show_participants'] && !may_update()) {
538 return PL_FORBIDDEN;
bd46a8e4 539 }
540
5e2307dc 541 if (may_update() && Post::v('adm')) {
4fcbb455
VZ
542 S::assert_xsrf_token();
543
5e2307dc 544 $member = get_infos(Post::v('mail'));
ed21e24a 545 if (!$member) {
a7d35093 546 $page->trigError("Membre introuvable");
bd46a8e4 547 }
bd46a8e4 548
ed21e24a 549 // change the price paid by a participant
5e2307dc 550 if (Env::v('adm') == 'prix' && $member) {
08cce2ff 551 XDB::execute("UPDATE groupex.evenements_participants
dc2073c3 552 SET paid = IF(paid + {?} > 0, paid + {?}, 0)
4e4b828b 553 WHERE uid = {?} AND eid = {?} AND item_id = 1",
5e2307dc 554 strtr(Env::v('montant'), ',', '.'),
555 strtr(Env::v('montant'), ',', '.'),
dc2073c3 556 $member['uid'], $evt['eid']);
ed21e24a 557 }
bd46a8e4 558
ed21e24a 559 // change the number of personns coming with a participant
5e2307dc 560 if (Env::v('adm') == 'nbs' && $member) {
08cce2ff 561 $res = XDB::query("SELECT paid
dc2073c3 562 FROM groupex.evenements_participants
563 WHERE uid = {?} AND eid = {?}",
564 $member['uid'], $evt['eid']);
ed21e24a 565
566 $paid = intval($res->fetchOneCell());
5e2307dc 567 $nbs = Post::v('nb', array());
ed21e24a 568
569 foreach ($nbs as $id => $nb) {
5070a22d 570 $nb = max(intval($nb), 0);
fd282ae1 571 XDB::execute("REPLACE INTO groupex.evenements_participants
2ac0bcee 572 VALUES ({?}, {?}, {?}, {?}, {?}, {?})",
d6e94d43 573 $evt['eid'], $member['uid'], $id, $nb, '', $id == 1 ? $paid : 0);
bd46a8e4 574 }
ed21e24a 575
9193e8f7 576 $res = XDB::query("SELECT COUNT(uid) AS cnt, SUM(nb) AS nb
dc2073c3 577 FROM groupex.evenements_participants
9193e8f7 578 WHERE uid = {?} AND eid = {?}
579 GROUP BY uid",
dc2073c3 580 $member['uid'], $evt['eid']);
9193e8f7 581 $u = $res->fetchOneAssoc();
2847640f 582 $u = $u['cnt'] ? $u['nb'] : null;
ed21e24a 583 subscribe_lists_event($u, $member['uid'], $evt);
bd46a8e4 584 }
ed21e24a 585
bd46a8e4 586 $evt = get_event_detail($eid, $item_id);
587 }
588
e01ebe65 589 $page->assign_by_ref('evt', $evt);
1f3362a3 590 $page->assign('tout', is_null($item_id));
bd46a8e4 591
ed21e24a 592 if (count($evt['moments'])) {
593 $page->assign('moments', $evt['moments']);
594 }
bd46a8e4 595
07eb5b0e 596 $page->assign('alphabet', array());
bd46a8e4 597 if ($evt['paiement_id']) {
07eb5b0e
FB
598 $infos = User::getBulkUsersWithUIDs(
599 XDB::fetchAllAssoc('SELECT t.uid, t.montant
600 FROM ' . $globals->money->mpay_tprefix . 'transactions AS t
601 LEFT JOIN groupex.evenements_participants AS ep ON(ep.uid = t.uid AND ep.eid = {?})
602 WHERE t.ref = {?} AND ep.uid IS NULL',
603 $evt['eid'], $evt['paiement_id']),
604 'uid', 'user');
605 $page->assign('oublis', count($infos));
606 $page->assign('oubliinscription', $infos);
607 }
608
609 $absents = User::getBulkUsersFromDB('SELECT p.uid
610 FROM groupex.evenements_participants AS p
611 LEFT JOIN groupex.evenements_participants AS p2 ON (p2.uid = p.uid
612 AND p2.eid = p.eid
613 AND p2.nb != 0)
614 WHERE p.eid = {?} AND p2.eid IS NULL
615 GROUP BY p.uid', $evt['eid']);
ab02e9bc 616
617 $ofs = Env::i('offset');
037b02c8
FB
618 $tot = (Env::v('initiale') ? $tot : $nb_tot);
619 $nbp = ceil($tot / NB_PER_PAGE);
620 if ($nbp > 1) {
621 $links = array();
622 if ($ofs) {
623 $links['précédent'] = $ofs - 1;
624 }
625 for ($i = 1 ; $i <= $nbp; $i++) {
626 $links[(string)$i] = $i - 1;
627 }
628 if ($ofs < $nbp) {
629 $links['suivant'] = $ofs+1;
630 }
ab02e9bc 631 $page->assign('links', $links);
632 }
633
61664f8b 634 $page->assign('absents', $absents);
ab02e9bc 635 $page->assign('participants',
07eb5b0e
FB
636 get_event_participants($evt, $item_id, UserFilter::sortByName(),
637 NB_PER_PAGE, $ofs * NB_PER_PAGE));
bd46a8e4 638 }
4f10a058 639}
640
a7de4ef7 641// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
4f10a058 642?>