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