src/Controller/UsedCarInspectionController.php line 126
<?phpnamespace App\Controller;use App\Entity\Order;use App\Repository\OrderRepository;use App\Repository\VehicleRepository;use Psr\Log\LoggerInterface;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Form\Extension\Core\Type\EmailType;use Symfony\Component\Form\Extension\Core\Type\FileType;use Symfony\Component\Form\Extension\Core\Type\TextType;use Symfony\Component\Form\Extension\Core\Type\TextareaType;use Symfony\Component\Form\Extension\Core\Type\CheckboxType;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\Mime\Email;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;class UsedCarInspectionController extends AbstractController{private OrderRepository $orderRepository;private LoggerInterface $logger;public function __construct(OrderRepository $orderRepository, LoggerInterface $logger){$this->orderRepository = $orderRepository;$this->logger = $logger;}private function createContactForm(){return $this->createFormBuilder()->add('name', TextType::class, ['label' => 'Jméno a příjmení'])->add('email', EmailType::class, ['label' => 'Váš e-mail'])->add('phone', TextType::class, ['label' => 'Váš telefon'])->add('message', TextareaType::class, ['label' => 'Vaše zpráva'])->getForm();}private function handleContactForm($contactForm,Request $request,MailerInterface $mailer,string $from = 'kontaktního formuláře'): array|bool|JsonResponse{if ($contactForm->isSubmitted() && $contactForm->isValid()) {$data = $contactForm->getData();$data['fromText'] = $from;try {$email = (new Email())->from($this->getParameter('email_sender'))->to($this->getParameter('contact_email'))->subject('Nová zpráva z kontaktního formuláře')->text($this->renderView('emails/contact.txt.twig', $data))->html($this->renderView('emails/contact.html.twig', $data));$mailer->send($email);if ($request->isXmlHttpRequest()) {return new JsonResponse(['success' => true,'message' => 'Vaše zpráva byla odeslána. Přejeme pěkný den.']);}return true;} catch (\Exception $e) {if ($request->isXmlHttpRequest()) {return new JsonResponse(['success' => false,'message' => 'Zprávu se nepodařilo odeslat. Zkuste to prosím později.']);}return ['Došlo k chybě při odesílání zprávy. Zkuste to prosím znovu.'];}}if ($request->isXmlHttpRequest()) {$errors = [];foreach ($contactForm->getErrors(true) as $error) {$errors[] = $error->getMessage();}return new JsonResponse(['success' => false,'errors' => $errors]);}$errors = [];foreach ($contactForm->getErrors(true) as $error) {$errors[] = $error->getMessage();}return ['success' => false, 'errors' => $errors];}// Redirects from old URLs to new URL#[Route('/kontrola-auta', name: 'redirect_kontrola_auta', methods: ['GET'])]public function redirectKontrolaAuta(): Response{return $this->redirectToRoute('page_proverit_auto', [], 301);}#[Route('/vyhledani-vozidla', name: 'redirect_vyhledani_vozidla', methods: ['GET'])]public function redirectVyhledaniVozidla(): Response{return $this->redirectToRoute('page_proverit_auto', [], 301);}#[Route('/proverka-vozidla', name: 'redirect_proverka_vozidla', methods: ['GET'])]public function redirectProverkaVozidla(): Response{return $this->redirectToRoute('page_proverit_auto', [], 301);}#[Route('/prohlidka-u-prodejce', name: 'redirect_prohlidka_u_prodejce', methods: ['GET'])]public function redirectProhlidkaUProdejce(): Response{return $this->redirectToRoute('page_proverit_auto', [], 301);}#[Route('/proverit-auto', name: 'page_proverit_auto', methods: ['GET', 'POST'])]public function index(Request $request, VehicleRepository $vehicleRepository, MailerInterface $mailer): mixed{$vehicleId = $request->query->get('vehicleId');$vehicle = $vehicleId ? $vehicleRepository->find($vehicleId) : null;$contactErrors = [];$contactForm = $this->createContactForm();if ($request->isMethod('POST')) {$contactForm->handleRequest($request);$result = $this->handleContactForm($contactForm, $request, $mailer, 'kontaktního formuláře na Prodejní stránce');if ($result instanceof JsonResponse) {return $result;}if ($result === true) {$this->addFlash('success', 'Vaše zpráva byla úspěšně odeslána.');return $this->redirectToRoute('vehicle_search_form');} else {foreach ($contactForm->getErrors(true) as $error) {$contactErrors[] = $error->getMessage();}}}return $this->render('used_car_inspection/index.html.twig', ['vehicle' => $vehicle,'contactForm' => $contactForm->createView(),'contactErrors' => $contactErrors,]);}private function createOrderForm($label){return $this->createFormBuilder()->add('name', TextType::class)->add('email', EmailType::class)->add('phone', TextType::class)->add('message', TextareaType::class, ['attr' => ['rows' => 5, 'placeholder' => 'Odkaz na vozidlo / popis vozu']])->add('additionalService', CheckboxType::class, ['label' => $label,'label_html' => true,'required' => false,])->getForm();}#[Route('/proverka-vozidla', name: 'vehicle_inspection_form', methods: ['GET', 'POST'])]public function vehicleInspectionForm(Request $request, MailerInterface $mailer): mixed{$lastSubmittedForm = $request->getSession()->get('last_submitted_form');$form = $this->createOrderForm('Prohlídka vozidla u prodejce <strong>+ 3 499 Kč</strong>');if ($lastSubmittedForm) {$lastSubmittedForm['additionalService'] = (bool) $lastSubmittedForm['additionalService'];$form->setData($lastSubmittedForm);$request->getSession()->remove('last_submitted_form');}$contactForm = $this->createContactForm();$contactErrors = [];if ($request->isMethod('POST')) {if ($request->request->get('type') === 'orderForm') {$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {try {return $this->processOrderAndRedirect($request, 'Prověrka vybraného vozidla', 'vehicle_inspection_form', $mailer);} catch (\Exception $e) {$this->addFlash('error', 'Došlo k chybě při zpracování objednávky. Zkuste to prosím znovu.');}} else {foreach ($form->getErrors(true) as $error) {$this->addFlash('error', $error->getMessage());}}}if ($request->request->get('type') === 'contactForm') {$contactForm->handleRequest($request);$result = $this->handleContactForm($contactForm, $request, $mailer, 'kontaktního formuláře na Prověření vozidel');if ($result instanceof JsonResponse) {return $result;}if ($result === true) {$this->addFlash('success', 'Vaše zpráva byla úspěšně odeslána.');return $this->redirectToRoute('vehicle_search_form');} else {foreach ($contactForm->getErrors(true) as $error) {$contactErrors[] = $error->getMessage();}}}}return $this->render('used_car_inspection/vehicle_inspection_form.html.twig', ['form' => $form->createView(),'contactForm' => $contactForm->createView(),'contactErrors' => $contactErrors,]);}#[Route('/vyhledani-vozidla', name: 'vehicle_search_form', methods: ['GET', 'POST'])]public function vehicleSearchForm(Request $request, MailerInterface $mailer): mixed{$lastSubmittedForm = $request->getSession()->get('last_submitted_form');$form = $this->createOrderForm('Prohlídka vozidla u prodejce <strong>+ 3 499 Kč</strong>');if ($lastSubmittedForm) {$lastSubmittedForm['additionalService'] = (bool) $lastSubmittedForm['additionalService'];$form->setData($lastSubmittedForm);$request->getSession()->remove('last_submitted_form');}$contactForm = $this->createContactForm();$contactErrors = [];if ($request->isMethod('POST')) {if ($request->request->get('type') === 'orderForm') {$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {try {return $this->processOrderAndRedirect($request, 'Vyhledání a výběr vozidla', 'vehicle_search_form', $mailer);} catch (\Exception $e) {$this->addFlash('error', 'Došlo k chybě při zpracování objednávky. Zkuste to prosím znovu.');}} else {foreach ($form->getErrors(true) as $error) {$this->addFlash('error', $error->getMessage());}}}if ($request->request->get('type') === 'contactForm') {$contactForm->handleRequest($request);$result = $this->handleContactForm($contactForm, $request, $mailer, 'kontaktního formuláře na Vyhledání vozidla');if ($result instanceof JsonResponse) {return $result;}if ($result === true) {$this->addFlash('success', 'Vaše zpráva byla úspěšně odeslána.');return $this->redirectToRoute('vehicle_search_form');} else {foreach ($contactForm->getErrors(true) as $error) {$contactErrors[] = $error->getMessage();}}}}return $this->render('used_car_inspection/vehicle_search_form.html.twig', ['form' => $form->createView(),'contactForm' => $contactForm->createView(),'contactErrors' => $contactErrors,]);}#[Route('/prohlidka-u-prodejce', name: 'dealer_inspection_form', methods: ['GET', 'POST'])]public function dealerInspectionForm(Request $request, MailerInterface $mailer, VehicleRepository $vehicleRepository): Response{$vehicleId = $request->query->get('vehicleId');$vehicle = $vehicleId ? $vehicleRepository->find($vehicleId) : null;$vehicleUrl = null;if ($vehicle) {$vehicleUrl = $this->generateUrl('page_vehicle_detail', ['urlManufacturer' => $vehicle->getManufacturer()->getUrl(),'urlModel' => $vehicle->getModel()->getUrl(),'id' => $vehicle->getId()], UrlGeneratorInterface::ABSOLUTE_URL);}$lastSubmittedForm = $request->getSession()->get('last_submitted_form');$form = $this->createOrderForm('Prověření historie vozidla <strong>+ 399 Kč</strong>');if ($lastSubmittedForm) {$lastSubmittedForm['additionalService'] = (bool) $lastSubmittedForm['additionalService'];$form->setData($lastSubmittedForm);$request->getSession()->remove('last_submitted_form');}$form->get('message')->setData($vehicleUrl);$contactForm = $this->createContactForm();$contactErrors = [];if ($request->isMethod('POST')) {if ($request->request->get('type') === 'orderForm') {$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {try {return $this->processOrderAndRedirect($request, 'Prohlídka vozidla u prodejce', 'dealer_inspection_form', $mailer);} catch (\Exception $e) {$this->addFlash('error', 'Došlo k chybě při zpracování objednávky. Zkuste to prosím znovu.');}} else {foreach ($form->getErrors(true) as $error) {$this->addFlash('error', $error->getMessage());}}}if ($request->request->get('type') === 'contactForm') {$contactForm->handleRequest($request);$result = $this->handleContactForm($contactForm, $request, $mailer, 'kontaktního formuláře na Prohlídce u prodejce');if ($result instanceof JsonResponse) {return $result;}if ($result === true) {$this->addFlash('success', 'Vaše zpráva byla úspěšně odeslána.');return $this->redirectToRoute('vehicle_search_form');} else {foreach ($contactForm->getErrors(true) as $error) {$contactErrors[] = $error->getMessage();}}}}return $this->render('used_car_inspection/dealer_inspection_form.html.twig', ['form' => $form->createView(),'contactForm' => $contactForm->createView(),'contactErrors' => $contactErrors,]);}private function processOrderAndRedirect(Request $request, string $service, string $redirectRoute, MailerInterface $mailer): Response{$data = $request->request->all();$this->processOrder($data['form'], $service, $mailer);$this->addFlash('success', "Vaše žádost o {$service} byla úspěšně odeslána.");$request->getSession()->set('last_submitted_form', $data['form']);return $this->redirectToRoute($redirectRoute);}private function processOrder(array $data, string $service, MailerInterface $mailer): void{if (!isset($data['additionalService'])) {$data['additionalService'] = false;}$order = new Order();$order->setName($data['name']);$order->setEmail($data['email']);$order->setPhone($data['phone']);$order->setMessage($data['message'] ?? '');$order->setService($service);$order->setAdditionalService($data['additionalService']);$this->orderRepository->save($order, true);try {$this->sendEmail($data, $service, $mailer);} catch (\Exception $exception) {$this->logger->error($exception->getMessage());}}private function sendEmail(array $data, string $service, MailerInterface $mailer): void{$email = (new Email())->from($this->getParameter('email_sender'))->to($this->getParameter('contact_email'))->subject('Nová objednávka: ' . $service)->html($this->renderView('emails/order.html.twig', compact('data', 'service')));$mailer->send($email);}#[Route('/proverit-vin', name: 'verify_vin', methods: ['POST'])]public function verifyVin(Request $request): Response{$vin = $request->request->get('vin');if (strlen($vin) !== 17) {if ($request->isXmlHttpRequest()) {return new JsonResponse(['success' => false,'error' => 'Neplatný VIN kód. Zadejte prosím přesně 17 znaků.']);}$this->addFlash('error', 'Neplatný VIN kód. Zadejte prosím přesně 17 znaků.');return $this->redirectToRoute('page_prohlidka_ojeteho_auta');}$url = "https://cz.cebia.com/?utm_source=affilbox&utm_medium=affiliate&utm_campaign=Autanet_2013&a_box=j49grgww&vin=" . urlencode($vin);if ($request->isXmlHttpRequest()) {return new JsonResponse(['success' => true,'redirect' => $url]);}return $this->redirect($url);}}