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