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