3910dbcfb61f213f7d83a78b87ce1f701e125bdd
[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 . (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('telepayment', $evt['paiement_id']);
288 $page->assign('tout', !Env::v('item_id', false));
289 }
290
291 function handler_ical(&$page, $eid = null)
292 {
293 global $globals;
294
295 require_once dirname(__FILE__).'/xnetevents/xnetevents.inc.php';
296 $evt = get_event_detail($eid);
297 if (!$evt) {
298 return PL_FORBIDDEN;
299 }
300 $evt['debut'] = preg_replace('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', "\\1\\2\\3T\\4\\5\\6", $evt['debut']);
301 $evt['fin'] = preg_replace('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', "\\1\\2\\3T\\4\\5\\6", $evt['fin']);
302
303 foreach ($evt['moments'] as $m) {
304 $evt['descriptif'] .= "\n\n** " . $m['titre'] . " **\n" . $m['details'];
305 }
306
307 $page->changeTpl('xnetevents/calendar.tpl', NO_SKIN);
308
309 require_once('ical.inc.php');
310 $page->assign('asso', $globals->asso());
311 $page->assign('timestamp', time());
312 $page->assign('admin', may_update());
313
314 if (may_update()) {
315 $page->assign('participants', get_event_participants($evt, null, 'promo, nom, prenom'));
316 }
317 $page->register_function('display_ical', 'display_ical');
318 $page->assign_by_ref('e', $evt);
319
320 header('Content-Type: text/calendar; charset=utf-8');
321 }
322
323 function handler_edit(&$page, $eid = null)
324 {
325 global $globals;
326
327 // get eid if the the given one is a short name
328 if (!is_null($eid) && !is_numeric($eid)) {
329 $res = XDB::query("SELECT eid
330 FROM groupex.evenements
331 WHERE asso_id = {?} AND short_name = {?}",
332 $globals->asso('id'), $eid);
333 if ($res->numRows()) {
334 $eid = (int)$res->fetchOneCell();
335 }
336 }
337
338 // check the event is in our group
339 if (!is_null($eid)) {
340 $res = XDB::query("SELECT short_name
341 FROM groupex.evenements
342 WHERE eid = {?} AND asso_id = {?}",
343 $eid, $globals->asso('id'));
344 if ($res->numRows()) {
345 $infos = $res->fetchOneAssoc();
346 } else {
347 return PL_FORBIDDEN;
348 }
349 }
350
351 $page->changeTpl('xnetevents/edit.tpl');
352
353 $moments = range(1, 4);
354 $error = false;
355 $page->assign('moments', $moments);
356
357 if (Post::v('intitule')) {
358 require_once dirname(__FILE__).'/xnetevents/xnetevents.inc.php';
359 $short_name = event_change_shortname($page, $eid,
360 $infos['short_name'],
361 Env::v('short_name', ''));
362 if ($short_name != Env::v('short_name')) {
363 $error = true;
364 }
365 $evt = array(
366 'eid' => $eid,
367 'asso_id' => $globals->asso('id'),
368 'paiement_id' => Post::v('paiement_id') > 0 ? Post::v('paiement_id') : null,
369 'debut' => Post::v('deb_Year').'-'.Post::v('deb_Month')
370 .'-'.Post::v('deb_Day').' '.Post::v('deb_Hour')
371 .':'.Post::v('deb_Minute').':00',
372 'fin' => Post::v('fin_Year').'-'.Post::v('fin_Month')
373 .'-'.Post::v('fin_Day').' '.Post::v('fin_Hour')
374 .':'.Post::v('fin_Minute').':00',
375 'short_name' => $short_name,
376 );
377
378 $trivial = array('intitule', 'descriptif', 'noinvite',
379 'show_participants', 'accept_nonmembre', 'organisateur_uid');
380 foreach ($trivial as $k) {
381 $evt[$k] = Post::v($k);
382 }
383 if (!$eid) {
384 $evt['organisateur_uid'] = S::v('uid');
385 }
386
387 if (Post::v('deadline')) {
388 $evt['deadline_inscription'] = Post::v('inscr_Year').'-'
389 . Post::v('inscr_Month').'-'
390 . Post::v('inscr_Day');
391 } else {
392 $evt['deadline_inscription'] = null;
393 }
394
395 // Store the modifications in the database
396 XDB::execute('REPLACE INTO groupex.evenements
397 SET eid={?}, asso_id={?}, organisateur_uid={?}, intitule={?},
398 paiement_id = {?}, descriptif = {?}, debut = {?},
399 fin = {?}, show_participants = {?}, short_name = {?},
400 deadline_inscription = {?}, noinvite = {?},
401 accept_nonmembre = {?}',
402 $evt['eid'], $evt['asso_id'], $evt['organisateur_uid'],
403 $evt['intitule'], $evt['paiement_id'], $evt['descriptif'],
404 $evt['debut'], $evt['fin'], $evt['show_participants'],
405 $evt['short_name'], $evt['deadline_inscription'],
406 $evt['noinvite'], $evt['accept_nonmembre']);
407
408 // if new event, get its id
409 if (!$eid) {
410 $eid = XDB::insertId();
411 }
412
413 $nb_moments = 0;
414 $money_defaut = 0;
415
416 foreach ($moments as $i) {
417 if (Post::v('titre'.$i)) {
418 $nb_moments++;
419
420 $montant = strtr(Post::v('montant'.$i), ',', '.');
421 $money_defaut += (float)$montant;
422 XDB::execute("
423 REPLACE INTO groupex.evenements_items
424 VALUES ({?}, {?}, {?}, {?}, {?})",
425 $eid, $i, Post::v('titre'.$i),
426 Post::v('details'.$i), $montant);
427 } else {
428 XDB::execute("DELETE FROM groupex.evenements_items
429 WHERE eid = {?} AND item_id = {?}", $eid, $i);
430 }
431 }
432 // request for a new payment
433 if (Post::v('paiement_id') == -1 && $money_defaut >= 0) {
434 require_once 'validations.inc.php';
435 $p = new PayReq(S::v('uid'),
436 Post::v('intitule')." - ".$globals->asso('nom'),
437 Post::v('site'), $money_defaut,
438 Post::v('confirmation'), 0, 999,
439 $globals->asso('id'), $eid);
440 if ($p->accept()) {
441 $p->submit();
442 } else {
443 $page->assign('paiement_message', Post::v('confirmation'));
444 $page->assign('paiement_site', Post::v('site'));
445 $error = true;
446 }
447 }
448
449 // events with no sub-event: add a sub-event with no name
450 if ($nb_moments == 0) {
451 XDB::execute("INSERT INTO groupex.evenements_items
452 VALUES ({?}, {?}, '', '', 0)", $eid, 1);
453 }
454
455 if (!$error) {
456 pl_redirect('events');
457 }
458 }
459
460 // get a list of all the payment for this asso
461 $res = XDB::iterator("SELECT id, text
462 FROM {$globals->money->mpay_tprefix}paiements
463 WHERE asso_id = {?}", $globals->asso('id'));
464 $paiements = array();
465 while ($a = $res->next()) $paiements[$a['id']] = $a['text']; {
466 $page->assign('paiements', $paiements);
467 }
468
469 // when modifying an old event retreive the old datas
470 if ($eid) {
471 $res = XDB::query(
472 "SELECT eid, intitule, descriptif, debut, fin, organisateur_uid,
473 show_participants, paiement_id, short_name,
474 deadline_inscription, noinvite, accept_nonmembre
475 FROM groupex.evenements
476 WHERE eid = {?}", $eid);
477 $evt = $res->fetchOneAssoc();
478 // find out if there is already a request for a payment for this event
479 require_once 'validations.inc.php';
480 $res = XDB::query("SELECT stamp FROM requests
481 WHERE type = 'paiements' AND data LIKE {?}",
482 PayReq::same_event($eid, $globals->asso('id')));
483 $stamp = $res->fetchOneCell();
484 if ($stamp) {
485 $evt['paiement_id'] = -2;
486 $evt['paiement_req'] = $stamp;
487 }
488 $page->assign('evt', $evt);
489 // get all the different moments infos
490 $res = XDB::iterator(
491 "SELECT item_id, titre, details, montant
492 FROM groupex.evenements_items AS ei
493 INNER JOIN groupex.evenements AS e ON(e.eid = ei.eid)
494 WHERE e.eid = {?}
495 ORDER BY item_id", $eid);
496 $items = array();
497 while ($item = $res->next()) {
498 $items[$item['item_id']] = $item;
499 }
500 $page->assign('items', $items);
501 }
502 $page->assign('url_ref', $eid);
503 }
504
505 function handler_admin(&$page, $eid = null, $item_id = null)
506 {
507 global $globals;
508
509 require_once dirname(__FILE__).'/xnetevents/xnetevents.inc.php';
510
511 $evt = get_event_detail($eid, $item_id);
512 if (!$evt) {
513 return PL_NOT_FOUND;
514 }
515
516 $page->changeTpl('xnetevents/admin.tpl');
517 if (!$evt['show_participants'] && !may_update()) {
518 return PL_FORBIDDEN;
519 }
520
521 if (may_update() && Post::v('adm')) {
522 $member = get_infos(Post::v('mail'));
523 if (!$member) {
524 $page->trig("Membre introuvable");
525 }
526
527 // change the price paid by a participant
528 if (Env::v('adm') == 'prix' && $member) {
529 XDB::execute("UPDATE groupex.evenements_participants
530 SET paid = IF(paid + {?} > 0, paid + {?}, 0)
531 WHERE uid = {?} AND eid = {?} AND item_id = 1",
532 strtr(Env::v('montant'), ',', '.'),
533 strtr(Env::v('montant'), ',', '.'),
534 $member['uid'], $evt['eid']);
535 }
536
537 // change the number of personns coming with a participant
538 if (Env::v('adm') == 'nbs' && $member) {
539 $res = XDB::query("SELECT paid
540 FROM groupex.evenements_participants
541 WHERE uid = {?} AND eid = {?}",
542 $member['uid'], $evt['eid']);
543
544 $paid = intval($res->fetchOneCell());
545 $nbs = Post::v('nb', array());
546
547 foreach ($nbs as $id => $nb) {
548 $nb = max(intval($nb), 0);
549 XDB::execute("REPLACE INTO groupex.evenements_participants
550 VALUES ({?}, {?}, {?}, {?}, {?}, {?})",
551 $evt['eid'], $member['uid'], $id, $nb, '', $id == 1 ? $paid : 0);
552 }
553
554 $res = XDB::query("SELECT COUNT(uid) AS cnt, SUM(nb) AS nb
555 FROM groupex.evenements_participants
556 WHERE uid = {?} AND eid = {?}
557 GROUP BY uid",
558 $member['uid'], $evt['eid']);
559 $u = $res->fetchOneAssoc();
560 $u = $u['cnt'] ? $u['nb'] : null;
561 subscribe_lists_event($u, $member['uid'], $evt);
562 }
563
564 $evt = get_event_detail($eid, $item_id);
565 }
566
567 $page->assign_by_ref('evt', $evt);
568 $page->assign('tout', is_null($item_id));
569
570 if (count($evt['moments'])) {
571 $page->assign('moments', $evt['moments']);
572 }
573
574 $tri = (Env::v('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
575 $whereitemid = is_null($item_id) ? '' : "AND ep.item_id = $item_id";
576 $res = XDB::iterRow(
577 'SELECT UPPER(SUBSTRING(IF(u.nom IS NULL, m.nom,
578 IF(u.nom_usage<>"", u.nom_usage, u.nom)), 1, 1)),
579 COUNT(DISTINCT ep.uid)
580 FROM groupex.evenements_participants AS ep
581 INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
582 LEFT JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
583 LEFT JOIN auth_user_md5 AS u ON ( u.user_id = ep.uid )
584 WHERE ep.eid = {?} '.$whereitemid . '
585 GROUP BY UPPER(SUBSTRING(IF(u.nom IS NULL,m.nom,u.nom), 1, 1))', $evt['eid']);
586
587 $alphabet = array();
588 $nb_tot = 0;
589 while (list($char, $nb) = $res->next()) {
590 $alphabet[ord($char)] = $char;
591 $nb_tot += $nb;
592 if (Env::has('initiale') && $char == strtoupper(Env::v('initiale'))) {
593 $tot = $nb;
594 }
595 }
596 ksort($alphabet);
597 $page->assign('alphabet', $alphabet);
598
599 if ($evt['paiement_id']) {
600 $res = XDB::iterator(
601 "SELECT IF(u.nom_usage<>'', u.nom_usage, u.nom) AS nom, u.prenom,
602 u.promo, a.alias AS email, t.montant
603 FROM {$globals->money->mpay_tprefix}transactions AS t
604 INNER JOIN auth_user_md5 AS u ON(t.uid = u.user_id)
605 INNER JOIN aliases AS a ON (a.id = t.uid AND a.type='a_vie' )
606 LEFT JOIN groupex.evenements_participants AS ep ON(ep.uid = t.uid AND ep.eid = {?})
607 WHERE t.ref = {?} AND ep.uid IS NULL",
608 $evt['eid'], $evt['paiement_id']);
609 $page->assign('oublis', $res->total());
610 $page->assign('oubliinscription', $res);
611 }
612
613 $absents = XDB::iterator("SELECT p.uid,
614 IF(m.origine = 'X', IF(u.nom_usage != '', u.nom_usage, u.nom), m.nom) AS nom,
615 IF(m.origine = 'X', u.prenom, u.prenom) AS prenom,
616 IF(m.origine = 'X', u.promo, m.origine) AS promo,
617 IF(m.origine = 'X', FIND_IN_SET('femme', u.flags), m.sexe) AS sexe,
618 IF(m.origine = 'X', a.alias, m.email) AS email
619 FROM groupex.evenements_participants AS p
620 INNER JOIN groupex.membres AS m USING(uid)
621 LEFT JOIN groupex.evenements_participants AS p2 ON (p2.uid = m.uid AND p2.eid = p.eid
622 AND p2.nb != 0)
623 LEFT JOIN auth_user_md5 AS u ON (u.user_id = m.uid)
624 LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie')
625 WHERE p.eid = {?} AND p2.eid IS NULL
626 " . (Env::v('initiale') ? " AND IF(u.nom IS NULL, m.nom,
627 IF(u.nom_usage<>'', u.nom_usage, u.nom)) LIKE '" . Env::v('initiale') . "%'"
628 : "") . "
629 GROUP BY m.uid
630 ORDER BY nom, prenom, promo", $evt['eid']);
631
632 $ofs = Env::i('offset');
633 $tot = (Env::v('initiale') ? $tot : $nb_tot) - $absents->total();
634 $nbp = intval(($tot-1)/NB_PER_PAGE);
635 $links = array();
636 if ($ofs) {
637 $links['précédent'] = $ofs-1;
638 }
639 for ($i = 0; $i <= $nbp; $i++) {
640 $links[(string)($i+1)] = $i;
641 }
642 if ($ofs < $nbp) {
643 $links['suivant'] = $ofs+1;
644 }
645 if (count($links)>1) {
646 $page->assign('links', $links);
647 }
648
649
650 $page->assign('absents', $absents);
651 $page->assign('participants',
652 get_event_participants($evt, $item_id, $tri,
653 "LIMIT ".($ofs*NB_PER_PAGE).", ".NB_PER_PAGE));
654 }
655 }
656
657 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
658 ?>