diff --git a/migrations/Version20250603085604.php b/migrations/Version20250603085604.php new file mode 100644 index 00000000..afce88cd --- /dev/null +++ b/migrations/Version20250603085604.php @@ -0,0 +1,35 @@ +addSql(<<<'SQL' + ALTER TABLE place ADD displayed_date TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL + SQL); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql(<<<'SQL' + ALTER TABLE place DROP displayed_date + SQL); + } +} diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 1993182d..2990d6ce 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -244,11 +244,12 @@ final class AdminController extends AbstractController $commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $zip_code]); - // var_dump($commerces[0]); + $stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]); return $this->render('admin/labourage_results.html.twig', [ 'results' => $results, 'commerces' => $commerces, 'zone' => $zip_code, + 'stats' => $stats, ]); } diff --git a/src/Controller/PublicController.php b/src/Controller/PublicController.php index 00516379..6aa31f3f 100644 --- a/src/Controller/PublicController.php +++ b/src/Controller/PublicController.php @@ -147,6 +147,10 @@ class PublicController extends AbstractController // Trier les tags par ordre alphabétique des clés ksort($commerce_overpass['tags_converted']); + + $place->setDisplayedDate(new \DateTime()); + $this->entityManager->persist($place); + $this->entityManager->flush(); return $this->render('public/edit.html.twig', [ 'commerce_overpass' => $commerce_overpass, @@ -337,6 +341,7 @@ class PublicController extends AbstractController $stats->addPlace($place); $place->setStats($stats); + $place->setModifiedDate(new \DateTime()); $stats->computeCompletionPercent(); $this->entityManager->persist($stats); @@ -346,7 +351,7 @@ class PublicController extends AbstractController return $this->render('public/view.html.twig', [ 'controller_name' => 'PublicController', 'commerce' => $commerce, - + 'place' => $place, 'status' => $status, 'exception' => $exception, 'exception_message' => $exception_message, @@ -429,7 +434,7 @@ class PublicController extends AbstractController public function latestChanges(): Response { // Récupérer les commerces modifiés, triés par date de modification décroissante - $places = $this->entityManager->getRepository(Place::class) + $places_modified = $this->entityManager->getRepository(Place::class) ->createQueryBuilder('p') ->where('p.modified_date IS NOT NULL') ->orderBy('p.modified_date', 'DESC') @@ -437,8 +442,18 @@ class PublicController extends AbstractController ->getQuery() ->getResult(); + // Récupérer les commerces modifiés, triés par date de modification décroissante + $places_displayed = $this->entityManager->getRepository(Place::class) + ->createQueryBuilder('p') + ->where('p.displayed_date IS NOT NULL') + ->orderBy('p.displayed_date', 'DESC') + ->setMaxResults(20) + ->getQuery() + ->getResult(); + return $this->render('public/latest_changes.html.twig', [ - 'places' => $places + 'places_modified' => $places_modified, + 'places_displayed' => $places_displayed ]); } } \ No newline at end of file diff --git a/src/Entity/Place.php b/src/Entity/Place.php index 285a9c4b..6f0f65b1 100644 --- a/src/Entity/Place.php +++ b/src/Entity/Place.php @@ -82,6 +82,9 @@ class Place #[ORM\Column(length: 255, nullable: true)] private ?string $note_content = null; + #[ORM\Column(nullable: true)] + private ?\DateTime $displayed_date = null; + public function getMainTag(): ?string { return $this->main_tag; @@ -431,4 +434,16 @@ class Place return $this; } + + public function getDisplayedDate(): ?\DateTime + { + return $this->displayed_date; + } + + public function setDisplayedDate(?\DateTime $displayed_date): static + { + $this->displayed_date = $displayed_date; + + return $this; + } } diff --git a/src/Service/Motocultrice.php b/src/Service/Motocultrice.php index 34f00a77..14aca484 100644 --- a/src/Service/Motocultrice.php +++ b/src/Service/Motocultrice.php @@ -24,8 +24,8 @@ class Motocultrice 'opening_hours', 'contact:email', 'contact:phone', - 'addr:housenumber', - 'addr:street', + 'contact:housenumber', + 'contact:street', 'contact:website', 'contact:mastodon', 'image', @@ -122,10 +122,10 @@ class Motocultrice // Nettoyer et échapper la zone pour la requête $zone = addslashes(trim($zone)); - +// //area["postal_code"="{$zone}"]->.searchArea; $query = <<.searchArea; +{{geocodeArea:{$zone}}}->.searchArea; ( // Recherche des commerces et services avec email nw["amenity"]["contact:email"][name](area.searchArea); @@ -147,13 +147,13 @@ QUERY; if($use_places_without_email_to_reference) { $query = <<.searchArea; +area(id:3610571698)->.searchArea; ( - nw["amenity"]["cafe|bar|restaurant|library|cinema|fast_food"](area.searchArea); + nw["amenity"~"^(cafe|bar|restaurant|library|cinema|fast_food|post_office|marketplace|community_centre|theatre|bank|townhall)$"](area.searchArea); + nw["healthcare"](area.searchArea); nw["shop"](area.searchArea); - nw["tourism"="museum|hotel|chalet|apartment"](area.searchArea); + nw["tourism"~"^(museum|hotel|chalet|apartment)$"](area.searchArea); nw["office"](area.searchArea); ); out body; @@ -162,6 +162,8 @@ out skel qt; QUERY; } + $essai_query = "%5Bout%3Ajson%5D%5Btimeout%3A25%5D%3B%0A%0A(%0Aarea(id%3A3610571698)-%3E.searchArea%3B%0A++++nw%5B%22amenity%22~%22%5E(cafe%7Cbar%7Crestaurant%7Clibrary%7Ccinema%7Cfast_food%7Cpost_office%7Cmarketplace%7Ccommunity_centre%7Ctheatre%7Cbank%7Ctownhall)%24%22%5D(area.searchArea)%3B%0A++++nw%5B%22healthcare%22%5D(area.searchArea)%3B%0A++++nw%5B%22shop%22%5D(area.searchArea)%3B%0A++++nw%5B%22tourism%22~%22%5E(museum%7Chotel%7Cchalet%7Capartment)%24%22%5D(area.searchArea)%3B%0A++++nw%5B%22office%22%5D(area.searchArea)%3B%0A)%3B%0Aout+body%3B%0A%3E%3B%0Aout+center%3B"; + try { $response = $this->client->request('POST', $this->overpassApiUrl, [ 'body' => ['data' => $query] @@ -177,12 +179,12 @@ QUERY; $email = ""; if( ! $use_places_without_email_to_reference){ - $email = $element['tags']['contact:email'] ?? $element['tags']['email'] ?? null; - // On passe si pas d'email - if (!$email) { - continue; - } - } + $email = $element['tags']['contact:email'] ?? $element['tags']['email'] ?? null; + // On passe si pas d'email + if (!$email) { + continue; + } + } $places[] = [ 'id' => $element['id'], @@ -199,7 +201,7 @@ QUERY; return $places; } catch (\Exception $e) { - var_dump($query); + var_dump($essai_query); var_dump($e->getMessage()); die(); throw new \Exception("Erreur lors de la requête Overpass : " . $e->getMessage()); @@ -285,6 +287,16 @@ QUERY; $osm_object_data['contact:website'] = $osm_object_data['website']; unset($osm_object_data['website']); } + // migrer addr:housenumber vers contact:housenumber + if(isset($osm_object_data['addr:housenumber']) && !isset($osm_object_data['contact:housenumber'])){ + $osm_object_data['contact:housenumber'] = $osm_object_data['addr:housenumber']; + unset($osm_object_data['addr:housenumber']); + } + // migrer addr:street vers contact:street + if(isset($osm_object_data['addr:street']) && !isset($osm_object_data['contact:street'])){ + $osm_object_data['contact:street'] = $osm_object_data['addr:street']; + unset($osm_object_data['addr:street']); + } return $osm_object_data; } diff --git a/templates/admin/labourage_results.html.twig b/templates/admin/labourage_results.html.twig index 2d17d264..61442951 100644 --- a/templates/admin/labourage_results.html.twig +++ b/templates/admin/labourage_results.html.twig @@ -1,6 +1,6 @@ {% extends 'base.html.twig' %} -{% block title %}Hello AdminController!{% endblock %} +{% block title %}Résultats du labourage sur la zone {{ zone }}{% endblock %} {% block body %}