<?php
namespace App\Controller;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Annotation\Route;
use App\Form\Type\ContactType;
class MainController extends BaseController
{
/**
* @Route("/", name="main")
* @Route("/main/{sub}", name="main_sub")
*/
public function index($sub = null): Response
{
return $this->render('main/index.html.twig', [
'controller_name' => 'MainController',
'subPage' => $sub
]);
}
/**
* @Route("/timelines/edit/{id}", name="edit_timelines")
*/
public function editTimelineAction(Request $request, $id = null)
{
if ($id !== null) {
$id = preg_replace('/[^a-z0-9_-]/i', '', $id);
}
return $this->render('main/editor.html.twig', [
'id' => $id,
'title' => $id,
'editorUser' => $this->getUser(),
]);
}
/**
* @Route("/timelines/{id}", name="timelines")
*/
public function timelinesAction(Request $request, $id=null)
{
if($id == 'info')
{
return $this->render('main/timelines.html.twig',
array('id' => 'info', 'title'=> "Timelines")
);
}
else
{
if($id !== null)
{
$id = preg_replace('/[^a-z0-9_-]/i', '', $id);
}
return $this->render('main/timelines.html.twig',
array('id' => $id, 'title' => $id)
);
}
}
/**
* @Route("/tour/{id}", name="tour")
*/
public function tourAction(Request $request, $id)
{
if($id !== null)
{
$id = preg_replace ( '/[^a-z0-9 ]/i', '', $id );
}
$title = ucwords($id);
return $this->render('main/album.html.twig',
array('album' => $id, 'title' => $title, 'backmenutitle'=>'Touren', 'backnav' => 'navmenuTouren')
);
}
/**
* @Route("/album/{id}", name="album")
*/
public function albumAction(Request $request, $id)
{
if($id !== null)
{
$id = preg_replace ( '/[^a-z0-9 ]/i', '', $id );
}
$title = ucwords($id);
return $this->render('main/album.html.twig',
array('album' => $id, 'title' => $title, 'backmenutitle'=>'Projekte', 'backnav' => 'navmenuProjekte')
);
}
/**
* @Route("/kontakt/{subject}", name="contact")
*/
public function contactAction(MailerInterface $mailer, Request $request, $subject = null)
{
$form = $this->createForm(ContactType::class, ['subject' => $subject]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$name = (string) $form->get('name')->getData();
$from = (string) $form->get('email')->getData();
$subjectValue = (string) $form->get('subject')->getData();
$content = (string) $form->get('content')->getData();
$robotHoneypot = $form->get('spam_content')->getData();
$messageData = "Name: {$name}\n"
. "E-Mail: {$from}\n"
. "Subject: {$subjectValue}\n"
. "IP: {$request->getClientIp()}\n"
. "Message: {$content}\n";
$spam = false;
foreach (['course-fitness.com'] as $spamEmailTerm) {
if (str_contains(strtolower($from), strtolower($spamEmailTerm))) {
$spam = true;
break;
}
}
$looksLikeSpam = $robotHoneypot !== null && $robotHoneypot !== ''
|| $spam
|| preg_match('(\\ssex|\\sporn|essay|girls|casino|money|iphone|\\scrypto|\\.ru|bitcoin)', strtolower($messageData)) === 1
|| preg_match('(\\.ru)', strtolower($from)) === 1;
if ($looksLikeSpam) {
// Silent success for bots; no mail.
$this->addFlash('success', 'Ihre Nachricht wurde versandt. Ich werde mich in Kürze bei Dir melden.');
return $this->redirectToRoute('contact');
}
try {
$email = (new TemplatedEmail())
->from(new Address($_ENV['MAILER_FROM'], 'martinbrake.de'))
->to(new Address($_ENV['ADMIN_MAILER_TO'], 'Admin'))
->replyTo(new Address($from, $name))
->subject('Kontakt: ' . $subjectValue)
->htmlTemplate('email/message.html.twig')
->context([
'name' => $name,
'ip' => $request->getClientIp(),
'mail' => $from,
'message' => $content,
]);
$mailer->send($email);
$this->addFlash('success', 'Ihre Nachricht wurde versandt. Ich werde mich in Kürze bei Dir melden.');
} catch (\Exception $e) {
$this->addFlash('error', 'Irgendetwas ist gründlich schief gelaufen. Ich kümmere mich darum!');
}
return $this->redirectToRoute('contact');
}
return $this->render('main/contact.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/impressum", name="impressum")
*/
public function impressumAction()
{
return $this->render('main/impressum.html.twig');
}
/**
* @Route("/datenschutz", name="datenschutz")
*/
public function datenschutzAction()
{
return $this->render('main/datenschutz.html.twig');
}
}