Close #540: Profile of unregistered users redirects to the public marketing page
[platal.git] / modules / xnetevents.php
CommitLineData
4f10a058 1<?php
2/***************************************************************************
3 * Copyright (C) 2003-2006 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
ed21e24a 22define('NB_PER_PAGE', 25);
23
4f10a058 24class XnetEventsModule extends PLModule
25{
26 function handlers()
27 {
28 return array(
d1ebc57a 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),
11d8a183 32 '%grp/events/ical' => $this->make_hook('ical', AUTH_MDP),
d1ebc57a 33 '%grp/events/edit' => $this->make_hook('edit', AUTH_MDP),
34 '%grp/events/admin' => $this->make_hook('admin', AUTH_MDP),
4f10a058 35 );
36 }
37
f02eefd4 38 function handler_events(&$page, $archive = null)
4f10a058 39 {
40 global $globals;
41
f02eefd4 42 if ($archive == 'archive') {
43 $archive = true;
44 new_groupadmin_page('xnetevents/index.tpl');
45 } else {
46 $archive = false;
47 new_group_open_page('xnetevents/index.tpl');
48 }
4f10a058 49
f02eefd4 50 $action = null;
2b9e5fd3 51 if (Post::has('del')) {
f02eefd4 52 $action = 'del';
53 $eid = Post::v('del');
54 } elseif (Post::has('archive')) {
55 $action = 'archive';
56 $eid = Post::v('archive');
57 } elseif (Post::has('unarchive')) {
58 $action = 'unarchive';
59 $eid = Post::v('unarchive');
60 }
61
62 if (!is_null($action)) {
2b9e5fd3 63 if (!may_update()) {
64 return PL_NOT_ALLOWED;
65 }
66
08cce2ff 67 $res = XDB::query("SELECT asso_id, short_name FROM groupex.evenements
3cabafae 68 WHERE eid = {?} AND asso_id = {?}",
69 $eid, $globals->asso('id'));
2b9e5fd3 70
71 $tmp = $res->fetchOneRow();
72 if (!$tmp) {
73 return PL_NOT_ALLOWED;
74 }
f02eefd4 75 }
2b9e5fd3 76
f02eefd4 77 if ($action == 'del') {
2b9e5fd3 78 // deletes the event mailing aliases
79 if ($tmp[1]) {
08cce2ff 80 XDB::execute(
5070a22d 81 "DELETE FROM virtual WHERE type = 'evt' AND alias LIKE {?}",
82 $tmp[1].'-absents@%');
08cce2ff 83 XDB::execute(
5070a22d 84 "DELETE FROM virtual WHERE type = 'evt' AND alias LIKE {?}",
85 $tmp[1].'-participants@%');
2b9e5fd3 86 }
87
88 // deletes the event items
08cce2ff 89 XDB::execute("DELETE FROM groupex.evenements_items WHERE eid = {?}", $eid);
2b9e5fd3 90
91 // deletes the event participants
08cce2ff 92 XDB::execute("DELETE FROM groupex.evenements_participants
2b9e5fd3 93 WHERE eid = {?}", $eid);
94
95 // deletes the event
08cce2ff 96 XDB::execute("DELETE FROM groupex.evenements
2b9e5fd3 97 WHERE eid = {?} AND asso_id = {?}",
98 $eid, $globals->asso('id'));
99
100 // delete the requests for payments
101 require_once 'validations.inc.php';
08cce2ff 102 XDB::execute("DELETE FROM requests
2b9e5fd3 103 WHERE type = 'paiements' AND data LIKE {?}",
104 PayReq::same_event($eid, $globals->asso('id')));
105 }
106
f02eefd4 107 if ($action == 'archive') {
108 XDB::execute("UPDATE groupex.evenements
109 SET archive = 1
110 WHERE eid = {?} AND asso_id = {?}",
111 $eid, $globals->asso('id'));
112 }
113
114 if ($action == 'unarchive') {
115 XDB::execute("UPDATE groupex.evenements
116 SET archive = 0
117 WHERE eid = {?} AND asso_id = {?}",
118 $eid, $globals->asso('id'));
119 }
120
121 $page->assign('archive', $archive);
4f10a058 122 $page->assign('admin', may_update());
123
08cce2ff 124 $evenements = XDB::iterator(
d6d580ec 125 "SELECT e.*, LEFT(10, e.debut) AS debut_day, LEFT(10, e.fin) AS fin_day,
bd46a8e4 126 IF(e.deadline_inscription, e.deadline_inscription >= LEFT(NOW(), 10),
d6d580ec 127 1) AS inscr_open, e.deadline_inscription,
128 u.nom, u.prenom, u.promo, a.alias,
129 MAX(ep.nb) AS inscrit, MAX(ep.paid) AS paid
130 FROM groupex.evenements AS e
4f10a058 131 INNER JOIN x4dat.auth_user_md5 AS u ON u.user_id = e.organisateur_uid
d6d580ec 132 INNER JOIN x4dat.aliases AS a ON (a.type = 'a_vie' AND a.id = u.user_id)
4f10a058 133 LEFT JOIN groupex.evenements_participants AS ep ON (ep.eid = e.eid AND ep.uid = {?})
f02eefd4 134 WHERE asso_id = {?}
135 AND archive = " . ($archive ? "1 " : "0 ")
3cabafae 136 . (is_member() || may_update() ? "" : " AND accept_nonmembre != 0 ")
137 . "GROUP BY e.eid
cb24457f 138 ORDER BY inscr_open DESC, debut DESC", S::v('uid'), $globals->asso('id'));
4f10a058 139
140 $evts = array();
d6d580ec 141
4f10a058 142 while ($e = $evenements->next()) {
3cabafae 143 $e['show_participants'] = ($e['show_participants'] && (is_member() || may_update()));
08cce2ff 144 $res = XDB::query(
4f10a058 145 "SELECT titre, details, montant, ei.item_id, nb
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 = {?}",
cab08090 150 S::v('uid'), $e['eid']);
d6d580ec 151 $e['moments'] = $res->fetchAllAssoc();
152
153 $e['topay'] = 0;
154 foreach ($e['moments'] as $m) {
155 $e['topay'] += $m['nb'] * $m['montant'];
156 }
157
08cce2ff 158 $query = XDB::query(
4f10a058 159 "SELECT montant
160 FROM {$globals->money->mpay_tprefix}transactions AS t
cab08090 161 WHERE ref = {?} AND uid = {?}", $e['paiement_id'], S::v('uid'));
4f10a058 162 $montants = $query->fetchColumn();
d6d580ec 163
4f10a058 164 foreach ($montants as $m) {
d6d580ec 165 $p = strtr(substr($m, 0, strpos($m, 'EUR')), ',', '.');
4f10a058 166 $e['paid'] += trim($p);
167 }
d6d580ec 168
4f10a058 169 $evts[] = $e;
170 }
171
172 $page->assign('evenements', $evts);
173 $page->assign('is_member', is_member());
174 }
175
d6d580ec 176 function handler_sub(&$page, $eid = null)
177 {
352fb101 178 require_once dirname(__FILE__).'/xnetevents/xnetevents.inc.php';
d6d580ec 179
3cabafae 180 new_group_open_page('xnetevents/subscribe.tpl');
d6d580ec 181
182 $evt = get_event_detail($eid);
183 if (!$evt) {
184 return PL_NOT_FOUND;
185 }
186
187 if (!$evt['inscr_open']) {
188 $page->kill('Les inscriptions pour cet événement sont closes');
189 }
3cabafae 190 if (!$evt['accept_nonmembre'] && !is_member() && !may_update()) {
191 $page->kill('Cet événement est fermé aux non-membres du groupe');
192 }
d6d580ec 193
194 $page->assign('event', $evt);
195
196 if (!Post::has('submit')) {
197 return;
198 }
199
5e2307dc 200 $moments = Post::v('moment', array());
201 $pers = Post::v('personnes', array());
d6d580ec 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 foreach ($subs as $j => $nb) {
231 if ($nb > 0) {
08cce2ff 232 XDB::execute(
d6d580ec 233 "REPLACE INTO groupex.evenements_participants
234 VALUES ({?}, {?}, {?}, {?}, {?})",
cab08090 235 $eid, S::v('uid'), $j, $nb, $evt['paid']);
5070a22d 236 $page->assign('updated', true);
d6d580ec 237 } else {
08cce2ff 238 XDB::execute(
d6d580ec 239 "DELETE FROM groupex.evenements_participants
240 WHERE eid = {?} AND uid = {?} AND item_id = {?}",
cab08090 241 $eid, S::v("uid"), $j);
5070a22d 242 $page->assign('updated', true);
d6d580ec 243 }
244 }
245
246 $page->assign('event', get_event_detail($eid));
247 }
248
4f10a058 249 function handler_csv(&$page, $eid = null, $item_id = null)
250 {
352fb101 251 require_once dirname(__FILE__).'/xnetevents/xnetevents.inc.php';
4f10a058 252
bd46a8e4 253 if (!is_numeric($item_id)) {
254 $item_id = null;
255 }
256
4f10a058 257 $evt = get_event_detail($eid, $item_id);
258 if (!$evt) {
259 return PL_NOT_FOUND;
260 }
261
dba106f6 262 header('Content-type: text/x-csv; encoding=iso-8859-1');
4f10a058 263 header('Pragma: ');
264 header('Cache-Control: ');
265
801fcad8 266 $page->changeTpl('xnetevents/csv.tpl', NO_SKIN);
4f10a058 267
268 $admin = may_update();
269
5e2307dc 270 $tri = (Env::v('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
4f10a058 271
ed21e24a 272 $page->assign('participants',
273 get_event_participants($evt, $item_id, $tri));
4f10a058 274
4f10a058 275 $page->assign('admin', $admin);
276 $page->assign('moments', $evt['moments']);
277 $page->assign('money', $evt['money']);
5e2307dc 278 $page->assign('tout', !Env::v('item_id', false));
4f10a058 279 }
bd46a8e4 280
11d8a183 281 function handler_ical(&$page, $eid = null)
282 {
283 global $globals;
284
285 require_once dirname(__FILE__).'/xnetevents/xnetevents.inc.php';
286 $evt = get_event_detail($eid);
287 if (!$evt) {
288 return PL_NOT_FOUND;
289 }
290 $evt['debut'] = preg_replace('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', "\\1\\2\\3T\\4\\5\\6", $evt['debut']);
291 $evt['fin'] = preg_replace('/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/', "\\1\\2\\3T\\4\\5\\6", $evt['fin']);
292
99544d53 293 foreach ($evt['moments'] as $m) {
294 $evt['descriptif'] .= "\n\n** " . $m['titre'] . " **\n" . $m['details'];
295 }
296
11d8a183 297 $page->changeTpl('xnetevents/calendar.tpl', NO_SKIN);
298
99544d53 299 require_once('ical.inc.php');
11d8a183 300 $page->assign('asso', $globals->asso());
301 $page->assign('timestamp', time());
99544d53 302 $page->assign('admin', may_update());
303
304 if (may_update()) {
305 $page->assign('participants', get_event_participants($evt, null, 'promo, nom, prenom'));
306 }
11d8a183 307 $page->register_function('display_ical', 'display_ical');
308 $page->assign_by_ref('e', $evt);
309
310 header('Content-Type: text/calendar; charset=utf-8');
311 }
312
bd46a8e4 313 function handler_edit(&$page, $eid = null)
314 {
315 global $globals;
316
5cbb1fad 317 // get eid if the the given one is a short name
318 if (!is_null($eid) && !is_numeric($eid)) {
319 $res = XDB::query("SELECT eid
320 FROM groupex.evenements
321 WHERE asso_id = {?} AND short_name = {?}",
322 $globals->asso('id'), $eid);
323 if ($res->numRows()) {
324 $eid = (int)$res->fetchOneCell();
325 }
326 }
327
5070a22d 328 // check the event is in our group
bd46a8e4 329 if (!is_null($eid)) {
08cce2ff 330 $res = XDB::query("SELECT short_name, asso_id
5cbb1fad 331 FROM groupex.evenements
332 WHERE eid = {?}", $eid);
bd46a8e4 333 $infos = $res->fetchOneAssoc();
334 if ($infos['asso_id'] != $globals->asso('id')) {
335 return PL_NOT_ALLOWED;
336 }
337 }
338
5070a22d 339 new_groupadmin_page('xnetevents/edit.tpl');
bd46a8e4 340
5070a22d 341 $moments = range(1, 4);
342 $page->assign('moments', $moments);
bd46a8e4 343
5e2307dc 344 if (Post::v('intitule')) {
5070a22d 345 require_once dirname(__FILE__).'/xnetevents/xnetevents.inc.php';
346 $short_name = event_change_shortname($page, $infos['short_name'],
5e2307dc 347 Env::v('short_name', ''));
5070a22d 348
349 $evt = array(
350 'eid' => $eid,
351 'asso_id' => $globals->asso('id'),
5e2307dc 352 'paiement_id' => Post::v('paiement_id') > 0 ? Post::v('paiement_id') : null,
353 'debut' => Post::v('deb_Year').'-'.Post::v('deb_Month')
354 .'-'.Post::v('deb_Day').' '.Post::v('deb_Hour')
355 .':'.Post::v('deb_Minute').':00',
356 'fin' => Post::v('fin_Year').'-'.Post::v('fin_Month')
357 .'-'.Post::v('fin_Day').' '.Post::v('fin_Hour')
358 .':'.Post::v('fin_Minute').':00',
5070a22d 359 'short_name' => $short_name,
360 );
361
362 $trivial = array('intitule', 'descriptif', 'noinvite',
25412aa4 363 'show_participants', 'accept_nonmembre', 'organisateur_uid');
5070a22d 364 foreach ($trivial as $k) {
5e2307dc 365 $evt[$k] = Post::v($k);
bd46a8e4 366 }
25412aa4 367 if (!$eid) {
368 $evt['organisateur_uid'] = S::v('uid');
369 }
bd46a8e4 370
5e2307dc 371 if (Post::v('deadline')) {
372 $evt['deadline_inscription'] = Post::v('inscr_Year').'-'
373 . Post::v('inscr_Month').'-'
374 . Post::v('inscr_Day');
5070a22d 375 } else {
376 $evt['deadline_inscription'] = null;
9ece1588 377 }
bd46a8e4 378
379 // Store the modifications in the database
08cce2ff 380 XDB::execute('REPLACE INTO groupex.evenements
bd46a8e4 381 SET eid={?}, asso_id={?}, organisateur_uid={?}, intitule={?},
5070a22d 382 paiement_id = {?}, descriptif = {?}, debut = {?},
383 fin = {?}, show_participants = {?}, short_name = {?},
3cabafae 384 deadline_inscription = {?}, noinvite = {?},
385 accept_nonmembre = {?}',
5070a22d 386 $evt['eid'], $evt['asso_id'], $evt['organisateur_uid'],
387 $evt['intitule'], $evt['paiement_id'], $evt['descriptif'],
388 $evt['debut'], $evt['fin'], $evt['show_participants'],
389 $evt['short_name'], $evt['deadline_inscription'],
3cabafae 390 $evt['noinvite'], $evt['accept_nonmembre']);
bd46a8e4 391
392 // if new event, get its id
393 if (!$eid) {
5070a22d 394 $eid = mysql_insert_id();
bd46a8e4 395 }
396
5070a22d 397 $nb_moments = 0;
bd46a8e4 398 $money_defaut = 0;
399
400 foreach ($moments as $i) {
5e2307dc 401 if (Post::v('titre'.$i)) {
bd46a8e4 402 $nb_moments++;
5070a22d 403
5e2307dc 404 $montant = strtr(Post::v('montant'.$i), ',', '.');
5070a22d 405 $money_defaut += (float)$montant;
08cce2ff 406 XDB::execute("
bd46a8e4 407 REPLACE INTO groupex.evenements_items
408 VALUES ({?}, {?}, {?}, {?}, {?})",
5e2307dc 409 $eid, $i, Post::v('titre'.$i),
410 Post::v('details'.$i), $montant);
bd46a8e4 411 } else {
08cce2ff 412 XDB::execute("DELETE FROM groupex.evenements_items
bd46a8e4 413 WHERE eid = {?} AND item_id = {?}", $eid, $i);
414 }
415 }
416
417 // request for a new payment
5e2307dc 418 if (Post::v('paiement_id') == -1 && $money_defaut >= 0) {
bd46a8e4 419 require_once 'validations.inc.php';
cab08090 420 $p = new PayReq(S::v('uid'),
5e2307dc 421 Post::v('intitule')." - ".$globals->asso('nom'),
422 Post::v('site'), $money_defaut,
423 Post::v('confirmation'), 0, 999,
bd46a8e4 424 $globals->asso('id'), $eid);
425 $p->submit();
426 }
427
428 // events with no sub-event: add a sub-event with no name
429 if ($nb_moments == 0) {
08cce2ff 430 XDB::execute("INSERT INTO groupex.evenements_items
bd46a8e4 431 VALUES ({?}, {?}, '', '', 0)", $eid, 1);
432 }
bd46a8e4 433
14224ff0 434 pl_redirect('events');
bd46a8e4 435 }
436
437 // get a list of all the payment for this asso
08cce2ff 438 $res = XDB::iterator("SELECT id, text
5cbb1fad 439 FROM {$globals->money->mpay_tprefix}paiements
440 WHERE asso_id = {?}", $globals->asso('id'));
bd46a8e4 441 $paiements = array();
442 while ($a = $res->next()) $paiements[$a['id']] = $a['text']; {
443 $page->assign('paiements', $paiements);
444 }
445
446 // when modifying an old event retreive the old datas
447 if ($eid) {
08cce2ff 448 $res = XDB::query(
25412aa4 449 "SELECT eid, intitule, descriptif, debut, fin, organisateur_uid,
450 show_participants, paiement_id, short_name,
451 deadline_inscription, noinvite, accept_nonmembre
bd46a8e4 452 FROM groupex.evenements
453 WHERE eid = {?}", $eid);
454 $evt = $res->fetchOneAssoc();
455 // find out if there is already a request for a payment for this event
456 require_once 'validations.inc.php';
08cce2ff 457 $res = XDB::query("SELECT stamp FROM requests
5cbb1fad 458 WHERE type = 'paiements' AND data LIKE {?}",
459 PayReq::same_event($eid, $globals->asso('id')));
bd46a8e4 460 $stamp = $res->fetchOneCell();
461 if ($stamp) {
462 $evt['paiement_id'] = -2;
463 $evt['paiement_req'] = $stamp;
464 }
465 $page->assign('evt', $evt);
466 // get all the different moments infos
08cce2ff 467 $res = XDB::iterator(
bd46a8e4 468 "SELECT item_id, titre, details, montant
469 FROM groupex.evenements_items AS ei
470 INNER JOIN groupex.evenements AS e ON(e.eid = ei.eid)
471 WHERE e.eid = {?}
472 ORDER BY item_id", $eid);
473 $items = array();
474 while ($item = $res->next()) {
475 $items[$item['item_id']] = $item;
476 }
477 $page->assign('items', $items);
478 }
5cbb1fad 479 $page->assign('url_ref', $eid);
bd46a8e4 480 }
481
482 function handler_admin(&$page, $eid = null, $item_id = null)
483 {
484 global $globals;
485
352fb101 486 require_once dirname(__FILE__).'/xnetevents/xnetevents.inc.php';
bd46a8e4 487
488 $evt = get_event_detail($eid, $item_id);
bd46a8e4 489 if (!$evt) {
490 return PL_NOT_FOUND;
491 }
492
493 if ($evt['show_participants']) {
ed21e24a 494 new_group_page('xnetevents/admin.tpl');
bd46a8e4 495 } else {
ed21e24a 496 new_groupadmin_page('xnetevents/admin.tpl');
bd46a8e4 497 }
498
5e2307dc 499 if (may_update() && Post::v('adm')) {
500 $member = get_infos(Post::v('mail'));
ed21e24a 501 if (!$member) {
502 $page->trig("Membre introuvable");
bd46a8e4 503 }
bd46a8e4 504
ed21e24a 505 // change the price paid by a participant
5e2307dc 506 if (Env::v('adm') == 'prix' && $member) {
08cce2ff 507 XDB::execute("UPDATE groupex.evenements_participants
ed21e24a 508 SET paid = IF(paid + {?} > 0, paid + {?}, 0)
509 WHERE uid = {?} AND eid = {?}",
5e2307dc 510 strtr(Env::v('montant'), ',', '.'),
511 strtr(Env::v('montant'), ',', '.'),
ed21e24a 512 $member['uid'], $eid);
513 }
bd46a8e4 514
ed21e24a 515 // change the number of personns coming with a participant
5e2307dc 516 if (Env::v('adm') == 'nbs' && $member) {
08cce2ff 517 $res = XDB::query("SELECT paid
ed21e24a 518 FROM groupex.evenements_participants
519 WHERE uid = {?} AND eid = {?}",
520 $member['uid'], $eid);
521
522 $paid = intval($res->fetchOneCell());
5e2307dc 523 $nbs = Post::v('nb', array());
ed21e24a 524
525 foreach ($nbs as $id => $nb) {
5070a22d 526 $nb = max(intval($nb), 0);
ed21e24a 527
528 if ($nb) {
08cce2ff 529 XDB::execute("REPLACE INTO groupex.evenements_participants
ed21e24a 530 VALUES ({?}, {?}, {?}, {?}, {?})",
531 $eid, $member['uid'], $id, $nb, $paid);
532 } else {
08cce2ff 533 XDB::execute("DELETE FROM groupex.evenements_participants
ed21e24a 534 WHERE uid = {?} AND eid = {?} AND item_id = {?}",
535 $member['uid'], $eid, $id);
536 }
bd46a8e4 537 }
ed21e24a 538
08cce2ff 539 $res = XDB::query("SELECT uid FROM groupex.evenements_participants
ed21e24a 540 WHERE uid = {?} AND eid = {?}",
541 $member['uid'], $eid);
bd46a8e4 542 $u = $res->fetchOneCell();
ed21e24a 543 subscribe_lists_event($u, $member['uid'], $evt);
bd46a8e4 544 }
ed21e24a 545
bd46a8e4 546 $evt = get_event_detail($eid, $item_id);
547 }
548
ed21e24a 549 $page->assign('admin', may_update());
bd46a8e4 550 $page->assign('evt', $evt);
1f3362a3 551 $page->assign('tout', is_null($item_id));
bd46a8e4 552
ed21e24a 553 if (count($evt['moments'])) {
554 $page->assign('moments', $evt['moments']);
555 }
bd46a8e4 556
5e2307dc 557 $tri = (Env::v('order') == 'alpha' ? 'promo, nom, prenom' : 'nom, prenom, promo');
1f3362a3 558 $whereitemid = is_null($item_id) ? '' : "AND ep.item_id = $item_id";
08cce2ff 559 $res = XDB::iterRow(
ed21e24a 560 'SELECT UPPER(SUBSTRING(IF(u.nom IS NULL, m.nom,
561 IF(u.nom_usage<>"", u.nom_usage, u.nom)), 1, 1)),
562 COUNT(DISTINCT ep.uid)
bd46a8e4 563 FROM groupex.evenements_participants AS ep
564 INNER JOIN groupex.evenements AS e ON (ep.eid = e.eid)
565 LEFT JOIN groupex.membres AS m ON ( ep.uid = m.uid AND e.asso_id = m.asso_id)
566 LEFT JOIN auth_user_md5 AS u ON ( u.user_id = ep.uid )
567 WHERE ep.eid = {?} '.$whereitemid.'
ed21e24a 568 GROUP BY UPPER(SUBSTRING(IF(u.nom IS NULL,m.nom,u.nom), 1, 1))', $eid);
bd46a8e4 569
570 $alphabet = array();
571 $nb_tot = 0;
572 while (list($char, $nb) = $res->next()) {
573 $alphabet[ord($char)] = $char;
574 $nb_tot += $nb;
5e2307dc 575 if (Env::has('initiale') && $char == strtoupper(Env::v('initiale'))) {
bd46a8e4 576 $tot = $nb;
577 }
578 }
579 ksort($alphabet);
580 $page->assign('alphabet', $alphabet);
581
5e2307dc 582 $ofs = Env::i('offset');
583 $tot = Env::v('initiale') ? $tot : $nb_tot;
bd46a8e4 584 $nbp = intval(($tot-1)/NB_PER_PAGE);
585 $links = array();
586 if ($ofs) {
587 $links['précédent'] = $ofs-1;
588 }
589 for ($i = 0; $i <= $nbp; $i++) {
590 $links[(string)($i+1)] = $i;
591 }
592 if ($ofs < $nbp) {
593 $links['suivant'] = $ofs+1;
594 }
595 if (count($links)>1) {
596 $page->assign('links', $links);
597 }
598
bd46a8e4 599 if ($evt['paiement_id']) {
08cce2ff 600 $res = XDB::iterator(
bd46a8e4 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']);
ed21e24a 609 $page->assign('oublis', $res->total());
610 $page->assign('oubliinscription', $res);
bd46a8e4 611 }
612
ed21e24a 613 $page->assign('participants',
614 get_event_participants($evt, $item_id, $tri,
615 "LIMIT ".($ofs*NB_PER_PAGE).", ".NB_PER_PAGE));
bd46a8e4 616 }
4f10a058 617}
618
619?>