this repo has no description

Uppdaterade funktionalitet i admin panelen och fixade att /scoreboard inte visade användar sessioner

Changed files
+140 -22
app
resources
routes
+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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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)