<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Form\Filters\ManageCountryFilter;
use App\Repository\CountriesRepository;
use App\Form\ManageCountryForm;
use App\Entity\UserCountries;
#[Route('/settings/manage-countries')]
class ManageCountriesController extends AbstractController
{
#[Route('/', defaults: ['page' => '1'], methods: ['GET'], name: 'settings_manage_countries_index')]
#[Route('/page/{page<[1-9]\d*>}', methods: ['GET'], name: 'settings_manage_countries_index_paginated')]
#[Cache(smaxage: 10)]
public function index(Request $request,int $page,EntityManagerInterface $entityManager,CountriesRepository $countriesRepository): Response
{
$params = $request->query->all();
$filter = [];
$filterForm = $this->createForm(ManageCountryFilter::class);
if(isset($params['countryName'])) {
$filterForm['countryName']->setData($params['countryName']);
$filter['countryName'] = $params['countryName'];
}
if(isset($params['countryCode'])) {
$filterForm['countryCode']->setData($params['countryCode']);
$filter['countryCode'] = $params['countryCode'];
}
if(isset($params['enable'])) {
$filterForm['enable']->setData($params['enable']);
$filter['enable'] = $params['enable'];
}
$data = $countriesRepository->adminPaginatorFetchAll($page, $filter);
return $this->render('manage-countries/index.html.twig', [
'paginator' => $data,
'filter' => $filter,
'form' => $filterForm->createView(),
]);
}
#[Route('/edit/{id}', name: 'edit_country', methods: ['GET', 'POST'])]
public function edit(Request $request, EntityManagerInterface $entityManager, UserCountries $countries){
$form = $this->createForm(ManageCountryForm::class, $countries);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($countries);
$entityManager->flush();
$this->addFlash('success', 'Update successfully.');
return $this->redirectToRoute('settings_manage_countries_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('manage-countries/edit.html.twig', [
'form' => $form,
'countries'=>$countries,
]);
}
#[Route('/delete/{id}', name: 'delete_country', methods: ['POST','GET'])]
public function deleteUser(Request $request, EntityManagerInterface $entityManager, UserCountries $countries): Response
{
$redirectPage = $request->query->get('redirect_page');
if ($this->isCsrfTokenValid('delete'.$countries->getCountryId(), $request->request->get('_token'))) {
if($request->isMethod('POST')){
$countries->setIsDeleted(1);
$entityManager->persist($countries);
$entityManager->flush();
$this->addFlash('error', 'Delete successfully.');
if($request->request->get('redirect_page')){
return $this->redirectToRoute('settings_manage_countries_index_paginated', ['page'=> $request->request->get('redirect_page')], Response::HTTP_SEE_OTHER);
}
return $this->redirectToRoute('settings_manage_countries_index', [], Response::HTTP_SEE_OTHER);
}
}
return $this->renderForm('manage-countries/_delete_form.html.twig', [
'countries' => $countries,
'redirect_page' => $redirectPage,
]);
}
}