diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php
index fd2b5be..64a132b 100644
--- a/src/Controller/AdminController.php
+++ b/src/Controller/AdminController.php
@@ -272,6 +272,12 @@ final class AdminController extends AbstractController
#[Route('/admin/labourer/{insee_code}', name: 'app_admin_labourer')]
public function labourer(string $insee_code, bool $updateExisting = true): Response
{
+
+ // Vérifier si le code INSEE est valide (composé uniquement de chiffres)
+ if (!ctype_digit($insee_code) || $insee_code == 'undefined' || $insee_code == '') {
+ $this->addFlash('error', 'Code INSEE invalide : il doit être composé uniquement de chiffres.');
+ return $this->redirectToRoute('app_public_index');
+ }
try {
// Récupérer ou créer les stats pour cette zone
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
@@ -536,4 +542,43 @@ final class AdminController extends AbstractController
return $this->redirectToRoute('app_public_index');
}
+
+ #[Route('/admin/send_email_to_place/{id}', name: 'app_admin_send_email_to_place')]
+ public function send_email_to_place(Place $place, \Symfony\Component\Mailer\MailerInterface $mailer): Response
+ {
+
+ // Vérifier si le lieu est opted out
+ if ($place->isOptedOut()) {
+ $this->addFlash('error', 'Ce lieu a demandé à ne plus être sollicité pour mettre à jour ses informations.');
+ return $this->redirectToRoute('app_public_index');
+ }
+ // Vérifier si le lieu a déjà été contacté
+ if ($place->getLastContactAttemptDate() !== null) {
+ $this->addFlash('error', 'Ce lieu a déjà été contacté le ' . $place->getLastContactAttemptDate()->format('d/m/Y H:i:s'));
+ return $this->redirectToRoute('app_public_index');
+ }
+
+ // Générer le contenu de l'email avec le template
+ $emailContent = $this->renderView('admin/email_content.html.twig', [
+ 'place' => $place
+ ]);
+
+ // Envoyer l'email
+ $email = (new \Symfony\Component\Mime\Email())
+ ->from('contact@openstreetmap.fr')
+ ->to('contact+send_email@cipherbliss.com')
+ ->subject('Mise à jour des informations de votre établissement dans OpenStreetMap')
+ ->html($emailContent);
+
+ $mailer->send($email);
+
+
+ // Mettre à jour la date de dernier contact
+ $place->setLastContactAttemptDate(new \DateTime());
+ $this->entityManager->persist($place);
+ $this->entityManager->flush();
+
+ $this->addFlash('success', 'Email envoyé avec succès à ' . $place->getName() . ' le ' . $place->getLastContactAttemptDate()->format('d/m/Y H:i:s'));
+ return $this->redirectToRoute('app_public_index');
+ }
}
diff --git a/src/Entity/Place.php b/src/Entity/Place.php
index 867a642..50070a3 100644
--- a/src/Entity/Place.php
+++ b/src/Entity/Place.php
@@ -137,7 +137,7 @@ class Place
return 'école';
}
- return 'lieu';
+ return 'établissement';
}
public function getMainTag(): ?string
diff --git a/templates/admin/email_content.html.twig b/templates/admin/email_content.html.twig
index 7dce523..069507e 100644
--- a/templates/admin/email_content.html.twig
+++ b/templates/admin/email_content.html.twig
@@ -1,21 +1,26 @@
-
Bonjour, votre {{place.getPlaceTypeName()}} "{{place.name }}" est présent dans la base de données mondiale OpenStreetMap avec 650 000 autres en France. Ces informations sont utilisées dans des milliers de sites web, par Île de France mobilités, TomTom, Geovelo, Cartes IGN, Facebook, Instagram, et Apple Plans.
+
Bonjour, votre {{place.getPlaceTypeName()}} "{{place.name }}" est présent dans la base de données mondiale OpenStreetMap (OSM) avec 650 000 autres en France.
+
+Ces informations sont utilisées dans des milliers de sites web et annuaires, par Île de France mobilités, TomTom, Geovelo, Cartes IGN, Facebook, Instagram, Apple Plans et bien d'autres.
Plus les informations seront à jour et plus vous aurez de chances d'avoir des clients satisfaits.
Vous pouvez le modifier en cliquant sur le bouton ci-dessous, c'est gratuit et sans engagement.
-
-
-
-
- Compléter les informations de mon commerce
+
+
+ Compléter les informations de mon commerce
+
+
+
Les bénévoles de l'association OpenStreetMap France ont mis en place cet outil pour faciliter la mise à jour des informations de vos commerces et améliorer la souveraineté numérique. Si vous avez besoin d'aide, n'hésitez pas à nous contacter à l'adresse
contact@openstreetmap.fr.
- Pour des besoins de prestation de services concernant l'intégration de données, vous pouvez contacter la fédération des pros d'OpenStreetMap France sur
https://fposm.fr.
+
+ Pour des besoins de prestation de services concernant l'intégration ou l'exportation de données depuis OSM, vous pouvez contacter la fédération des pros d'OpenStreetMap France sur
https://fposm.fr.
+
En vous souhaitant une bonne journée.
diff --git a/templates/admin/view_email_for_place.html.twig b/templates/admin/view_email_for_place.html.twig
index 59830de..5272475 100644
--- a/templates/admin/view_email_for_place.html.twig
+++ b/templates/admin/view_email_for_place.html.twig
@@ -9,4 +9,14 @@
{% include 'admin/email_content.html.twig' with {'place': place} %}
+