<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\User;
class ParametersController extends AbstractController
{
#[Route('/parametres', name: 'app_parameters', methods: ['GET'])]
public function index(UserInterface $user): Response
{
/** @var User $user */
return $this->render('parameters/index.html.twig', [
'allow_cookies' => $user->allowCookies(),
'allow_geolocation' => $user->allowGeolocation(),
'allow_notifications' => $user->allowNotifications(),
'allow_emails' => $user->allowEmails(),
]);
}
#[Route('/parametres', name: 'update_parameters', options: ["expose" => true], methods: ['POST'])]
public function update_parameters(
Request $request,
EntityManagerInterface $entityManager,
): JsonResponse
{
try {
/** @var ?User $user */
$user = $this->getUser();
if (!$user) {
throw new \Exception("User not found", Response::HTTP_FORBIDDEN);
}
// Using filter_var to be sure I get the value as the meant boolean
$cookies = filter_var($request->request->get('cookies'), FILTER_VALIDATE_BOOLEAN);
$geolocation = filter_var($request->request->get('geolocation'), FILTER_VALIDATE_BOOLEAN);
$notifications = filter_var($request->request->get('notifications'), FILTER_VALIDATE_BOOLEAN);
$emails = filter_var($request->request->get('emails'), FILTER_VALIDATE_BOOLEAN);
$user->setAllowCookies($cookies);
$user->setAllowGeolocation($geolocation);
$user->setAllowNotifications($notifications);
$user->setAllowEmails($emails);
$entityManager->flush();
return new JsonResponse('');
} catch (\Throwable $th) {
return new JsonResponse([
'error' => $th->getMessage(),
]);
}
}
}