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