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