src/Controller/DefaultController.php line 43

Open in your IDE?
  1. <?php namespace App\Controller;
  2. use App\Security\SpamGuard;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Knp\Snappy\Pdf;
  5. use Lexik\Bundle\FormFilterBundle\Filter\FilterBuilderUpdaterInterface;
  6. use Symfony\Component\Form\FormError;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use App\Form\ContactType;
  9. use App\Form\UserChangePasswordType;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Mailer\MailerInterface;
  15. use Symfony\Component\Mime\Address;
  16. use Symfony\Component\Mime\Email;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Contracts\Translation\TranslatorInterface;
  19. class DefaultController extends Controller
  20. {
  21.     private MailerInterface $mailer;
  22.     private SpamGuard $spamGuard;
  23.     public function __construct(
  24.         EntityManagerInterface $em,
  25.         TranslatorInterface $translator,
  26.         FilterBuilderUpdaterInterface $filterBuilderUpdater,
  27.         RequestStack $requestStack,
  28.         MailerInterface $mailer,
  29.         SpamGuard $spamGuard
  30.     ) {
  31.         parent::__construct($em$translator$filterBuilderUpdater$requestStack);
  32.         $this->mailer $mailer;
  33.         $this->spamGuard $spamGuard;
  34.     }
  35.     /**
  36.      * @Route("/", name="homepage")
  37.      */
  38.     public function indexAction(): Response
  39.     {
  40.         if ($this->isGranted('IS_AUTHENTICATED_FULLY')) {
  41.             return $this->forward('App\Controller\PointController::listAction', [
  42.                 'type' => 'muff',
  43.             ]);
  44.         }
  45.         
  46.         return $this->render('default/index.html.twig');
  47.     }
  48.     /**
  49.      * @Route("/lang/{_locale}", name="change_locale")
  50.      */
  51.     public function changeLocaleAction(): RedirectResponse
  52.     {
  53.         return $this->redirectToRoute('homepage');
  54.     }
  55.     /**
  56.      *
  57.      * @Route("/company", name="company", options={"expose"=true})
  58.      */
  59.     public function companyAction(): JsonResponse
  60.     {
  61.         $this->denyAccessUnlessGranted('ROLE_USER');
  62.         $user $this->getUser();
  63.         $company $user->getCompany();
  64.         $response = new JsonResponse();
  65.         
  66.         if ($user->getReloadMap()) {
  67.             
  68.             $response->headers->clearCookie(sprintf("map-%d"$company->getId()));
  69.             
  70.             $user->setReloadMap(false);
  71.             $this->getEntityManager()->flush();
  72.         }
  73.         $response->setData([
  74.             'id'    => $company->getId(),
  75.             'lat'   => $company->getLatitude(),
  76.             'lng'   => $company->getLongitude(),
  77.             'zoom'  => $company->getZoom(),
  78.             'unit'  => $company->getUnitOfMeasure() == 'km' 'kilometres' 'landmiles',
  79.         ]);
  80.         
  81.         return $response;
  82.     }
  83.     
  84.     /**
  85.      *
  86.      * @Route("/change-password", name="change_password")
  87.      */
  88.     public function changePasswordAction(Request $request)
  89.     {
  90.         $this->denyAccessUnlessGranted('ROLE_USER');
  91.         $user $this->getUser();
  92.         
  93.         $form $this->createForm(UserChangePasswordType::class, $user);
  94.         $form->handleRequest($request);
  95.         if ($form->isSubmitted() && $form->isValid()) {
  96.             $em $this->getEntityManager();
  97.             $em->flush();
  98.             $this->addFlash('success''Hasło zostało pomyślnie zmienione.');
  99.             return $this->redirectToRoute('change_password');
  100.         }
  101.         return $this->render('default/changePassword.html.twig', [
  102.             'user'  => $user,
  103.             'form'  => $form->createView(),
  104.         ]);
  105.     }
  106.     
  107.     /**
  108.      * @Route("/help", name="help")
  109.      */
  110.     public function helpAction(): Response
  111.     {
  112.         return $this->render('default/help.html.twig');
  113.     }
  114.     /**
  115.      * @Route("/order", name="order")
  116.      */
  117.     public function orderAction(Request $request)
  118.     {
  119.         $form $this->createForm(ContactType::class);
  120.         $form->handleRequest($request);
  121.         if ($form->isSubmitted()) {
  122.             if ($this->spamGuard->isRateLimited($request)) {
  123.                 $form->addError(new FormError(
  124.                     $this->translate('Zbyt wiele prób. Spróbuj ponownie za kilka minut.')
  125.                 ));
  126.             } elseif ($form->isValid()) {
  127.                 if (!$this->spamGuard->isSpam($request$form'order_form_rendered_at')) {
  128.                     $data $form->getData();
  129.                     $email = (new Email())
  130.                         ->subject("FIBKIT.com: formularz kontaktowy")
  131.                         ->from($data['email'])
  132.                         ->replyTo(new Address($data['email'], $data['name']))
  133.                         ->to('info@fibkit.com')
  134.                         ->html($this->renderView(
  135.                             'default/emailOrder.html.twig', [
  136.                                 'data' => $data,
  137.                             ]
  138.                         ));
  139.                     $this->mailer->send($email);
  140.                 }
  141.                 if ($request->isXmlHttpRequest()) {
  142.                     return new Response('1');
  143.                 }
  144.                 $this->addFlash('success''Wiadomość została pomyślnie wysłana.');
  145.                 return $this->redirectToRoute('order');
  146.             }
  147.         } else {
  148.             $this->spamGuard->markRendered($request'order_form_rendered_at');
  149.         }
  150.         return $this->render('default/order.html.twig', [
  151.             'form' => $form->createView(),
  152.         ]);
  153.     }
  154.     /**
  155.      * @Route("/services", name="services")
  156.      */
  157.     public function servicesAction(): Response
  158.     {
  159.         return $this->render('default/services.html.twig');
  160.     }
  161.     /**
  162.      * @Route("/pricing", name="pricing")
  163.      */
  164.     public function pricingAction(): Response
  165.     {
  166.         return $this->render('default/pricing.html.twig');
  167.     }
  168.     /**
  169.      * @Route("/team", name="team")
  170.      */
  171.     public function teamAction(): Response
  172.     {
  173.         return $this->render('default/team.html.twig');
  174.     }
  175.     
  176.     /**
  177.      * @Route("/product", name="product")
  178.      */
  179.     public function productAction(): Response
  180.     {
  181.         return $this->render('default/product.html.twig');
  182.     }
  183.     
  184.     /**
  185.      * @Route("/resources", name="resources")
  186.      */
  187.     public function resourcesAction(): Response
  188.     {
  189.         return $this->render('default/resources.html.twig');
  190.     }
  191.     
  192.     /**
  193.      * @Route("/contact", name="contact")
  194.      */
  195.     public function contactAction(Request $request)
  196.     {
  197.         $form $this->createForm(ContactType::class);
  198.         $form->handleRequest($request);
  199.         if ($form->isSubmitted()) {
  200.             if ($this->spamGuard->isRateLimited($request)) {
  201.                 $form->addError(new FormError(
  202.                     $this->translate('Zbyt wiele prób. Spróbuj ponownie za kilka minut.')
  203.                 ));
  204.             } elseif ($form->isValid()) {
  205.                 if (!$this->spamGuard->isSpam($request$form'contact_form_rendered_at')) {
  206.                     $data $form->getData();
  207.                     $email = (new Email())
  208.                         ->subject("FIBKIT.com: formularz kontaktowy")
  209.                         ->from($data['email'])
  210.                         ->replyTo(new Address($data['email'], $data['name']))
  211.                         ->to('info@fibkit.com')
  212.                         ->html($this->renderView(
  213.                             'default/emailContact.html.twig', [
  214.                                 'data' => $data,
  215.                             ]
  216.                         ));
  217.                     $this->mailer->send($email);
  218.                 }
  219.                 if ($request->isXmlHttpRequest()) {
  220.                     return new Response('1');
  221.                 }
  222.                 $this->addFlash('success'$this->translate('Wiadomość została pomyślnie wysłana.'));
  223.                 return $this->redirectToRoute('contact');
  224.             }
  225.         } else {
  226.             $this->spamGuard->markRendered($request'contact_form_rendered_at');
  227.         }
  228.         return $this->render('default/contact.html.twig', [
  229.             'form' => $form->createView(),
  230.         ]);
  231.     }
  232.     
  233.     /**
  234.      * @Route("/clients", name="clients")
  235.      */
  236.     public function clientsAction(): Response
  237.     {
  238.         return $this->render('default/clients.html.twig');
  239.     }
  240.     /**
  241.      * @Route("/regulamin", name="terms")
  242.      */
  243.     public function termsAction(): Response
  244.     {
  245.         return $this->render('default/terms.html.twig');
  246.     }
  247.     /**
  248.      * @Route("/test-pdf", name="test_pdf")
  249.      */
  250.     public function pdfAction(Pdf $snappy): Response
  251.     {
  252.         $html $this->renderView('default/pdf.html.twig');
  253.         // $snappy->setOption('margin-top', '0');
  254.         $snappy->setOption('header-center'"POLSKIE ZNAKI: ĄŻĆŹŚĘŁÓŃ  ąśćźżęłóń");
  255.         $snappy->setOption('footer-center''POLSKIE ZNAKI: ĄŻĆŹŚĘŁÓŃ  ąśćźżęłóń');
  256.         return new Response(
  257.             $snappy->getOutputFromHtml($html), Response::HTTP_OK, [
  258.                 'Content-Type' => 'application/pdf',
  259.                 'Content-Disposition' => 'attachment; filename="test-pdf.pdf"',
  260.             ]
  261.         );
  262.     }
  263. }