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