<?php
namespace App\Controller;
use App\Classes\oAddress;
use App\Entity\Addresse;
use App\Entity\AddressesList;
use App\Form\AddresseType;
use App\Repository\AddresseRepository;
use App\Repository\AddressesListRepository;
use App\Repository\CityRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\GeoLocService;
/**
* @Route("/addresse")
*/
class AddresseController extends AbstractController
{
/**
* @Route("/", name="app_addresse_index", methods={"GET"})
*/
public function index(AddresseRepository $addresseRepository): Response
{
return $this->render('addresse/index.html.twig', [
'addresses' => $addresseRepository->findAll(),
]);
}
/**
* @Route("/new/{addressesList}", name="app_addresse_new", methods={"GET", "POST"})
*/
public function new(Request $request, AddresseRepository $addresseRepository , AddressesList $addressesList, AddressesListRepository $addressesListRepository): Response
{
$addresse = new Addresse();
$form = $this->createForm(AddresseType::class, $addresse);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$addresse->setAddressesGroup($addressesList);
$addresse->setStatus(Addresse::STATUT_NON_GEOCODED);
$addresseRepository->add($addresse);
$addressesListRepository->updateAddressesListStatus($addressesList);
return $this->redirectToRoute('app_addresses_list_show', ['id'=>$addressesList->getId()], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('addresse/new.html.twig', [
'addresse' => $addresse,
'form' => $form,
]);
}
/**
* @Route("/{id}", name="app_addresse_show", methods={"GET"})
*/
public function show(Addresse $addresse): Response
{
return $this->render('addresse/show.html.twig', [
'addresse' => $addresse,
]);
}
/**
* @Route("/{id}/{addressesList}/edit", name="app_addresse_edit", methods={"GET", "POST"})
*/
public function edit(Request $request, Addresse $addresse, AddresseRepository $addresseRepository ,AddressesList $addressesList, AddressesListRepository $addressesListRepository): Response
{
$form = $this->createForm(AddresseType::class, $addresse);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$addresse->setStatus(Addresse::STATUT_NON_GEOCODED);
$addresseRepository->add($addresse);
$addressesListRepository->updateAddressesListStatus($addresse->getAddressesGroup());
return $this->redirectToRoute('app_addresses_list_show', ['id'=>$addressesList->getId()], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('addresse/edit.html.twig', [
'addresse' => $addresse,
'form' => $form,
]);
}
/**
* @Route("/delete/{id}/{addressesList}", name="app_addresse_delete", methods={"POST"})
*/
public function delete(Request $request, Addresse $addresse, AddresseRepository $addresseRepository, AddressesList $addressesList, AddressesListRepository $addressesListRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$addresse->getId(), $request->request->get('_token'))) {
$addresseRepository->remove($addresse);
$addressesListRepository->updateAddressesListStatus($addresse->getAddressesGroup());
}
return $this->redirectToRoute('app_addresses_list_show', ['id'=>$addressesList->getID()], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/{id}/geocode", name="app_addresse_geocode", methods={"GET", "POST"})
*/
public function geocode(Request $request,Addresse $addresse, AddresseRepository $addresseRepository, AddressesListRepository $addressesListRepository, CityRepository $cityRepository): Response
{
$oAddresse = new oAddress();
$oAddresse->setAddress($addresse->getAddress());
$oAddresse->setCity($addresse->getCity());
$oAddresse->setPostcode($addresse->getZipcode());
$possibilites = GeoLocService::geolocAddress($oAddresse, $cityRepository);
if ($this->isCsrfTokenValid('geocode'.$addresse->getId(), $request->request->get('_token'))) {
$geocodingChoice = $request->request->get('geocodingChoice');
$tmp = explode("||", $geocodingChoice);
$lat = $tmp[0];
$lon = $tmp[1];
$addresse->setLat($lat);
$addresse->setLon($lon);
$addresse->setStatus(Addresse::STATUT_GEOCODED);
$addressesListRepo = $this->getDoctrine()->getRepository(Addresse::class);
$addressesListRepo->add($addresse);
$addressesListRepository->updateAddressesListStatus($addresse->getAddressesGroup());
return $this->redirectToRoute('app_addresses_list_show', ['id'=>$addresse->getAddressesGroup()->getId()], Response::HTTP_SEE_OTHER);
}
return $this->render('addresse/geocode.html.twig', [
'addresse' => $addresse,
'possibilites' => $possibilites
]);
}
}