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