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