osm-commerces/src/Controller/AdminController.php

84 lines
2.6 KiB
PHP
Raw Normal View History

2025-05-26 11:55:44 +02:00
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use App\Entity\Place;
use App\Service\Motocultrice;
use Doctrine\ORM\EntityManagerInterface;
use function uuid_create;
2025-05-26 11:55:44 +02:00
final class AdminController extends AbstractController
{
public function __construct(
private EntityManagerInterface $entityManager,
private Motocultrice $motocultrice
) {
}
2025-05-26 11:55:44 +02:00
#[Route('/admin', name: 'app_admin')]
public function index(): Response
{
return $this->render('admin/index.html.twig', [
'controller_name' => 'AdminController',
]);
}
#[Route('/admin/labourer/{zip_code}', name: 'app_admin_labourer')]
public function labourer_zone(string $zip_code): Response
{
$results = [];
// $zone = 'Briis sous forges';
$results = $this->motocultrice->labourer($zip_code);
// Récupérer les commerces existants dans la base de données pour cette zone
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $zip_code]);
$osm_object_ids = [];
if ($commerces) {
// Extraire les osm_object_ids des commerces existants
$osm_object_ids = array_map(function($commerce) {
return $commerce->getOsmId();
}, $commerces);
}
// pour chaque résultat, vérifier que l'on a pas déjà un commerce avec le même osm_object_id
$results = array_filter($results, function($commerce) use ($osm_object_ids) {
return !in_array($commerce['id'], $osm_object_ids);
});
// on crée un commerce pour chaque résultat qui reste
foreach ($results as $result) {
$commerce = new Place();
$commerce->setOsmId($result['id'])
->setOsmKind($result['type'])
->setName($result['name'])
->setZipCode($zip_code)
->setEmail($result['email'])
->setUuidForUrl($this->motocultrice->uuid_create())
->setOptedOut(false)
->setDead(false)
->setNote($result['note'] ?? null)
->setModifiedDate(new \DateTime())
->setAskedHumainsSupport(false)
->setLastContactAttemptDate(null)
->setStats(null);
$this->entityManager->persist($commerce);
}
$this->entityManager->flush();
return $this->render('admin/labourage_results.html.twig', [
'results' => $results,
'zone' => $zip_code,
]);
}
2025-05-26 11:55:44 +02:00
}