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