get('email'); $user = DB::query('select id,username,password from users where email=:email or username=:email', ['email' => $email])->fetch(); if (empty($user)) { $password = password_hash($request->get('password'), PASSWORD_DEFAULT); DB::query('insert into users (username, password, email) values (:username, :password, :email)', ['username' => $email, 'password' => $password, 'email' => $email]); $userId = DB::$connection->lastInsertId(); // insert new village at random free coordinates # TODO: check if coords are free DB::query( 'insert into villages (name, x, y, wood, clay, iron, food, satisfaction) values (:name, :x, :y, 100, 100, 100, 100, 100)', [ 'name' => $email, 'x' => random_int(-10, 10), 'y' => random_int(-10, 10), ] ); $villageId = DB::$connection->lastInsertId(); DB::query('insert into user_villages (user_id, village_id) values (:user_id, :village_id)', [ 'user_id' => $userId, 'village_id' => $villageId, ]); DB::query('insert into village_storage_config (wood, clay, iron, food, village_id) values (:wood, :clay, :iron, :food, :village_id)', [ 'wood' => 25, 'clay' => 25, 'iron' => 25, 'food' => 25, 'village_id' => $village->id, ]); $initialBuildings = ['TownHall', 'Storage', 'WoodCutter', 'ClayPit', 'IronMine', 'Farm']; foreach ($initialBuildings as $buildingType) { DB::query('insert into village_buildings (level, type, village_id) values (:level, :type, :village_id)', [ 'level' => 1, 'type' => $buildingType, 'village_id' => $villageId, ]); } $initialUnits = ['WoodCutter', 'PitWorker', 'Miner', 'Farmer']; foreach ($initialUnits as $unitType) { DB::query('insert into village_units (amount, type, home_village_id, residence_village_id) values (:amount, :type, :village_id, :village_id)', [ 'amount' => 1, 'type' => $unitType, 'village_id' => $villageId, ]); } } else { $password = $user['password']; $userId = $user['id']; } if (password_verify($request->get('password'), $password)) { $_SESSION['user'] = [ 'id' => $userId, 'username' => $user['username'], ]; return new RedirectResponse('/villages'); } return new RedirectResponse('/login'); } #[Route(path: '/logout', methods: ['GET'])] public function logout(Request $request): Response { session_unset(); session_destroy(); return new RedirectResponse('/login'); } }