1<?php
2session_start();
3
4require_once 'priv/errorhandler.php';
5require_once 'priv/twig.php';
6require_once 'priv/pdo.php';
7
8if(!isset($_SESSION['qr']['id']))
9{
10 header('Location: index.php');
11 die();
12}
13
14$sql = "
15SELECT
16 id,
17 name,
18 start_date,
19 end_date,
20 show_class,
21 (COUNT(qr_players.target) != 0) AS targets_assigned,
22 (COUNT(has_won_check.target) != 0) AS someone_has_won,
23CASE
24 WHEN NOW() < start_date THEN 1 -- The event hasen't started yet
25 WHEN NOW() > end_date THEN 2 -- The event has ended
26 WHEN NOW() < end_date AND NOW() > start_date THEN 3 -- The event is ongoing
27END AS status
28FROM qr_events AS event
29LEFT JOIN qr_players ON event.id = qr_players.qr_events_id AND qr_players.target IS NOT NULL
30LEFT OUTER JOIN qr_players AS has_won_check ON qr_players.target = qr_players.qr_users_id
31WHERE display_date > NOW() ORDER BY start_date DESC LIMIT 1
32";
33$event = DB::prepare($sql)->texecute()->fetch();
34$model['event'] = $event;
35
36if(!isset($event['id']))
37{
38 echo $twig->render('info/noevents.html');
39 die();
40}
41
42if($event['status'] == 3 && $event['targets_assigned'] == 0)
43{
44 $sql = 'SELECT * FROM qr_players WHERE qr_events_id = ?';
45 $users = DB::prepare($sql)->texecute([$event['id']])->fetchAll();
46 shuffle($users);
47
48 $sql = 'UPDATE qr_players SET target = ? WHERE qr_users_id = ? AND qr_events_id = ?';
49 foreach($users as $key => $user)
50 {
51 $id = isset($users[$key + 1]) ? $users[$key + 1]['qr_users_id'] : $users[0]['qr_users_id'];
52 DB::prepare($sql)->texecute([$id, $user['qr_users_id'], $event['id']]);
53 }
54 header('Location: game.php');
55 die();
56}
57
58$sql = '
59SELECT
60 player.secret,
61 player.target,
62 player.feedback_given,
63 player.alive,
64 target_user.name AS target_name,
65 target_user.class AS target_class
66FROM qr_players AS player
67LEFT OUTER JOIN qr_users AS target_user ON player.target = target_user.id
68WHERE player.qr_users_id = ? AND player.qr_events_id = ?
69';
70$player = DB::prepare($sql)->texecute([$_SESSION['qr']['id'], $event['id']])->fetch();
71$model['player'] = $player;
72
73if(!$player)
74{
75 if($event['status'] == 3)
76 {
77 echo $twig->render('info/ongoing.html', $model);
78 }
79 else
80 {
81 echo $twig->render('register.html', $model);
82 }
83 die();
84}
85
86if($event['status'] == 1)
87{
88 echo $twig->render('info/countdown.html', $model);
89 die();
90}
91
92if($event['status'] == 2)
93{
94 echo $twig->render('info/eventover.html', $model);
95 die();
96}
97
98if($player['alive'] == 0)
99{
100 echo $twig->render('info/dead.html', $model);
101 die();
102}
103
104if($_SESSION['qr']['id'] == $player['target'])
105{
106 echo $twig->render('info/win.html', $model);
107 die();
108}
109
110$sql = '
111SELECT
112 victim.name,
113 victim.class,
114 kills.created_date
115FROM qr_kills AS kills
116RIGHT JOIN qr_users AS victim ON kills.target = victim.id
117WHERE kills.killer = ? AND kills.qr_events_id = ?
118';
119$model['victims'] = DB::prepare($sql)->texecute([$_SESSION['qr']['id'], $event['id']])->fetchAll();
120
121echo $twig->render('game.html', $model);