<?php
namespace App\Controller;
use AccountBundle\Services\AccountService;
use App\Form\ContactFormType;
use App\Form\KlantenkaartFormType;
use App\Form\NieuwsbriefFormType;
use App\Form\CadeaubonFormType;
use App\Services\GeneralSendMailService;
use App\Services\MailService;
use App\Services\CheckwebsitesettingService;
use App\Services\ReCaptchaService;
use App\Services\MailchimpService;
use App\Services\MollieService;
use Pimcore\Controller\FrontendController;
use Pimcore\Mail;
use Pimcore\Config\Config;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Pimcore\Translation\Translator;
use Pimcore\Model\DataObject;
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mailer\Mailer;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use MultilingualBundle\Service\DocumentLookupService;
class ContactController extends BaseController
{
protected $recaptcha;
protected $recaptchaVersion;
protected $recaptchaPublicKey;
protected $checkwebsitesettingService;
protected $inotherlang;
protected $translator;
protected $sendmail;
protected $currentLanguage;
protected $userdata;
protected $params;
protected $mailChimp;
protected $mollie;
public function __construct(CheckwebsitesettingService $checkwebsitesettingService, DocumentLookupService $inotherlang, Translator $translator, ReCaptchaService $recaptcha, GeneralSendMailService $sendmail, AccountService $userdata, ParameterBagInterface $params, MailchimpService $mailChimp, MollieService $mollie){
$this->checkwebsitesettingService = $checkwebsitesettingService;
$this->inotherlang = $inotherlang;
$this->translator = $translator;
$this->recaptcha = $recaptcha;
$this->recaptchaVersion = $recaptcha->getVersion();
$this->recaptchaPublicKey = $recaptcha->getPublicKey();
$this->sendmail = $sendmail;
$this->userdata = $userdata;
$this->params = $params;
$this->mailChimp = $mailChimp;
$this->mollie = $mollie;
}
////////////////////// General forms
///
/**
*
* @param Request $request
* @param Translator $translator
*
* @return Response
*
* @throws \Exception
*/
public function defaultAction(Request $request)
{
$formName = ContactFormType::class;
$emailTemplate = 'email_contact'; // Email template contact
$emailTemplateConfirm = 'email_customer'; // Email template contact confirm
///////// EDIT VARIABLES ABOVE
$this->currentLanguage = $request->getLocale();
return $this->_defaultForm($request, $formName, $this->recaptchaVersion, $emailTemplate, $emailTemplateConfirm);
}
public function klantenkaartAction(Request $request)
{
$formName = KlantenkaartFormType::class;
$emailTemplate = 'email_contact_klanten'; // Email template klantenkaart
$emailTemplateConfirm = 'email_customer_klanten'; // Email template klantenkaart confirm
///////// EDIT VARIABLES ABOVE
$this->currentLanguage = $request->getLocale();
return $this->_klantenkaartForm($request, $formName, $this->recaptchaVersion, $emailTemplate, $emailTemplateConfirm);
}
public function mailchimpAction(Request $request)
{
$formName = NieuwsbriefFormType::class;
$emailTemplate = 'email_contact_nieuwsbrief'; // Email template mailchimp
$emailTemplateConfirm = 'email_customer_nieuwsbrief'; // Email template mailchimp confirm
///////// EDIT VARIABLES ABOVE
$this->currentLanguage = $request->getLocale();
return $this->_mailchimpForm($request, $formName, $this->recaptchaVersion, $emailTemplate, $emailTemplateConfirm);
}
public function cadeaubonAction(Request $request)
{
$formName = CadeaubonFormType::class;
///////// EDIT VARIABLES ABOVE
$this->currentLanguage = $request->getLocale();
return $this->_cadeaubonForm($request, $formName, $this->recaptchaVersion);
}
///////////////////////// End general forms
protected function _defaultForm(Request $request, $formName, $recaptcha = NULL, $emailTemplate = NULL, $emailTemplateConfirm = NULL)
{
$success = false;
// initialize form and handle request data
if($formName){
$form = $this->createForm($formName);
$form->handleRequest($request);
}
// handle form
if ($form->isSubmitted()) {
if ($form->isValid()) {
$params = $request->request->all();
$message = "Bedankt voor uw bericht. We nemen zo snel mogelijk contact met u op!";
if($recaptcha){
if($this->recaptcha->captchaverify($params)){
$success = true;
$data = $form->getData();
$this->sendmail->_sendMailDefaultForm($data, "$emailTemplate", "$emailTemplateConfirm", "$message");
}else{
$message = "Captcha code is niet correct!";
$this->addFlash("warning", $message);
}
}else{
$success = true;
$data = $form->getData();
$this->sendmail->_sendMailDefaultForm($data, "$emailTemplate", "$emailTemplateConfirm", "$message");
}
}
}
return $this->render('contact/default.html.twig', [
'form' => $form->createView(),
'recaptcha' => $this->recaptchaVersion,
'recaptchaPublic' => $this->recaptchaPublicKey,
'success' => $success,
'userObject' => $this->userdata->getUserData($request)
// 'error' => $error,
// 'hideBreadcrumbs' => true
]);
}
protected function _klantenkaartForm(Request $request, $formName, $recaptcha = NULL, $emailTemplate = NULL, $emailTemplateConfirm = NULL)
{
$success = false;
// initialize form and handle request data
if($formName){
$form = $this->createForm($formName);
$form->handleRequest($request);
}
// handle form
if ($form->isSubmitted()) {
if ($form->isValid()) {
$params = $request->request->all();
$message = "Bedankt voor uw bericht. We nemen zo snel mogelijk contact met u op!";
// Klantenkaart moet worden aangevinkt door Holvoet zelf
if($recaptcha){
if($this->recaptcha->captchaverify($params)){
$success = true;
$data = $form->getData();
$this->_saveKlantenKaart($request, $data);
$this->sendmail->_sendMailDefaultForm($data, "$emailTemplate", "$emailTemplateConfirm", "$message");
}else{
$message = "Captcha code is niet correct!";
$this->addFlash("warning", $message);
}
}else{
$success = true;
$data = $form->getData();
$this->_saveKlantenKaart($request, $data);
$this->sendmail->_sendMailDefaultForm($data, "$emailTemplate", "$emailTemplateConfirm", "$message");
}
}
}
return $this->render('contact/klantenkaart.html.twig', [
'form' => $form->createView(),
'recaptcha' => $this->recaptchaVersion,
'recaptchaPublic' => $this->recaptchaPublicKey,
'success' => $success,
'userObject' => $this->userdata->getUserData($request)
// 'error' => $error,
// 'hideBreadcrumbs' => true
]);
}
protected function _saveKlantenKaart($request, $data)
{
/** @var \Pimcore\Model\DataObject\UserPortal $objectUser */
$session = $request->getSession();
// if User is logged in
// Check if user is already logged in
if($session->get('userLogged')) {
// Save userObject klantenkaart
$userObj = $session->get('userLogged');
if (!empty($userObj)) {
$userId = $userObj->getId();
$objectUser = DataObject\UserPortal::getById($userId);
$objectUser->setNaam($data['lastname']);
$objectUser->setVoornaam($data['firstname']);
$objectUser->setTel($data['phone']);
$objectUser->setAdres_straat($data['street']);
$objectUser->setAdres_nr($data['streetnr']);
$objectUser->setAdres_postcode($data['postcode']);
$objectUser->setAdres_stad($data['city']);
$objectUser->save();
// Reset session
$session = $request->getSession()->set('userLogged', $objectUser);
}
}
}
protected function _mailchimpForm(Request $request, $formName, $recaptcha = NULL, $emailTemplate = NULL, $emailTemplateConfirm = NULL)
{
$success = false;
// initialize form and handle request data
if($formName){
$form = $this->createForm($formName);
$form->handleRequest($request);
}
// handle form
if ($form->isSubmitted()) {
if ($form->isValid()) {
$params = $request->request->all();
$message = "Bedankt voor uw bericht. We nemen zo snel mogelijk contact met u op!";
// register to mailchimp
// Save userObject
// Reset session
if($recaptcha){
if($this->recaptcha->captchaverify($params)){
$success = true;
$data = $form->getData();
$this->_saveToMailchimp($request, $data);
$this->sendmail->_sendMailDefaultForm($data, "$emailTemplate", "$emailTemplateConfirm", "$message");
}else{
$message = "Captcha code is niet correct!";
$this->addFlash("warning", $message);
}
}else{
$success = true;
$data = $form->getData();
$this->_saveToMailchimp($request, $data);
$this->sendmail->_sendMailDefaultForm($data, "$emailTemplate", "$emailTemplateConfirm", "$message");
}
}
}
return $this->render('contact/mailchimp.html.twig', [
'form' => $form->createView(),
'recaptcha' => $this->recaptchaVersion,
'recaptchaPublic' => $this->recaptchaPublicKey,
'success' => $success,
'userObject' => $this->userdata->getUserData($request)
// 'error' => $error,
// 'hideBreadcrumbs' => true
]);
}
protected function _saveToMailchimp($request, $data)
{
$session = $request->getSession();
$data['marketing'] = [
$data['reqone'],
$data['reqtwo']
];
$resultSend = $this->mailChimp->sendToMailChimp($data);
if($resultSend){
$message = "MailChimp: Bedankt voor uw bericht. Je bent ingeschreven!";
$message = $this->translator->trans($message);
$session->getFlashBag()->add('success', $message);
}
/** @var \Pimcore\Model\DataObject\UserPortal $objectUser */
// if User is logged in
// Check if user is already logged in
if($session->get('userLogged')) {
// Save userObject klantenkaart
$userObj = $session->get('userLogged');
if (!empty($userObj)) {
$userId = $userObj->getId();
$objectUser = DataObject\UserPortal::getById($userId);
$objectUser->setNaam($data['lastname']);
$objectUser->setVoornaam($data['firstname']);
$objectUser->setNewsletter(true);
$objectUser->save();
// Reset session
$session = $request->getSession()->set('userLogged', $objectUser);
}
}
}
protected function _cadeaubonForm(Request $request, $formName, $recaptcha = NULL, $emailTemplate = NULL, $emailTemplateConfirm = NULL)
{
$success = false;
// initialize form and handle request data
if($formName){
$form = $this->createForm($formName);
$form->handleRequest($request);
}
// handle form
if ($form->isSubmitted()) {
if ($form->isValid()) {
$params = $request->request->all();
if($params['cadeaubon_form']['amount'] > 0){
$message = "Bedankt voor uw bericht. We maken een cadeaubon op.";
// register to mailchimp
// Save userObject
// Reset session
if($recaptcha){
if($this->recaptcha->captchaverify($params)){
$success = true;
$data = $form->getData();
$paymentLink = $this->_sendToMollie($request, $data);
header("Location: " . $paymentLink, true, 303);
die();
// $this->sendmail->_sendMailDefaultForm($data, "$emailTemplate", "$emailTemplateConfirm", "$message");
}else{
$message = "Captcha code is niet correct!";
$this->addFlash("warning", $message);
}
}else{
$success = true;
$data = $form->getData();
$paymentLink = $this->_sendToMollie($request, $data);
header("Location: " . $paymentLink, true, 303);
die();
// $this->sendmail->_sendMailDefaultForm($data, "$emailTemplate", "$emailTemplateConfirm", "$message");
}
}else{
$message = "Bedrag van cadeaubon is te laag!";
$this->addFlash("warning", $message);
}
}
}
return $this->render('contact/cadeaubon.html.twig', [
'form' => $form->createView(),
'recaptcha' => $this->recaptchaVersion,
'recaptchaPublic' => $this->recaptchaPublicKey,
'success' => $success,
'userObject' => $this->userdata->getUserData($request)
// 'error' => $error,
// 'hideBreadcrumbs' => true
]);
}
protected function _sendToMollie($request, $data)
{
// Create payment Object
$paymentObject = $this->mollie->createPaymentForCadeaubon($data);
// Send to Mollie to pay
$paymentLink = $this->mollie->sendPayment($request, $paymentObject);
return $paymentLink;
// Return if it has been payed
}
}