On X.net, sitename is 'Polytechnique.net'.
[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) {
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
5e2307dc 297 $tri = (Env::v('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
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()) {
333 $page->assign('participants', get_event_participants($evt, null, 'promo, nom, prenom'));
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
5e2307dc 596 $tri = (Env::v('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
1f3362a3 597 $whereitemid = is_null($item_id) ? '' : "AND ep.item_id = $item_id";
08cce2ff 598 $res = XDB::iterRow(
ed21e24a 599 'SELECT UPPER(SUBSTRING(IF(u.nom IS NULL, m.nom,
600 IF(u.nom_usage<>"", u.nom_usage, u.nom)), 1, 1)),
601 COUNT(DISTINCT ep.uid)
bd46a8e4 602 FROM groupex.evenements_participants AS ep
603 INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
604 LEFT JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
605 LEFT JOIN auth_user_md5 AS u ON ( u.user_id = ep.uid )
ab02e9bc 606 WHERE ep.eid = {?} '.$whereitemid . '
dc2073c3 607 GROUP BY UPPER(SUBSTRING(IF(u.nom IS NULL,m.nom,u.nom), 1, 1))', $evt['eid']);
bd46a8e4 608
609 $alphabet = array();
610 $nb_tot = 0;
611 while (list($char, $nb) = $res->next()) {
612 $alphabet[ord($char)] = $char;
613 $nb_tot += $nb;
5e2307dc 614 if (Env::has('initiale') && $char == strtoupper(Env::v('initiale'))) {
bd46a8e4 615 $tot = $nb;
616 }
617 }
618 ksort($alphabet);
619 $page->assign('alphabet', $alphabet);
620
bd46a8e4 621 if ($evt['paiement_id']) {
08cce2ff 622 $res = XDB::iterator(
bd46a8e4 623 "SELECT IF(u.nom_usage<>'', u.nom_usage, u.nom) AS nom, u.prenom,
624 u.promo, a.alias AS email, t.montant
625 FROM {$globals->money->mpay_tprefix}transactions AS t
dc2073c3 626 INNER JOIN auth_user_md5 AS u ON(t.uid = u.user_id)
627 INNER JOIN aliases AS a ON (a.id = t.uid AND a.type='a_vie' )
628 LEFT JOIN groupex.evenements_participants AS ep ON(ep.uid = t.uid AND ep.eid = {?})
bd46a8e4 629 WHERE t.ref = {?} AND ep.uid IS NULL",
630 $evt['eid'], $evt['paiement_id']);
ed21e24a 631 $page->assign('oublis', $res->total());
632 $page->assign('oubliinscription', $res);
bd46a8e4 633 }
634
61664f8b 635 $absents = XDB::iterator("SELECT p.uid,
636 IF(m.origine = 'X', IF(u.nom_usage != '', u.nom_usage, u.nom), m.nom) AS nom,
637 IF(m.origine = 'X', u.prenom, u.prenom) AS prenom,
638 IF(m.origine = 'X', u.promo, m.origine) AS promo,
639 IF(m.origine = 'X', FIND_IN_SET('femme', u.flags), m.sexe) AS sexe,
640 IF(m.origine = 'X', a.alias, m.email) AS email
641 FROM groupex.evenements_participants AS p
642 INNER JOIN groupex.membres AS m USING(uid)
ab02e9bc 643 LEFT JOIN groupex.evenements_participants AS p2 ON (p2.uid = m.uid AND p2.eid = p.eid
ab9fe2c9 644 AND p2.nb != 0)
61664f8b 645 LEFT JOIN auth_user_md5 AS u ON (u.user_id = m.uid)
646 LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie')
ab9fe2c9 647 WHERE p.eid = {?} AND p2.eid IS NULL
ab02e9bc 648 " . (Env::v('initiale') ? " AND IF(u.nom IS NULL, m.nom,
649 IF(u.nom_usage<>'', u.nom_usage, u.nom)) LIKE '" . Env::v('initiale') . "%'"
650 : "") . "
ab9fe2c9 651 GROUP BY m.uid
ab02e9bc 652 ORDER BY nom, prenom, promo", $evt['eid']);
653
654 $ofs = Env::i('offset');
655 $tot = (Env::v('initiale') ? $tot : $nb_tot) - $absents->total();
656 $nbp = intval(($tot-1)/NB_PER_PAGE);
657 $links = array();
658 if ($ofs) {
659 $links['précédent'] = $ofs-1;
660 }
661 for ($i = 0; $i <= $nbp; $i++) {
662 $links[(string)($i+1)] = $i;
663 }
664 if ($ofs < $nbp) {
665 $links['suivant'] = $ofs+1;
666 }
667 if (count($links)>1) {
668 $page->assign('links', $links);
669 }
670
61664f8b 671
672 $page->assign('absents', $absents);
ab02e9bc 673 $page->assign('participants',
ed21e24a 674 get_event_participants($evt, $item_id, $tri,
675 "LIMIT ".($ofs*NB_PER_PAGE).", ".NB_PER_PAGE));
bd46a8e4 676 }
4f10a058 677}
678
a7de4ef7 679// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
4f10a058 680?>