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