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