mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-06-20 01:44:42 +02:00
add mail action and view, unsubscription
This commit is contained in:
parent
dbe2f62c45
commit
06ced163e6
5 changed files with 69 additions and 9 deletions
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -137,7 +137,7 @@ class Place
|
|||
return 'école';
|
||||
}
|
||||
|
||||
return 'lieu';
|
||||
return 'établissement';
|
||||
}
|
||||
|
||||
public function getMainTag(): ?string
|
||||
|
|
|
@ -1,21 +1,26 @@
|
|||
<div class="content">
|
||||
<i class="bi bi-shop-window"></i>
|
||||
<p>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.
|
||||
<p>Bonjour, votre {{place.getPlaceTypeName()}} "{{place.name }}" est présent dans la base de données mondiale OpenStreetMap (OSM) avec 650 000 autres en France.
|
||||
<br>
|
||||
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.
|
||||
|
||||
<br>
|
||||
Plus les informations seront à jour et plus vous aurez de chances d'avoir des clients satisfaits.</p>
|
||||
|
||||
<p> Vous pouvez le modifier en cliquant sur le bouton ci-dessous, c'est gratuit et sans engagement.</p>
|
||||
|
||||
|
||||
<a href="{{ path('app_admin_commerce', {'id': place.id}) }}" class="btn btn-primary">
|
||||
|
||||
<i class="bi bi-pencil-square"></i>
|
||||
Compléter les informations de mon commerce</a>
|
||||
<a href="{{ path('app_public_edit', {'zipcode': place.zipCode, 'name': place.name != '' ? place.name : '?', 'uuid': place.uuidForUrl}) }}" class="btn btn-primary">
|
||||
<i class="bi bi-pencil-square"></i>
|
||||
Compléter les informations de mon commerce
|
||||
</a>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
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 <a href="mailto:contact@openstreetmap.fr">contact@openstreetmap.fr</a>.
|
||||
<br>
|
||||
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 <a href="https://fposm.fr">https://fposm.fr</a>.
|
||||
<br>
|
||||
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 <a href="https://fposm.fr">https://fposm.fr</a>.
|
||||
<br>
|
||||
<br>
|
||||
En vous souhaitant une bonne journée.
|
||||
<br>
|
||||
|
|
|
@ -9,4 +9,14 @@
|
|||
{% include 'admin/email_content.html.twig' with {'place': place} %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<a href="{{ path('app_admin_send_email_to_place', {'id': place.id}) }}" class="btn btn-primary">
|
||||
<i class="bi bi-envelope-fill"></i>
|
||||
Envoyer l'email
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -36,7 +36,7 @@
|
|||
</div>
|
||||
{% for label, messages in app.flashes %}
|
||||
{% for message in messages %}
|
||||
<div class="alert alert-{{ label }} alert-dismissible fade show mt-3" role="alert">
|
||||
<div class="alert alert-{{ label }} is-{{ label }} alert-dismissible fade show mt-3" role="alert">
|
||||
{{ message }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue