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