<?php
namespace App\Controller;
use App\Form\ContactFormType;
use App\Form\OrderFormType;
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\DataObject\OrderRequest;
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;
}
$orderForm = $this->orderForm($request, $logger, $translator);
$success2 = false;
if ($orderForm == 'submitted') {
$success2 = true;
}
return $this->render('default/content.html.twig', [
'isDesktop' => $device->isDesktop(),
'isTablet' => $device->isTablet(),
'isPhone' => $device->isPhone(),
'deviceType' => $device->getDevice(),
'searchCX' => $searchCX,
'contactForm' => $contactForm,
'orderForm' => $orderForm,
'success' => $success,
'success2' => $success2,
]);
}
/**
* @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'],
'email' => $data['email'],
'tel' => $data['tel'],
'vehicle' => $data['vehicle'],
'products' => $data['products'],
'contactMethod' => $data['contactMethod'],
'newsletter' => $data['newsletter'],
'message' => nl2br($data['message'])
];
$contactRequest = new ContactRequest();
$contactRequest->setParent($parentFolder);
$contactRequest->setKey($data['name'] . '-' . $data['lastname'] . '_' . $today);
$contactRequest->setName($data['name']);
$contactRequest->setLastname($data['lastname']);
$contactRequest->setEmail($data['email']);
$contactRequest->setTel($data['tel']);
$contactRequest->setVehicle($data['vehicle']);
$contactRequest->setProducts($data['products']);
$contactRequest->setContactMethod($data['contactMethod']);
$contactRequest->setNewsletter($data['newsletter']);
$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 = "info@swiss-hexagon.ch";
// if (WebsiteSetting::getByName('ContactFormAdminMail')) {
// $adminEmail = WebsiteSetting::getByName('ContactFormAdminMail',null, $request->getLocale());
// }
// get params from WebsiteConfig
$mailDocPathAdmin = WebsiteSetting::getByName('mailContactAdmin', null, $request->getLocale());
$mailDocPathCustomer = WebsiteSetting::getByName('mailContactClient', null, $request->getLocale());
$mailDocAdmin = $mailDocPathAdmin->getData();
$mailDocCustomer = $mailDocPathCustomer->getData();
// send E-Mail to Admin
$mailAdmin = new Mail();
$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->setDocument($mailDocCustomer);
$mailCustomer->setParams($params);
$mailCustomer->send();
} catch (Exception $e) {
$logger->debug('Contact mail failed: ' . $e);
}
} return 'submitted';
} else {
return $form->createView();
}
}
public function orderForm(Request $request, ApplicationLogger $logger, TranslatorInterface $translator): \Symfony\Component\Form\FormView|string
{
// build form
$form = $this->createForm(OrderFormType::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('/Bestellanfragen/' . $year . "/" . $month);
if ($form->isSubmitted() && $form->isValid()) {
// get form fields
$data = $form->getData();
// spam
if ($data['hidden'] !== NULL || $data['filled'] !== 'jsfilled') {
$logger->debug('Order mail spam');
} else {
$params = [
'headtitle' => $translator->trans('email.order.headtitle'),
'preheader' => $translator->trans('email.order.preheader'),
'name' => $data['name'],
'lastname' => $data['lastname'],
'email' => $data['email'],
'tel' => $data['tel'],
'street' => $data['street'],
'streetnr' => $data['streetnr'],
'postal' => $data['postal'],
'city' => $data['city'],
'street2' => $data['street2'],
'streetnr2' => $data['streetnr2'],
'postal2' => $data['postal2'],
'city2' => $data['city2'],
'products' => $data['products'],
'termsconditions' => $data['termsconditions'],
'privacypolicy' => $data['privacypolicy'],
'newsletter' => $data['newsletter'],
'message' => nl2br($data['message'])
];
$orderRequest = new OrderRequest();
$orderRequest->setParent($parentFolder);
$orderRequest->setKey($data['name'] . '_' . $today);
$orderRequest->setName($data['name']);
$orderRequest->setLastname($data['lastname']);
$orderRequest->setEmail($data['email']);
$orderRequest->setTel($data['tel']);
$orderRequest->setStreet($data['street']);
$orderRequest->setStreetnr($data['streetnr']);
$orderRequest->setPostal($data['postal']);
$orderRequest->setCity($data['city']);
$orderRequest->setStreet2($data['street2']);
$orderRequest->setStreetnr2($data['streetnr2']);
$orderRequest->setPostal2($data['postal2']);
$orderRequest->setCity2($data['city2']);
$orderRequest->setProducts($data['products']);
$orderRequest->setTermsConditions($data['termsconditions']);
$orderRequest->setPrivacyPolicy($data['privacypolicy']);
$orderRequest->setNewsletter($data['newsletter']);
$orderRequest->setMessage($data['message']);
$orderRequest->setPublished(true);
$orderRequest->save();
// send mail
try {
// $pageName = WebsiteSetting::getByName('pageName', null, $request->getLocale());
// // send E-Mail to website Admin
// $adminEmail = "info@swiss-hexagon.ch";
// if (WebsiteSetting::getByName('ContactFormAdminMail')) {
// $adminEmail = WebsiteSetting::getByName('ContactFormAdminMail',null, $request->getLocale());
// }
// get params from WebsiteConfig
$mailDocPathAdmin = WebsiteSetting::getByName('mailOrderAdmin', null, $request->getLocale());
$mailDocPathCustomer = WebsiteSetting::getByName('mailOrderClient', null, $request->getLocale());
$mailDocAdmin = $mailDocPathAdmin->getData();
$mailDocCustomer = $mailDocPathCustomer->getData();
// send E-Mail to Admin
$mailAdmin = new Mail();
$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->setDocument($mailDocCustomer);
$mailCustomer->setParams($params);
$mailCustomer->send();
} catch (Exception $e) {
$logger->debug('Order mail failed: ' . $e);
}
} return 'submitted';
} else {
return $form->createView();
}
}
}