diff --git a/src/Entity/Place.php b/src/Entity/Place.php index 4ce7d4d..3196a7b 100644 --- a/src/Entity/Place.php +++ b/src/Entity/Place.php @@ -211,113 +211,89 @@ class Place */ public function update_place_from_overpass_data(array $overpass_data) { - if ( ! isset($overpass_data['tags']) || $overpass_data['tags'] == null) { + if (!isset($overpass_data['tags']) || $overpass_data['tags'] == null) { return; } - $orignal_overpass_data = $overpass_data; - - $overpass_data = array_merge([ - 'id' => '', - 'type' => '', - 'name' => '', - 'postcode' => '', - 'email' => '', - 'opening_hours' => '', - 'addr:housenumber' => '', - 'addr:street' => '', - 'website' => '', - 'wheelchair' => '', - 'note' => '', - 'fixme' => '', - ], $overpass_data['tags'] ); - - - $main_tag = $this->guess_main_tag($orignal_overpass_data['tags']); - if($main_tag){ + + $tags = $overpass_data['tags']; + + // Setters for basic properties from top-level of overpass data + $this->setOsmId($overpass_data['id']) + ->setOsmKind($overpass_data['type']) + ->setLat((float) ($overpass_data['lat'] ?? 0)) + ->setLon((float) ($overpass_data['lon'] ?? 0)); + + // Setters for metadata + if (isset($overpass_data['timestamp'])) { + try { + $this->setOsmDataDate(new \DateTime($overpass_data['timestamp'])); + } catch (\Exception $e) { + // Ignore if date is invalid + } + } + if (isset($overpass_data['version'])) { + $this->setOsmVersion($overpass_data['version']); + } + if (isset($overpass_data['user'])) { + $this->setOsmUser($overpass_data['user']); + } + if (isset($overpass_data['uid'])) { + $this->setOsmUid($overpass_data['uid']); + } + if (isset($overpass_data['changeset'])) { + $this->setOsmChangeset($overpass_data['changeset']); + } + + // Guess main tag + $main_tag = $this->guess_main_tag($tags); + if ($main_tag) { $this->setMainTag($main_tag); } - $this - ->setOsmId( $orignal_overpass_data['id']) - ->setOsmKind($orignal_overpass_data['type'] ) - ->setLat((float) $orignal_overpass_data['lat']) - ->setLon((float) $orignal_overpass_data['lon']) - ->setName(isset($overpass_data['name']) && $overpass_data['name'] != '' ? $overpass_data['name'] : null); - - // Traiter le timestamp OSM si disponible - if (isset($orignal_overpass_data['timestamp']) && $orignal_overpass_data['timestamp']) { - try { - $osmDate = new \DateTime($orignal_overpass_data['timestamp']); - $this->setOsmDataDate($osmDate); - } catch (\Exception $e) { - // En cas d'erreur de parsing de la date, on ignore + + // Setters from tags + $this->setName($tags['name'] ?? null); + $this->setStreet($tags['addr:street'] ?? $tags['contact:street'] ?? null); + $this->setHousenumber($tags['addr:housenumber'] ?? $tags['contact:housenumber'] ?? null); + if (isset($tags['addr:postcode'])) { + $this->setZipCode(intval($tags['addr:postcode'])); + } + $this->setEmail($tags['contact:email'] ?? $tags['email'] ?? null); + $this->setSiret($tags['ref:FR:SIRET'] ?? null); + + // Boolean "has" properties + $this->setHasOpeningHours(!empty($tags['opening_hours'])); + $this->setHasWheelchair(!empty($tags['wheelchair'])); + + // has address logic + $this->setHasAddress(!empty($this->getStreet()) && !empty($this->getHousenumber())); + + // has website logic (with multiple possible tags) + $websiteTags = ['website', 'contact:website', 'url', 'contact:url']; + $hasWebsite = false; + foreach ($websiteTags as $tag) { + if (!empty($tags[$tag])) { + $hasWebsite = true; + break; } } - - // Traiter les autres métadonnées OSM - if (isset($orignal_overpass_data['version'])) { - $this->setOsmVersion($orignal_overpass_data['version']); - } - if (isset($orignal_overpass_data['user'])) { - $this->setOsmUser($orignal_overpass_data['user']); - } - if (isset($orignal_overpass_data['uid'])) { - $this->setOsmUid($orignal_overpass_data['uid']); - } - if (isset($orignal_overpass_data['changeset'])) { - $this->setOsmChangeset($orignal_overpass_data['changeset']); - } - - $mapping = [ - ['key' => 'postcode', 'setter' => 'setZipCode', 'source' => $overpass_data], - ['key' => 'email', 'setter' => 'setEmail', 'source' => $overpass_data], - ['key' => 'opening_hours', 'setter' => 'setHasOpeningHours', 'source' => $overpass_data['tags'] ?? []], - ['key' => 'addr:housenumber', 'setter' => 'setHasAddress', 'source' => $overpass_data['tags'] ?? []], - ['key' => 'website', 'setter' => 'setHasWebsite', 'source' => $overpass_data['tags'] ?? []], - ['key' => 'wheelchair', 'setter' => 'setHasWheelchair', 'source' => $overpass_data['tags'] ?? []], - ['key' => 'siret', 'setter' => 'setSiret', 'source' => $overpass_data['tags'] ?? []], - ['key' => 'addr:street', 'setter' => 'setStreet', 'source' => $overpass_data['tags'] ?? []], - ['key' => 'addr:housenumber', 'setter' => 'setHousenumber', 'source' => $overpass_data['tags'] ?? []], - ]; - - foreach ($mapping as $map) { - if (isset($map['source'][$map['key']]) && $map['source'][$map['key']] !== '') { - $this->{$map['setter']}($map['source'][$map['key']]); - } - } - - // Traiter les notes et fixme + $this->setHasWebsite($hasWebsite); + + // has note logic $noteContent = ''; $hasNote = false; - - if (isset($orignal_overpass_data['tags']['note']) && $orignal_overpass_data['tags']['note'] !== '') { - $noteContent .= $orignal_overpass_data['tags']['note']; + if (!empty($tags['note'])) { + $noteContent .= $tags['note']; $hasNote = true; } - - if (isset($orignal_overpass_data['tags']['fixme']) && $orignal_overpass_data['tags']['fixme'] !== '') { + if (!empty($tags['fixme'])) { if ($noteContent !== '') { $noteContent .= "\n\n"; } - $noteContent .= "FIXME: " . $orignal_overpass_data['tags']['fixme']; + $noteContent .= "FIXME: " . $tags['fixme']; $hasNote = true; } - - $this->setNoteContent($noteContent); + $this->setNoteContent($noteContent ?: null); $this->setHasNote($hasNote); - - $this - // ->setOsmId($overpass_data['id']) - // ->setOsmKind($overpass_data['type']) - ->setName($overpass_data['name']) - ->setZipCode(\intval($overpass_data['postcode'])) - ->setEmail($overpass_data['email']) - // ->setUuidForUrl( Motocultrice::uuid_create_static()) - // ->setOptedOut(false) - // ->setDead(false) - ->setHasOpeningHours($overpass_data['opening_hours'] ? true : false) - ->setHasAddress($overpass_data['addr:housenumber'] && $overpass_data['addr:street'] ? true : false) - ->setHasWebsite($overpass_data['website'] ? true : false) - ->setHasWheelchair($overpass_data['wheelchair'] and $overpass_data['wheelchair'] != '' ? true : false); } public function __construct() diff --git a/templates/public/dashboard.html.twig b/templates/public/dashboard.html.twig index cef177e..030af77 100644 --- a/templates/public/dashboard.html.twig +++ b/templates/public/dashboard.html.twig @@ -138,7 +138,7 @@
Ville |
---|