*/ #[ORM\OneToMany(targetEntity: History::class, mappedBy: 'place_id', orphanRemoval: true)] private Collection $histories; #[ORM\ManyToOne(inversedBy: 'places', cascade: ['persist'])] private ?Stats $stats = null; #[ORM\Column(type: Types::BIGINT)] private ?string $osmId = null; #[ORM\Column(length: 255, nullable: true)] private ?string $name = null; #[ORM\Column(nullable: true)] private ?bool $has_opening_hours = null; #[ORM\Column(nullable: true)] private ?bool $has_address = null; #[ORM\Column(nullable: true)] private ?bool $has_website = null; #[ORM\Column(nullable: true)] private ?bool $has_wheelchair = null; #[ORM\Column(nullable: true)] private ?bool $has_note = null; #[ORM\Column(nullable: true)] private ?string $main_tag = null; #[ORM\Column(length: 255, nullable: true)] private ?string $note_content = null; #[ORM\Column(nullable: true)] private ?\DateTime $displayed_date = null; #[ORM\Column(nullable: true)] private ?int $lat = null; #[ORM\Column(nullable: true)] private ?int $lon = null; #[ORM\Column(length: 255, nullable: true)] private ?string $street = null; #[ORM\Column(length: 255, nullable: true)] private ?string $housenumber = null; #[ORM\Column(length: 255, nullable: true)] private ?string $siret = null; public function getMainTag(): ?string { return $this->main_tag; } public function setMainTag(?string $main_tag): static { $this->main_tag = $main_tag; return $this; } public function getCompletionPercentage(): ?int { $completion_percentage = 0; $total_fields = 5; $filled_fields = 0; if ($this->has_opening_hours) { $filled_fields += 1; } if ($this->has_address) { $filled_fields += 1; } if ($this->has_website) { $filled_fields += 1; } if ($this->has_wheelchair) { $filled_fields += 1; } if ($this->has_note) { $filled_fields += 1; } return round($filled_fields / $total_fields * 100); } public function guess_main_tag(array $tags_converted) { $main_tag = null; if (isset($tags_converted['amenity']) && $tags_converted['amenity'] != '') { $main_tag = 'amenity='.$tags_converted['amenity']; } if (isset($tags_converted['shop']) && $tags_converted['shop'] != '') { $main_tag = 'shop='.$tags_converted['shop']; } if (isset($tags_converted['tourism']) && $tags_converted['tourism'] != '') { $main_tag = 'tourism='.$tags_converted['tourism']; } if (isset($tags_converted['office']) && $tags_converted['office'] != '') { $main_tag = 'office='.$tags_converted['office']; } if (isset($tags_converted['healthcare']) && $tags_converted['healthcare'] != '') { $main_tag = 'healthcare='.$tags_converted['healthcare']; } return $main_tag; } /** * mettre à jour le lieu selon les tags osm */ public function update_place_from_overpass_data(array $overpass_data) { 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' => '' ], $overpass_data['tags'] ); $main_tag = $this->guess_main_tag($orignal_overpass_data['tags']); if($main_tag){ $this->setMainTag($main_tag); } $this ->setOsmId( $orignal_overpass_data['id']) ->setOsmKind($orignal_overpass_data['type'] ) ->setLat($orignal_overpass_data['lat']) ->setLon($orignal_overpass_data['lon']) ->setName(isset($overpass_data['name']) && $overpass_data['name'] != '' ? $overpass_data['name'] : null); $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' => 'note', 'setter' => 'setNote', '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' => 'note', 'setter' => 'setHasNote', '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']]); } } $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) ->setHasNote($overpass_data['note'] and $overpass_data['note'] != '' ? true : false); } public function __construct() { $this->histories = new ArrayCollection(); } public function getId(): ?int { return $this->id; } public function getUuidForUrl(): ?string { return $this->uuid_for_url; } public function setUuidForUrl(string $uuid_for_url): static { $this->uuid_for_url = $uuid_for_url; return $this; } public function getOsmKind(): ?string { return $this->osm_kind; } public function setOsmKind(string $osm_kind): static { $this->osm_kind = $osm_kind; return $this; } public function getEmail(): ?string { return $this->email; } public function setEmail(string $email): static { $this->email = $email; return $this; } public function isOptedOut(): ?bool { return $this->opted_out; } public function setOptedOut(bool $opted_out): static { $this->opted_out = $opted_out; return $this; } public function isDead(): ?bool { return $this->dead; } public function setDead(bool $dead): static { $this->dead = $dead; return $this; } public function getNote(): ?string { return $this->note; } public function setNote(?string $note): static { $this->note = $note; return $this; } public function getModifiedDate(): ?\DateTime { return $this->modified_date; } public function setModifiedDate(?\DateTime $modified_date): static { $this->modified_date = $modified_date; return $this; } public function getZipCode(): ?int { return $this->zip_code; } public function setZipCode(int $zip_code): static { $this->zip_code = $zip_code; return $this; } public function isAskedHumainsSupport(): ?bool { return $this->asked_humains_support; } public function setAskedHumainsSupport(bool $asked_humains_support): static { $this->asked_humains_support = $asked_humains_support; return $this; } public function getLastContactAttemptDate(): ?\DateTime { return $this->last_contact_attempt_date; } public function setLastContactAttemptDate(?\DateTime $last_contact_attempt_date): static { $this->last_contact_attempt_date = $last_contact_attempt_date; return $this; } /** * @return Collection */ public function getHistories(): Collection { return $this->histories; } public function addHistory(History $history): static { if (!$this->histories->contains($history)) { $this->histories->add($history); $history->setPlaceId($this); } return $this; } public function removeHistory(History $history): static { if ($this->histories->removeElement($history)) { // set the owning side to null (unless already changed) if ($history->getPlaceId() === $this) { $history->setPlaceId(null); } } return $this; } public function getStats(): ?Stats { return $this->stats; } public function setStats(?Stats $stats): static { $this->stats = $stats; return $this; } public function getOsmId(): ?string { return $this->osmId; } public function setOsmId(string $osmId): static { $this->osmId = $osmId; return $this; } public function getName(): ?string { return $this->name; } public function setName(?string $name): static { $this->name = $name; return $this; } public function hasOpeningHours(): ?bool { return $this->has_opening_hours; } public function setHasOpeningHours(?bool $has_opening_hours): static { $this->has_opening_hours = $has_opening_hours; return $this; } public function hasAddress(): ?bool { return $this->has_address; } public function setHasAddress(?bool $has_address): static { $this->has_address = $has_address; return $this; } public function hasWebsite(): ?bool { return $this->has_website; } public function setHasWebsite(?bool $has_website): static { $this->has_website = $has_website; return $this; } public function hasWheelchair(): ?bool { return $this->has_wheelchair; } public function setHasWheelchair(?bool $has_wheelchair): static { $this->has_wheelchair = $has_wheelchair; return $this; } public function hasNote(): ?bool { return $this->has_note; } public function setHasNote(?bool $has_note): static { $this->has_note = $has_note; return $this; } public function getPlaceCount(): ?int { return $this->place_count; } public function setPlaceCount(int $place_count): static { $this->place_count = $place_count; return $this; } public function getNoteContent(): ?string { return $this->note_content; } public function setNoteContent(?string $note_content): static { $this->note_content = $note_content; return $this; } public function getDisplayedDate(): ?\DateTime { return $this->displayed_date; } public function setDisplayedDate(?\DateTime $displayed_date): static { $this->displayed_date = $displayed_date; return $this; } public function getLat(): ?int { return $this->lat; } public function setLat(?int $lat): static { $this->lat = $lat; return $this; } public function getLon(): ?int { return $this->lon; } public function setLon(?int $lon): static { $this->lon = $lon; return $this; } public function getStreet(): ?string { return $this->street; } public function setStreet(?string $street): static { $this->street = $street; return $this; } public function getHousenumber(): ?string { return $this->housenumber; } public function setHousenumber(?string $housenumber): static { $this->housenumber = $housenumber; return $this; } public function getSiret(): ?string { return $this->siret; } public function setSiret(?string $siret): static { $this->siret = $siret; return $this; } }