diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index f1dc50d..666ebfa 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -133,7 +133,7 @@ public function typePage(string $areaSlug, string $typeSlug) */ public function area(string $slug) { - $types = $this->repository->listTypes($slug); + $types = $this->repository->listTypes(); $area = $this->repository->getAreaInfo($slug); @@ -141,7 +141,6 @@ public function area(string $slug) ->with('area', $area) ->with('types', $types) ->with('color', $area->color); - } /** @@ -150,7 +149,7 @@ public function area(string $slug) */ private function fetchOsmInfo(array $places): array { - return (new Overpass())->fetchOsmInfo($places, Repository::getInstance()->listAreas()); + return (new Overpass())->fetchOsmInfo($places, Repository::getInstance()->listLeafAreas()); } public function tripleZoomMap($lat, $lon, Request $request) diff --git a/app/Models/Area.php b/app/Models/Area.php index 8643663..42747f6 100644 --- a/app/Models/Area.php +++ b/app/Models/Area.php @@ -16,7 +16,8 @@ public function __construct( readonly public string $slug, readonly public array $names, readonly public array $descriptions, - readonly public string $color + readonly public string $color, + readonly public array $subAreas ) { diff --git a/app/Services/Overpass.php b/app/Services/Overpass.php index 9af200e..09b7f4a 100644 --- a/app/Services/Overpass.php +++ b/app/Services/Overpass.php @@ -134,7 +134,7 @@ protected function buildQuery(string $objectQuerys, array $areas = null): string ( $areasQuery ); - out ids 1; + out ids; ); OVERPASS; diff --git a/app/Services/Repository.php b/app/Services/Repository.php index 315405a..caefe11 100644 --- a/app/Services/Repository.php +++ b/app/Services/Repository.php @@ -94,7 +94,7 @@ public function getAreaInfo(string $areaSlug, bool $canEnrich = true) $yamlSource = file_get_contents($this->getAreaFileName($areaSlug)); $parsed = Yaml::parse($yamlSource); - $osmId = isset($parsed['osm']) ? new OsmId($parsed['osm']['type'], $parsed['osm']['id'], ) : null; + $osmId = isset($parsed['osm']) ? new OsmId($parsed['osm']['type'], $parsed['osm']['id']) : null; if ($canEnrich && $osmId !== null) { $area = $this->resolveArea($osmId->getAreaId()); @@ -104,7 +104,7 @@ public function getAreaInfo(string $areaSlug, bool $canEnrich = true) } } - return new Area($this, $osmId, $areaSlug, $parsed['name'] ?? [], $parsed['description'] ?? [], $parsed['color'] ?? 'gray'); + return new Area($this, $osmId, $areaSlug, $parsed['name'] ?? [], $parsed['description'] ?? [], $parsed['color'] ?? 'gray', $parsed['sub_areas'] ?? []); } public function listTypes(): array @@ -196,6 +196,14 @@ public function listAreas() }); } + public function listLeafAreas() + { + $leafAreas = array_filter($this->listAreas(), function(Area $area) { + return count($area->subAreas) === 0; + }); + return $leafAreas; + } + private function listAreasUncached() { $areaFiles = glob($this->getAreaFileName('*')); diff --git a/resources/views/page/place.blade.php b/resources/views/page/place.blade.php index 43dba5e..4b42458 100644 --- a/resources/views/page/place.blade.php +++ b/resources/views/page/place.blade.php @@ -62,7 +62,7 @@

{{ Fallback::field($branch->tags, 'name') }}

{{ ucfirst(Fallback::resolve($type->name)) }} - @if($branch->area) + @if($branch->area !== null) in {{ $branch->area->getFullName() }} @endif getInstance()->fetchOsmInfo([ $place1, $place2 ], Repository::getInstance()->listAreas()); + $osmInfo = $this->getInstance()->fetchOsmInfo([ $place1, $place2 ], Repository::getInstance()->listLeafAreas()); self::assertInstanceOf(OsmInfo::class, $osmInfo[0]); self::assertEquals('Zemen Bank', $osmInfo[0]->tags->name);