<?php
namespace App\Controller;
use App\Form\ContactFormType;
use Exception;
use Pimcore\Controller\FrontendController;
use Pimcore\Log\ApplicationLogger;
use Pimcore\Mail;
use Pimcore\Model\DataObject;
use Pimcore\Model\DataObject\ContactRequest;
use Pimcore\Model\WebsiteSetting;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
class DefaultController extends FrontendController
{
/**
* @param Request $request
* @return Response
*/
public function defaultAction(Request $request): Response
{
return $this->render('default/default.html.twig');
}
/**
* @Template
* @param Request $request
* @param ApplicationLogger $logger
* @param TranslatorInterface $translator
* @return Response
* @throws Exception
*/
public function contentAction(Request $request, ApplicationLogger $logger, TranslatorInterface $translator): Response
{
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$device->getDevice(); // returns "phone", "tablet" or "desktop"
$searchCX = $_ENV['GOOGLE_SEARCH_CX'];
$contactForm = $this->contactForm($request, $logger, $translator);
$success = false;
if ($contactForm == 'submitted') {
$success = true;
}
return $this->render('default/content.html.twig', [
'isDesktop' => $device->isDesktop(),
'isTablet' => $device->isTablet(),
'isPhone' => $device->isPhone(),
'deviceType' => $device->getDevice(),
'searchCX' => $searchCX,
'contactForm' => $contactForm,
'success' => $success
]);
}
/**
* @throws Exception
*/
public function contactForm(Request $request, ApplicationLogger $logger, TranslatorInterface $translator): \Symfony\Component\Form\FormView|string
{
// build form
$form = $this->createForm(ContactFormType::class);
// get form request
$form->handleRequest($request);
// set parameter for folder
$today = date("d_m_Y_H_i_s");
$month = date('m');
$year = date('Y');
// create Folder
$parentFolder = DataObject\Service::createFolderByPath('/Kontaktanfragen/' . $year . "/" . $month);
if ($form->isSubmitted() && $form->isValid()) {
// get form fields
$data = $form->getData();
// spam
if ($data['hidden'] !== NULL || $data['filled'] !== 'jsfilled') {
$logger->debug('Contact mail spam');
} else {
$params = [
'headtitle' => $translator->trans('email.contact.headtitle'),
'preheader' => $translator->trans('email.contact.preheader'),
'name' => $data['name'],
'lastname' => $data['lastname'],
/*'company' => $data['company'],*/
'email' => $data['email'],
'tel' => $data['tel'],
'message' => nl2br($data['message'])
];
$contactRequest = new ContactRequest();
$contactRequest->setParent($parentFolder);
$contactRequest->setKey($data['name'] . '_' . $today);
$contactRequest->setName($data['name']);
$contactRequest->setLastname($data['lastname']);
/*$contactRequest->setCompany($data['company']);*/
$contactRequest->setEmail($data['email']);
$contactRequest->setTel($data['tel']);
$contactRequest->setMessage($data['message']);
$contactRequest->setPublished(true);
$contactRequest->save();
// send mail
try {
$pageName = WebsiteSetting::getByName('pageName', null, $request->getLocale());
// send E-Mail to website Admin
$adminEmail = "milan.galusic@a4agentur.ch";
if (WebsiteSetting::getByName('ContactFormAdminMail')) {
$adminEmail = WebsiteSetting::getByName('ContactFormAdminMail',null, $request->getLocale());
}
// get params from WebsiteConfig
$mailDocPathAdmin = WebsiteSetting::getByName('mailContactDocAdmin', null, $request->getLocale());
$mailDocPathCustomer = WebsiteSetting::getByName('mailContactDocCustomer', null, $request->getLocale());
$mailDocAdmin = $mailDocPathAdmin->getData();
$mailDocCustomer = $mailDocPathCustomer->getData();
// send E-Mail to Admin
$mailAdmin = new Mail();
$mailAdmin->setIgnoreDebugMode(true);
$mailAdmin->to($adminEmail);
$mailAdmin->addReplyTo($data['email'], $data['name'] . " " . $data['lastname']);
$mailAdmin->setDocument($mailDocAdmin);
$mailAdmin->setParams($params);
$mailAdmin->send();
// send E-Mail to Customer / User
$mailCustomer = new \Pimcore\Mail();
$mailCustomer->setIgnoreDebugMode(true);
$mailCustomer->to($data['email']);
$mailCustomer->addReplyTo($adminEmail, $pageName->getData());
$mailCustomer->setDocument($mailDocCustomer);
$mailCustomer->setParams($params);
$mailCustomer->send();
} catch (Exception $e) {
$logger->debug('Contact mail failed: ' . $e);
}
} return 'submitted';
} else {
return $form->createView();
}
}
}