+2
-2
app/Http/Controllers/AuthController.php
+2
-2
app/Http/Controllers/AuthController.php
···
23
23
$ldap = ldap_connect('ldaps://ad.ssis.nu');
24
24
if($ldap === false) // Skicka personen till hem sidan om ldapen är nere
25
25
{
26
-
return view('pages.home', ['error' => 'Elev servern verkar vara nere. Kontakta ' . $_ENV['MAINTAINER_NAMN'] . '!']);
26
+
return view('pages.home', ['error' => 'Elev servern verkar vara nere. Kontakta ' . $_ENV['MAINTAINER_NAME'] . '!']);
27
27
}
28
28
$bind = ldap_bind($ldap, $username . "@ad.ssis.nu", $request->post('password'));
29
29
···
52
52
53
53
if($userInfo['count'] == 0)
54
54
{
55
-
return view('pages.home', ['error' => 'Kunde inte hitta dig i elev servern. Är du inte en elev? Kontakta ' . $_ENV['MAINTAINER_NAMN'] . ' om du vill ha tillgång.']);
55
+
return view('pages.home', ['error' => 'Kunde inte hitta dig i elev servern. Är du inte en elev? Kontakta ' . $_ENV['MAINTAINER_NAME'] . ' om du vill ha tillgång.']);
56
56
}
57
57
$userInfo = $userInfo[0];
58
58
+85
app/Http/Controllers/EventsController.php
+85
app/Http/Controllers/EventsController.php
···
406
406
return redirect("/admin/events/$eventId?success=Återupplivade användaren");
407
407
}
408
408
409
+
function killUser(Request $request, $eventId)
410
+
{
411
+
// Kolla om eleven är admin
412
+
if(!isset($_SESSION['qrtag']['is_admin']) || !$_SESSION['qrtag']['is_admin'])
413
+
{
414
+
return view('pages.home');
415
+
}
416
+
417
+
// Kolla så att useridt gavs
418
+
$userId = $request->post('user_id');
419
+
420
+
if(is_null($userId))
421
+
{
422
+
return redirect("/admin/events/$eventId?error=Inget userid gavs.");
423
+
}
424
+
425
+
// Kolla så att eventet finns och är igång
426
+
$event = DB::table('events')
427
+
->select('id', 'start_date', 'end_date', 'name', 'winner')
428
+
->where('start_date', '<=', now())
429
+
->where('end_date', '>', now())
430
+
->where('id', $eventId)
431
+
->orderBy('start_date', 'asc')
432
+
->first();
433
+
434
+
if(is_null($event))
435
+
{
436
+
return redirect("/admin/events/$eventId?error=Eventet måste existera och vara igång för att man ska kunna återuppliva.");
437
+
}
438
+
439
+
// Kolla så att spelaren finns
440
+
$eventUser = DB::table('event_users')
441
+
->where('user_id', $userId)
442
+
->where('event_id', $eventId)
443
+
->first();
444
+
445
+
if(is_null($eventUser))
446
+
{
447
+
return redirect("/admin/events/$eventId?error=Kunde $userId inte hitta en spelare med id:t i eventet.");
448
+
}
449
+
450
+
// Kolla så att man inte mördar en död spelare
451
+
if(!$eventUser->is_alive)
452
+
{
453
+
return redirect("/admin/events/$eventId?error=Spelaren är redan död.");
454
+
}
455
+
456
+
// Gör så att den som har spelaren som ska mördas som target får spelaren som ska mördas target
457
+
DB::table('event_users')
458
+
->where('target_id', $userId)
459
+
->update([
460
+
'target_id' => $eventUser->target_id
461
+
]);
462
+
463
+
// Sätt spelaren till död
464
+
DB::table('event_users')
465
+
->where('user_id', $userId)
466
+
->update([
467
+
'is_alive' => false
468
+
]);
469
+
470
+
$playersLeft = DB::table('event_users')->where('event_id', $eventId)->where('is_alive', true)->count();
471
+
if($playersLeft === 1)
472
+
{
473
+
$lastAlivePlayer = DB::table('event_users')->where('event_id', $eventId)->where('is_alive', true)->first();
474
+
DB::table('events')->where('id', $eventId)->update([
475
+
'winner' => $lastAlivePlayer->id
476
+
]);
477
+
478
+
$message = $lastAlivePlayer->display_name . " har vunnit " . $event->name . "! Grattis!";
479
+
480
+
$options = array(
481
+
'http' => array(
482
+
'header' => "Content-type: application/x-www-form-urlencoded",
483
+
'method' => 'POST',
484
+
'content' => http_build_query(array('content' => $message))
485
+
)
486
+
);
487
+
$context = stream_context_create($options);
488
+
$result = file_get_contents($_ENV['DISCORD_WEBHOOK'], false, $context);
489
+
}
490
+
491
+
return redirect("/admin/events/$eventId?success=Dödade användaren");
492
+
}
493
+
409
494
function reviveAll(Request $request, $eventId) {
410
495
// Kolla om eleven är admin
411
496
if(!isset($_SESSION['qrtag']['is_admin']) || !$_SESSION['qrtag']['is_admin'])
+12
resources/views/layouts/base.blade.php
+12
resources/views/layouts/base.blade.php
···
18
18
@include('includes.header', ['items' => $header])
19
19
<div class="row ms-sidebar">
20
20
@yield('main')
21
+
22
+
@if(!isset($nofooter) || !$nofooter)
23
+
<div class="d-flex flex-column col-md-9 col-sm-12 mx-auto">
24
+
<div class="py-5 mt-5 text-center w-100">
25
+
<footer class="d-flex flex-wrap justify-content-between align-items-center py-3 mt-4 border-top">
26
+
<div class="col-md-4 d-flex align-items-center w-100">
27
+
<span class="text-body-secondary">Rapportera eventuella buggar till {{ $_ENV['MAINTAINER_NAME'] }}</span>
28
+
</div>
29
+
</footer>
30
+
</div>
31
+
</div>
32
+
@endif
21
33
</div>
22
34
</div>
23
35
+18
-2
resources/views/pages/admin/event.blade.php
+18
-2
resources/views/pages/admin/event.blade.php
···
4
4
['!Event', '/admin/'],
5
5
['Användare', '/admin/users']
6
6
],
7
-
'titleSuffix' => 'Admin'
7
+
'titleSuffix' => 'Admin',
8
+
'nofooter' => true
8
9
])
9
10
@section('main')
10
11
<style>
···
65
66
<th scope="col">Hemlis</th>
66
67
<th scope="col">Mål</th>
67
68
<th scope="col">Vid liv</th>
69
+
<th scope="col"></th>
68
70
</tr>
69
71
</thead>
70
72
<tbody>
···
73
75
<th scope="row">{{ $user->id }}</th>
74
76
<td>{{ $user->display_name }}</td>
75
77
<td>{{ $user->class }}</td>
76
-
<td>{{ $user->tags }}</td>
78
+
<td>{{ $user->tag_count }}</td>
77
79
<td class="hide">{{ $user->secret }}</td>
78
80
<td class="hide">{{ $user->target_display_name }}</td>
79
81
@if($user->is_alive)
···
81
83
@else
82
84
<td>
83
85
Nej
86
+
</td>
87
+
@endif
88
+
@if($user->is_alive)
89
+
<td>
90
+
<form action="/api/events/{{ $eventId }}/kill" method="POST">
91
+
@method("PATCH")
92
+
<input type="hidden" id="custId" name="user_id" value="{{ $user->user_id }}">
93
+
<button class="btn btn-link">
94
+
Kill
95
+
</button>
96
+
</form>
97
+
</td>
98
+
@else
99
+
<td>
84
100
<form action="/api/events/{{ $eventId }}/revive" method="POST">
85
101
@method("PATCH")
86
102
<input type="hidden" id="custId" name="user_id" value="{{ $user->user_id }}">
+2
-1
resources/views/pages/admin/events.blade.php
+2
-1
resources/views/pages/admin/events.blade.php
···
4
4
['!Event', '/admin/'],
5
5
['Användare', '/admin/users']
6
6
],
7
-
'titleSuffix' => 'Admin'
7
+
'titleSuffix' => 'Admin',
8
+
'nofooter' => true
8
9
])
9
10
@section('main')
10
11
<button class="btn btn-success position-fixed mt-2 ms-3" style="width: 150px" data-bs-toggle="modal" data-bs-target="#createEvent">
+2
-1
resources/views/pages/admin/users.blade.php
+2
-1
resources/views/pages/admin/users.blade.php
···
4
4
['Event', '/admin/'],
5
5
['!Användare', '/admin/users']
6
6
],
7
-
'titleSuffix' => 'Admin'
7
+
'titleSuffix' => 'Admin',
8
+
'nofooter' => true
8
9
])
9
10
@section('main')
10
11
<button class="btn btn-success position-fixed mt-2 ms-3" style="width: 150px" data-bs-toggle="modal" data-bs-target="#createUser">
+1
routes/api.php
+1
routes/api.php
···
30
30
Route::post('/events/{eventId}/players', [EventsController::class, 'addPlayer'])->where('eventId', '[0-9]+')->middleware(VerifySession::class);
31
31
Route::patch('/events/{eventId}/change-target', [EventsController::class, 'changeTarget'])->where('eventId', '[0-9]+')->middleware(VerifySession::class);
32
32
Route::patch('/events/{eventId}/revive', [EventsController::class, 'reviveUser'])->where('eventId', '[0-9]+')->middleware(VerifySession::class);
33
+
Route::patch('/events/{eventId}/kill', [EventsController::class, 'killUser'])->where('eventId', '[0-9]+')->middleware(VerifySession::class);
33
34
Route::patch('/events/{eventId}/revive-all', [EventsController::class, 'reviveAll'])->where('eventId', '[0-9]+')->middleware(VerifySession::class);
34
35
35
36
Route::post('/users', [UsersController::class, 'store'])->middleware(VerifySession::class);
+18
-16
routes/web.php
+18
-16
routes/web.php
···
183
183
'players' => $players,
184
184
'tags' => $tags
185
185
]);
186
-
});
186
+
})->middleware(VerifySession::class);;
187
187
188
188
Route::prefix('admin')->group(function() {
189
189
Route::get('/', function () {
···
211
211
})->middleware(VerifySession::class);
212
212
213
213
Route::get('/events/{eventId}', function (Request $request, $eventId) {
214
-
$participants = DB::table('event_users')
215
-
->select(
216
-
'event_users.id as id',
217
-
'users.display_name as display_name',
218
-
'users.class as class',
219
-
'event_users.target_id',
220
-
'event_users.user_id',
221
-
DB::raw('(SELECT display_name FROM users WHERE users.id = event_users.target_id) as target_display_name'),
222
-
'event_users.secret',
223
-
'event_users.is_alive',
224
-
DB::raw('(SELECT COUNT(*) FROM event_tags WHERE user_id = users.id AND target_id = event_users.target_id AND event_id = ' . $eventId . ') as tags')
225
-
)
226
-
->join('users', 'event_users.user_id', '=', 'users.id')
227
-
->where('event_users.event_id', $eventId)
228
-
->get();
214
+
$participants = DB::select("
215
+
SELECT
216
+
event_users.id as id,
217
+
users.display_name as display_name,
218
+
users.class as class,
219
+
event_users.target_id,
220
+
event_users.user_id,
221
+
(SELECT display_name FROM users WHERE users.id = event_users.target_id) as target_display_name,
222
+
event_users.secret,
223
+
event_users.is_alive,
224
+
COALESCE(COUNT(`event_tags`.`event_id`), 0) AS tag_count
225
+
FROM event_users
226
+
LEFT JOIN users ON event_users.user_id = users.id
227
+
LEFT JOIN `event_tags` ON `users`.`id` = `event_tags`.`user_id` AND `event_tags`.`event_id` = " . $eventId . "
228
+
WHERE event_users.event_id = " . $eventId . "
229
+
GROUP BY id, display_name, class, target_id, user_id, target_display_name, secret, is_alive
230
+
");
229
231
230
232
$event = DB::table('events')
231
233
->where('id', $eventId)