<?php
namespace App\Controller;
use App\Form\ContactType;
use App\Model\ContactDTO;
use App\Repository\AgencyRepository;
use App\Repository\BlockRepository;
use App\Repository\GroupRepository;
use App\Repository\JobRepository;
use App\Repository\MemberRepository;
use App\Repository\PageRepository;
use App\Services\MailService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
/**
* @Route("/{_locale<en|fr>}/", name="front_home")
* @Route("/{_locale<en|fr>}/condition-generales", name="front_home_cgu")
* @Route("/{_locale<en|fr>}/politique-confidentialite", name="front_home_politique")
* @Route("/{_locale<en|fr>}/mentions-legales", name="front_home_mentions")
*/
public function home(
Request $request,
MailService $mailService,
MemberRepository $memberRepository,
JobRepository $jobRepository,
BlockRepository $blockRepository,
PageRepository $pageRepository,
GroupRepository $groupRepository,
AgencyRepository $agencyRepository)
{
$contactDTO = new ContactDTO();
$form = $this->createForm(ContactType::class, $contactDTO, ['locale' => $request->getLocale()])->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$arrayErrors = [];
if (!$contactDTO->getFirstname()) {
$arrayErrors['firstname'] = 'Veuillez renseigner votre prénom';
}
if (!$contactDTO->getLastname()) {
$arrayErrors['lastname'] = 'Veuillez renseigner votre nom';
}
if (!$contactDTO->getEmail()) {
$arrayErrors['email'] = 'Veuillez renseigner votre email';
}
if (!$contactDTO->getPhone()) {
$arrayErrors['phone'] = 'Veuillez renseigner votre N° de téléphone';
}
if (!$contactDTO->getCompany()) {
$arrayErrors['company'] = 'Veuillez renseigner votre société';
}
if (!$contactDTO->getMessage() || strlen($contactDTO->getMessage()) < 10) {
$arrayErrors['message'] = 'Veuillez renseigner le message';
}
if (!empty($arrayErrors)) {
return $this->json([
'status' => 'error',
'errors' => $arrayErrors
]);
}
$mailService->sendMail($contactDTO);
return $this->json([
'status' => 'ok',
'message' => $arrayErrors
], Response::HTTP_OK);
}
return $this->render('front/home.html.twig', [
'form' => $form->createView(),
'members' => $memberRepository->findBy([], ['position' => 'ASC']),
'jobs' => $jobRepository->findBy([], ['id' => 'DESC']),
'companies' => $groupRepository->findBy([], ['id' => 'DESC']),
'blockHeader' => $blockRepository->findOneBy(['name' => 'header']),
'blockVision' => $blockRepository->findOneBy(['name' => 'vision']),
'blockMission' => $blockRepository->findOneBy(['name' => 'mission']),
'blockGroup' => $blockRepository->findOneBy(['name' => 'group']),
'blockTeam' => $blockRepository->findOneBy(['name' => 'team']),
'blockJoin' => $blockRepository->findOneBy(['name' => 'join']),
'blockAgency' => $blockRepository->findOneBy(['name' => 'agencies']),
'blockContact' => $blockRepository->findOneBy(['name' => 'contact']),
'groupBlock1' => $blockRepository->findOneBy(['name' => 'group_block_1']),
'groupBlock2' => $blockRepository->findOneBy(['name' => 'group_block_2']),
'pageCondition' => $pageRepository->findOneBy(['name' => 'conditions']),
'pageMention' => $pageRepository->findOneBy(['name' => 'mentions']),
'pagePolitique' => $pageRepository->findOneBy(['name' => 'politique']),
'agencies' => $agencyRepository->findBy([], ['id' => 'DESC']),
]);
}
/**
* @Route("/map/filter", methods={"POST"}, name="front_home_filter")
*/
public function filterMap(Request $request, AgencyRepository $agencyRepository)
{
if (!$request->get('filter') || $request->get('filter') === 'all') {
return $this->json([
'status' => 'error',
'data' => $agencyRepository->getAllAgencies(),
], Response::HTTP_OK);
}
$agencies = $agencyRepository->filterAgencies($request->get('filter'));
return $this->json([
'status' => 'ok',
'data' => $agencies,
], Response::HTTP_OK);
}
}