this repo has no description
at main 8.5 kB view raw
1<?php 2 3namespace App\Http\Controllers; 4 5use DateTimeZone; 6use Illuminate\Http\Request; 7use Illuminate\Routing\Controller; 8use Illuminate\Support\Facades\Date; 9use Illuminate\Support\Facades\DB; 10 11class UsersController extends Controller 12{ 13 function updateUser(Request $request, $userId) 14 { 15 // Kolla om användare är admin 16 if(!isset($_SESSION['qrtag']['is_admin']) || !$_SESSION['qrtag']['is_admin']) 17 { 18 return view('pages.login'); 19 } 20 21 $username = $request->post('username'); 22 23 // Lite äcklig kod för att kolla om vi ska ta bort användaren istället för att uppdatera 24 // HTML har en konstig spec 25 if(isset($_POST['delete'])) 26 { 27 DB::table('event_tags') 28 ->where('user_id', $userId) 29 ->delete(); 30 31 DB::table('event_tags') 32 ->where('target_id', $userId) 33 ->delete(); 34 35 DB::table('event_users') 36 ->where('user_id', $userId) 37 ->delete(); 38 39 DB::table('event_users') 40 ->where('target_id', $userId) 41 ->delete(); 42 43 DB::table('users') 44 ->where('id', $userId) 45 ->delete(); 46 47 return redirect("/admin/users?success=Användare $username har tagits bort"); 48 } 49 50 // Ta datan och kolla så att alla gavs 51 $displayName = $request->post('display_name'); 52 $class = $request->post('class'); 53 $isAdmin = boolval($request->post('is_admin') == "on"); 54 55 if(!isset($username) || !isset($displayName) || !isset($class) || !isset($isAdmin)) 56 { 57 return redirect("/admin/users?error=Åtminstånde en nödvändig data punkt har inte getts"); 58 } 59 60 $targetTimezone = new DateTimeZone('Europe/Stockholm'); 61 62 $currentTime = Date::now($targetTimezone); 63 64 // Uppdatera användaren 65 DB::table('users') 66 ->where('id', $userId) 67 ->update([ 68 'username' => $username, 69 'display_name' => $displayName, 70 'class' => $class, 71 'is_admin' => intval($isAdmin), 72 'updated_at' => $currentTime->toDateTimeString() 73 ]); 74 75 return redirect("/admin/users?success=Användare $username har uppdaterats"); 76 } 77 78 function store(Request $request) 79 { 80 // Kolla om användare är admin 81 if(!isset($_SESSION['qrtag']['is_admin']) || !$_SESSION['qrtag']['is_admin']) 82 { 83 return view('pages.login'); 84 } 85 86 // Ta datan och kolla så att alla gavs 87 $username = $request->post('username'); 88 $displayName = $request->post('display_name'); 89 $class = $request->post('class'); 90 $isAdmin = boolval($request->post('is_admin') == "on"); 91 92 if(!isset($username) || !isset($displayName) || !isset($class) || !isset($isAdmin)) 93 { 94 return redirect("/admin/users?error=Åtminstånde en nödvändig data punkt har inte getts"); 95 } 96 97 // Kolla så att en användare inte redan finns 98 if(!is_null(DB::table('users')->where('username', $username)->first())) 99 { 100 return redirect("/admin/users?error=Användare med användarnamnet finns redan"); 101 } 102 103 // skaå användaren 104 DB::table('users') 105 ->insert([ 106 'username' => $username, 107 'display_name' => $displayName, 108 'class' => $class, 109 'is_admin' => intval($isAdmin) 110 ]); 111 112 return redirect("/admin/users?success=Användare $username har skapats"); 113 } 114 115 // Kulla en person i det nuvarande eventet 116 function tag(Request $request) 117 { 118 // Kolla om en kod är angiven 119 $secret = $request->post('secret') ?? $_GET['secret'] ?? null; 120 121 if(is_null($secret)) 122 { 123 return "Ingen kod angiven"; 124 } 125 126 if(!isset($_SESSION['qrtag']['id'])) 127 { 128 return redirect("/"); 129 } 130 131 // Kolla om ett event är igång för tillfället 132 $ongoingEvent = DB::table('events') 133 ->select('id', 'start_date', 'end_date', 'name') 134 ->where('start_date', '<=', now()) 135 ->where('end_date', '>', now()) 136 ->orderBy('start_date', 'asc') 137 ->first(); 138 139 if(is_null($ongoingEvent)) 140 { 141 return "Inget event är igång för tillfället"; 142 } 143 144 // Kolla om spelaren är vid liv så att man inte kan tagg någon när man är död 145 $user = DB::table('event_users')->where([ 146 ['user_id', $_SESSION['qrtag']['id']], 147 ['event_id', $ongoingEvent->id] 148 ])->first(); 149 150 if(!$user->is_alive) 151 { 152 return "Du är inte vid liv i spelet"; 153 } 154 155 // Kolla hemlisen så att den faktiskt är för targeten 156 $target = DB::table('event_users') 157 ->join('users', 'users.id', '=', 'user_id') 158 ->where([ 159 ['user_id', $user->target_id], 160 ['event_id', $ongoingEvent->id] 161 ])->first(['display_name', 'user_id', 'target_id', 'secret']); 162 163 if($target->secret != $secret) 164 { 165 return redirect('/?error=Du taggade fel person'); 166 } 167 168 // Sätt så att targeten är död 169 DB::table('event_users')->where([ 170 ['user_id', $target->user_id], 171 ['event_id', $ongoingEvent->id] 172 ])->update([ 173 'is_alive' => false 174 ]); 175 176 // Sätt spelarens nya target till den gamla targetens target 177 DB::table('event_users')->where([ 178 ['user_id', $user->user_id], 179 ['event_id', $ongoingEvent->id] 180 ])->update([ 181 'target_id' => $target->target_id 182 ]); 183 184 // Logga taggen så att man kan visa den i /scoreboards 185 DB::table('event_tags')->insert([ 186 'user_id' => $user->user_id, 187 'target_id' => $target->user_id, 188 'event_id' => $ongoingEvent->id 189 ]); 190 191 // Skicka en kill log i discorden 192 $user = DB::table('event_users') 193 ->join('users', 'users.id', '=', 'user_id') 194 ->where([ 195 ['user_id', $_SESSION['qrtag']['id']], 196 ['event_id', $ongoingEvent->id] 197 ])->first(['display_name', 'user_id', 'target_id']); 198 199 if(isset($_ENV['DISCORD_WEBHOOK']) && $_ENV['DISCORD_WEBHOOK'] != "") 200 { 201 // Kolla om spelaren har vunnit eller inte och sätt meddelandet följaktligen 202 $playersLeft = DB::table('event_users')->where('event_id', $ongoingEvent->id)->where('is_alive', true)->count(); 203 if($user->user_id == $user->target_id || $playersLeft === 1) 204 { 205 DB::table('events')->where('id', $ongoingEvent->id)->update([ 206 'winner' => $user->user_id 207 ]); 208 209 $message = $user->display_name . " kullade " . $target->display_name . " och vann därmed " . $ongoingEvent->name . "! Grattis!"; 210 } else 211 { 212 $message = $user->display_name . " kullade " . $target->display_name . "!\nNu är det $playersLeft spelare kvar."; 213 } 214 215 // Skicka meddelandet till discord genom deras webhook system 216 $options = array( 217 'http' => array( 218 'header' => "Content-type: application/x-www-form-urlencoded", 219 'method' => 'POST', 220 'content' => http_build_query(array('content' => $message)) 221 ) 222 ); 223 $context = stream_context_create($options); 224 $result = file_get_contents($_ENV['DISCORD_WEBHOOK'], false, $context); 225 } 226 227 return redirect('/'); 228 } 229 230 // Kolla om en spelare är vid liv i det nuvarande eventet 231 function alive(Request $request, $userId) 232 { 233 $ongoingEvent = DB::table('events') 234 ->select('id', 'start_date', 'end_date') 235 ->where('start_date', '<=', now()) 236 ->where('end_date', '>', now()) 237 ->orderBy('start_date', 'asc') 238 ->first(); 239 240 if(is_null($ongoingEvent)) 241 { 242 return "Inget event är igång för tillfället"; 243 } 244 245 $user = DB::table('event_users')->where([ 246 ['user_id', $userId], 247 ['event_id', $ongoingEvent->id] 248 ])->first(); 249 250 return response()->json([ 251 "alive" => $user->is_alive 252 ]); 253 } 254}