diff --git a/public/index.php b/public/index.php index 8c3d2bd..7f8b3d1 100644 --- a/public/index.php +++ b/public/index.php @@ -23,7 +23,7 @@ Container::$routeCollection->group('game', function (MapGuesser\Routing\RouteCol $routeCollection->post('guess-json', '{mapId}/guess.json', [MapGuesser\Controller\GameFlowController::class, 'evaluateGuess']); }); Container::$routeCollection->group('admin', function (MapGuesser\Routing\RouteCollection $routeCollection) { - $routeCollection->get('admin.mapEditor', 'mapEditor/{mapId}', [MapGuesser\Controller\MapAdminController::class, 'getMapEditor']); + $routeCollection->get('admin.mapEditor', 'mapEditor/{mapId?}', [MapGuesser\Controller\MapAdminController::class, 'getMapEditor']); $routeCollection->get('admin.place', 'place.json/{placeId}', [MapGuesser\Controller\MapAdminController::class, 'getPlace']); $routeCollection->post('admin.saveMap', 'saveMap/{mapId}/json', [MapGuesser\Controller\MapAdminController::class, 'saveMap']); }); diff --git a/src/Controller/MapAdminController.php b/src/Controller/MapAdminController.php index 2a240d4..76a1592 100644 --- a/src/Controller/MapAdminController.php +++ b/src/Controller/MapAdminController.php @@ -17,6 +17,8 @@ use MapGuesser\Util\Geo\Position; class MapAdminController implements ISecured { + private static string $unnamedMapName = '[unnamed map]'; + private IRequest $request; private MapRepository $mapRepository; @@ -41,9 +43,18 @@ class MapAdminController implements ISecured { $mapId = (int) $this->request->query('mapId'); - $map = $this->mapRepository->getById($mapId); - $bounds = Bounds::createDirectly($map['bound_south_lat'], $map['bound_west_lng'], $map['bound_north_lat'], $map['bound_east_lng']); - $places = $this->getPlaces($mapId); + if ($mapId) { + $map = $this->mapRepository->getById($mapId); + $bounds = Bounds::createDirectly($map['bound_south_lat'], $map['bound_west_lng'], $map['bound_north_lat'], $map['bound_east_lng']); + $places = $this->getPlaces($mapId); + } else { + $map = [ + 'name' => self::$unnamedMapName, + 'description' => '' + ]; + $bounds = Bounds::createDirectly(-90.0, -180.0, 90.0, 180.0); + $places = []; + } $data = ['mapId' => $mapId, 'mapName' => $map['name'], 'mapDescription' => str_replace('
', "\n", $map['description']), 'bounds' => $bounds->toArray(), 'places' => &$places]; return new HtmlContent('admin/map_editor', $data); @@ -63,6 +74,10 @@ class MapAdminController implements ISecured { $mapId = (int) $this->request->query('mapId'); + if (!$mapId) { + $mapId = $this->addNewMap(); + } + if (isset($_POST['added'])) { $addedIds = []; foreach ($_POST['added'] as $placeRaw) { @@ -107,7 +122,7 @@ class MapAdminController implements ISecured ]; if (isset($_POST['name'])) { - $map['name'] = $_POST['name'] ? $_POST['name'] : '[unnamed map]'; + $map['name'] = $_POST['name'] ? $_POST['name'] : self::$unnamedMapName; } if (isset($_POST['description'])) { $map['description'] = str_replace(["\n", "\r\n"], '
', $_POST['description']); @@ -115,7 +130,7 @@ class MapAdminController implements ISecured $this->saveMapData($mapId, $map); - $data = ['added' => $addedIds]; + $data = ['mapId' => $mapId, 'added' => $addedIds]; return new JsonContent($data); } @@ -135,6 +150,18 @@ class MapAdminController implements ISecured return $bounds; } + private function addNewMap(): int + { + $modify = new Modify(\Container::$dbConnection, 'maps'); + $modify->fill([ + 'name' => self::$unnamedMapName, + 'description' => '' + ]); + $modify->save(); + + return $modify->getId(); + } + private function saveMapData(int $mapId, array $map): void { $modify = new Modify(\Container::$dbConnection, 'maps');