<?php namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Lexik\Bundle\FormFilterBundle\Filter\FilterBuilderUpdaterInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use App\Form\ContactType;
use App\Form\UserChangePasswordType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
class DefaultController extends Controller
{
private MailerInterface $mailer;
public function __construct(
EntityManagerInterface $em,
TranslatorInterface $translator,
FilterBuilderUpdaterInterface $filterBuilderUpdater,
RequestStack $requestStack,
MailerInterface $mailer
) {
parent::__construct($em, $translator, $filterBuilderUpdater, $requestStack);
$this->mailer = $mailer;
}
/**
* @Route("/", name="homepage")
*/
public function indexAction(): Response
{
if ($this->isGranted('IS_AUTHENTICATED_FULLY')) {
return $this->forward('App\Controller\PointController::listAction', [
'type' => 'muff',
]);
}
return $this->render('default/index.html.twig');
}
/**
* @Route("/lang/{_locale}", name="change_locale")
*/
public function changeLocaleAction(): RedirectResponse
{
return $this->redirectToRoute('homepage');
}
/**
*
* @Route("/company", name="company", options={"expose"=true})
*/
public function companyAction(): JsonResponse
{
$this->denyAccessUnlessGranted('ROLE_USER');
$user = $this->getUser();
$company = $user->getCompany();
$response = new JsonResponse();
if ($user->getReloadMap()) {
$response->headers->clearCookie(sprintf("map-%d", $company->getId()));
$user->setReloadMap(false);
$this->getEntityManager()->flush();
}
$response->setData([
'id' => $company->getId(),
'lat' => $company->getLatitude(),
'lng' => $company->getLongitude(),
'zoom' => $company->getZoom(),
'unit' => $company->getUnitOfMeasure() == 'km' ? 'kilometres' : 'landmiles',
]);
return $response;
}
/**
*
* @Route("/change-password", name="change_password")
*/
public function changePasswordAction(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_USER');
$user = $this->getUser();
$form = $this->createForm(UserChangePasswordType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getEntityManager();
$em->flush();
$this->addFlash('success', 'Hasło zostało pomyślnie zmienione.');
return $this->redirectToRoute('change_password');
}
return $this->render('default/changePassword.html.twig', [
'user' => $user,
'form' => $form->createView(),
]);
}
/**
* @Route("/help", name="help")
*/
public function helpAction(): Response
{
return $this->render('default/help.html.twig');
}
/**
* @Route("/order", name="order")
*/
public function orderAction(Request $request)
{
$form = $this->createForm(ContactType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$email = (new Email())
->subject("FIBKIT.com: formularz kontaktowy")
->from($data['email'])
->replyTo(new Address($data['email'], $data['name']))
->to('info@fibkit.com')
->html($this->renderView(
'default/emailOrder.html.twig', [
'data' => $data,
]
));
$this->mailer->send($email);
if ($request->isXmlHttpRequest()) {
return new Response('1');
}
$this->addFlash('success', 'Wiadomość została pomyślnie wysłana.');
return $this->redirectToRoute('order');
}
return $this->render('default/order.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/services", name="services")
*/
public function servicesAction(): Response
{
return $this->render('default/services.html.twig');
}
/**
* @Route("/pricing", name="pricing")
*/
public function pricingAction(): Response
{
return $this->render('default/pricing.html.twig');
}
/**
* @Route("/team", name="team")
*/
public function teamAction(): Response
{
return $this->render('default/team.html.twig');
}
/**
* @Route("/product", name="product")
*/
public function productAction(): Response
{
return $this->render('default/product.html.twig');
}
/**
* @Route("/resources", name="resources")
*/
public function resourcesAction(): Response
{
return $this->render('default/resources.html.twig');
}
/**
* @Route("/contact", name="contact")
*/
public function contactAction(Request $request)
{
$form = $this->createForm(ContactType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$email = (new Email())
->subject("FIBKIT.com: formularz kontaktowy")
->from($data['email'])
->replyTo(new Address($data['email'], $data['name']))
->to('info@fibkit.com')
->html($this->renderView(
'default/emailContact.html.twig', [
'data' => $data,
]
));
$this->mailer->send($email);
if ($request->isXmlHttpRequest()) {
return new Response('1');
}
$this->addFlash('success', $this->translate('Wiadomość została pomyślnie wysłana.'));
return $this->redirectToRoute('contact');
}
return $this->render('default/contact.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/clients", name="clients")
*/
public function clientsAction(): Response
{
return $this->render('default/clients.html.twig');
}
/**
* @Route("/regulamin", name="terms")
*/
public function termsAction(): Response
{
return $this->render('default/terms.html.twig');
}
/**
* @Route("/test-pdf", name="test_pdf")
*/
public function pdfAction(): Response
{
$html = $this->renderView('default/pdf.html.twig');
$snappy = $this->get('knp_snappy.pdf');
// $snappy->setOption('margin-top', '0');
$snappy->setOption('header-center', "POLSKIE ZNAKI: ĄŻĆŹŚĘŁÓŃ ąśćźżęłóń");
$snappy->setOption('footer-center', 'POLSKIE ZNAKI: ĄŻĆŹŚĘŁÓŃ ąśćźżęłóń');
return new Response(
$snappy->getOutputFromHtml($html), Response::HTTP_OK, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="test-pdf.pdf"',
]
);
}
}