<?php
namespace App\Controller;
use App\Form\KontactForm;
use App\Service\EmailService;
use Maris\CmsBundle\Helper\PostMetaHelper;
use Maris\CmsBundle\Repository\ModuleRepository;
use Maris\CmsBundle\Repository\PostMetaRepository;
use Maris\CmsBundle\Repository\PostRepository;
use Maris\CmsBundle\Service\FileService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController extends AbstractController
{
private $pageHeaders;
public function __construct(
private PostRepository $post,
private PostMetaRepository $postMeta,
private PostMetaHelper $postMetaHelper,
private FileService $fileService,
private ModuleRepository $module,
private EmailService $emailService
)
{
$this->post = $post;
$this->postMeta = $postMeta;
$this->postMetaHelper = $postMetaHelper;
$this->fileService = $fileService;
$this->module = $module;
$pagehead = array('pagetitle' => '','description' => '','keywords' =>'');
$ph = $this->postMeta->findBy(['post'=>'1']);
foreach ($ph as $p) $pagehead[$p->getFieldName()] = $p->getContent();
$banerPhoto = $this -> fileService -> getFileByPostIdAndFieldName('1', 'banerPicture');
$pagehead['banerPicture'] = current($banerPhoto);
$this->pageHeaders = $pagehead;
}
#[Route('/', name: 'index')]
public function index(Request $request)
{
$trescModule = $this -> module -> find(['id' => '2']);
$pageElements = $this -> post -> findBy(['module' => $trescModule, 'status' => 'A'],['position' => 'ASC']);
$ret = array();
foreach ($pageElements as $pe) {
$tmp['post'] = $pe;
$tmp['meta'] = $this -> postMetaHelper -> parsePost($pe);
$mp = $this -> fileService -> getFileByPostAndFieldName($tmp['post'], 'mainPhoto', true);
$tmp['meta']['mainPhoto'] = !empty($tmp) ? current($mp) : '';
$tmp['components'] = '';
switch ($tmp['meta']['viewType']) {
case 'Treść lewa strona':
$tmp['twig'] = 'partial/contentLeft.html.twig';
break;
case 'Treść prawa strona':
$tmp['twig'] = 'partial/contentRight.html.twig';
break;
case 'Usługi':
$tmp['twig'] = 'partial/services.html.twig';
$tmp['components'] = $this->getServices();
break;
case 'Galeria':
$tmp['twig'] = 'partial/galery.html.twig';
break;
case 'Opinie Klientów':
$tmp['twig'] = 'partial/customersReviews.html.twig';
$tmp['components'] = $this->getCustomersReviews();
break;
case 'Formularz Kontaktowy':
$tmp['twig'] = 'partial/contactForm.html.twig';
break;
case 'Treść':
$tmp['twig'] = 'partial/defaultContent.html.twig';
break;
default:
$tmp['twig'] = 'partial/defaultContent.html.twig';
}
$ret[] = $tmp;
unset($tmp);
}
//formularz
$form = $this -> createForm(KontactForm::class, null, [
'csrf_protection' => true,
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$formData = $form->getData();
$this -> emailService->sendThankYouFormEmail($formData);
$this -> emailService->sendContactFormEmail($formData, 'biuro@drzewoekspert.pl');
if (!empty($form->get('website')->getData())) {
throw new \Exception('Spam wykryty');
}
return $this->redirectToRoute('confirmSendMail');
}
return $this->render('site/index.html.twig',[
'pageElements' => $ret,
'pageheader'=>$this->pageHeaders,
'form' => $form->createView(),
'menuBottom' => $pageElements
]);
}
#[Route('/MailSend', name: 'confirmSendMail')]
public function confirmSendMail()
{
return $this->render('site/confirmSendMail.html.twig',[
'pageheader'=>$this->pageHeaders
]);
}
private function getServices(): array
{
$servicesModule = $this->module->find(['id' => '3']);
$elem = $this -> post -> findBy(['module' => $servicesModule, 'status' => 'A'],['position' => 'ASC']);
$ret = array();
foreach($elem as $e) {
$tmp['post'] = $e;
$tmp['meta'] = $this -> postMetaHelper -> parsePost($e);
$mp = $this -> fileService -> getFileByPostAndFieldName($tmp['post'], 'mainPhoto', true);
$tmp['meta']['mainPhoto'] = !empty($tmp) ? current($mp) : '';
$ret[]= $tmp;
unset($tmp);
}
return $ret;
}
private function getCustomersReviews(): array
{
$customersModule = $this->module->find(['id' => '4']);
$elem = $this -> post -> findBy(['module' => $customersModule, 'status' => 'A'],['position' => 'ASC']);
$ret = array();
foreach($elem as $e) {
$tmp['post'] = $e;
$tmp['meta'] = $this -> postMetaHelper -> parsePost($e);
$ret[]= $tmp;
unset($tmp);
}
return $ret;
}
}