ajout recherche par nom

This commit is contained in:
Tykayn 2025-05-28 16:24:34 +02:00 committed by tykayn
parent 3a73c1adad
commit ccab916286
11 changed files with 345 additions and 204 deletions

View file

@ -76,6 +76,29 @@ final class AdminController extends AbstractController
]);
}
#[Route('/admin/commerce/{id}', name: 'app_admin_commerce')]
public function commerce(int $id): Response
{
// Vérifier si on est en prod
if ($this->getParameter('kernel.environment') === 'prod') {
$this->addFlash('error', 'Vous n\'avez pas accès à cette page en production.');
return $this->redirectToRoute('app_public_index');
}
$commerce = $this->entityManager->getRepository(Place::class)->find($id);
if (!$commerce) {
throw $this->createNotFoundException('Commerce non trouvé');
}
// Redirection vers la page de modification avec les paramètres nécessaires
return $this->redirectToRoute('app_public_edit', [
'zipcode' => $commerce->getZipCode(),
'name' => $commerce->getName() ?? '?',
'uuid' => $commerce->getUuidForUrl()
]);
}
#[Route('/admin/labourer/{zip_code}', name: 'app_admin_labourer')]
public function labourer_zone(string $zip_code): Response
{
@ -201,13 +224,16 @@ final class AdminController extends AbstractController
public function delete(int $id): Response
{
$commerce = $this->entityManager->getRepository(Place::class)->find($id);
$name = $commerce->getName();
$this->entityManager->remove($commerce);
$this->entityManager->flush();
if($commerce) {
$this->entityManager->remove($commerce);
$this->entityManager->flush();
$this->addFlash('success', 'Le lieu '.$name.' a été supprimé avec succès de OSM Mes commerces, mais pas dans OpenStreetMap.');
$this->addFlash('success', 'Le lieu '.$commerce->getName().' a été supprimé avec succès de OSM Mes commerces, mais pas dans OpenStreetMap.');
} else {
$this->addFlash('error', 'Le lieu n\'existe pas.');
}
return $this->redirectToRoute('app_admin_dashboard');
return $this->redirectToRoute('app_public_dashboard');
}
#[Route('/admin/delete_by_zone/{zip_code}', name: 'app_admin_delete_by_zone')]
@ -222,8 +248,8 @@ final class AdminController extends AbstractController
$this->addFlash('success', 'Tous les commerces de la zone '.$zip_code.' ont été supprimés avec succès de OSM Mes commerces, mais pas dans OpenStreetMap.');
return $this->redirectToRoute('app_admin_dashboard');
}
return $this->redirectToRoute('app_public_dashboard');
}
#[Route('/admin/export', name: 'app_admin_export')]

View file

@ -11,7 +11,8 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use GuzzleHttp\Client;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mailer\MailerInterface;
class PublicController extends AbstractController
{
@ -20,21 +21,100 @@ class PublicController extends AbstractController
public function __construct(
private EntityManagerInterface $entityManager,
private Motocultrice $motocultrice
private Motocultrice $motocultrice,
private MailerInterface $mailer
) {
}
#[Route('/propose-email/{email}/{type}/{id}', name: 'app_public_propose_email')]
public function proposeEmail(string $email, string $type, int $id): Response
{
$data = $this->motocultrice->get_osm_object_data($type, $id);
// Récupérer le code postal depuis les tags, sinon mettre -1
$zipCode = isset($data['tags_converted']['addr:postcode']) ? (int)$data['tags_converted']['addr:postcode'] : -1;
$place_name = $data['tags_converted']['name'];
// Vérifier si une Place existe déjà avec le même osm_kind et osmId
$existingPlace = $this->entityManager->getRepository(Place::class)->findOneBy([
'osm_kind' => $type,
'osmId' => $id
]);
if ($existingPlace) {
// Mettre à jour l'email de la Place existante
$existingPlace->setEmail($email)->setLastContactAttemptDate(new \DateTime());
$this->entityManager->flush();
$debug = '';
if ($this->getParameter('kernel.environment') !== 'prod') {
$debug = 'Bonjour, nous sommes des bénévoles d\'OpenStreetMap France et nous vous proposons de modifier les informations de votre commerce. Voici votre lien unique de modification: ' . $this->generateUrl('app_public_edit', [
'zipcode' => $zipCode,
'name' => $place_name,
'uuid' => $existingPlace->getUuidForUrl()
], true);
}
$this->addFlash('success', 'L\'email a été mis à jour. Un email vous sera envoyé avec le lien de modification. '.$debug);
} else {
// Créer une nouvelle entité Place
$place = new Place();
$place->setEmail($email)
->setOsmId($id)
->setOsmKind($type)
->setAskedHumainsSupport(false)
->setOptedOut(false)
->setDead(false)
->setNote('')
->setModifiedDate(new \DateTime())
->setZipCode($zipCode)
->setPlaceCount(0)
->setLastContactAttemptDate(new \DateTime())
->setUuidForUrl(uniqid());
$this->entityManager->persist($place);
$this->entityManager->flush();
$debug = '';
if ($this->getParameter('kernel.environment') !== 'prod') {
$debug = 'Bonjour, nous sommes des bénévoles d\'OpenStreetMap France et nous vous proposons de modifier les informations de votre commerce. Voici votre lien unique de modification: ' . $this->generateUrl('app_public_edit', [
'zipcode' => $zipCode,
'name' => $place_name,
'uuid' => $place->getUuidForUrl()
], true);
}
$this->addFlash('success', 'Un email vous sera envoyé avec le lien de modification. '.$debug);
}
// Envoyer l'email
$destinataire = $this->getParameter('kernel.environment') === 'prod' ? $email : 'contact+essai_osm_commerce@cipherbliss.com';
$message = (new Email())
->from('contact@osm-commerce.fr')
->to($destinataire)
->subject('Votre lien de modification OpenStreetMap')
->text('Bonjour, nous sommes des bénévoles d\'OpenStreetMap France et nous vous proposons de modifier les informations de votre commerce. Voici votre lien unique de modification: ' . $this->generateUrl('app_public_edit', [
'zipcode' => $zipCode,
'name' => $place_name,
'uuid' => $existingPlace ? $existingPlace->getUuidForUrl() : $place->getUuidForUrl()
], true));
$this->mailer->send($message);
return $this->redirectToRoute('app_public_index');
}
#[Route('/', name: 'app_public_index')]
public function index(): Response
{
$commerce = $this->motocultrice->get_osm_object_data();
return $this->render('public/index.html.twig', [
return $this->render('public/home.html.twig', [
'controller_name' => 'PublicController',
'commerce' => $commerce,
'mapbox_token' => $_ENV['MAPBOX_TOKEN'],
'maptiler_token' => $_ENV['MAPTILER_TOKEN'],
]);
}
@ -123,13 +203,8 @@ class PublicController extends AbstractController
$status = "Erreur : Le code postal doit être composé de 5 chiffres";
continue;
}
} elseif ($tagKey === 'contact:phone' || $tagKey === 'phone') {
// Nettoyer le numéro de téléphone
$value = preg_replace('/[^0-9+]/', '', $value);
} elseif (strpos($value, 'http://') === 0) {
$value = str_replace('http://', 'https://', $value);
}
$tags[$tagKey] = $value;
$tags[$tagKey] = trim($value);
}
}
}