<?php
namespace App\Controller;
use App\Form\ContactFormType;
use Devkitchen\DocumentIndexingBundle\Annotations\IndexingDocumentType;
use Devkitchen\DocumentIndexingBundle\Controller\DocumentTypeAwareController;
use Devkitchen\DocumentIndexingBundle\DataExtractorService\DataExtractorService;
use Devkitchen\DocumentIndexingBundle\DataExtractorService\DocumentTypeHandlerFactory;
use Devkitchen\DocumentIndexingBundle\IndexingService\IndexingService;
use Pimcore\Config;
use Pimcore\Log\ApplicationLogger;
use Pimcore\Mail;
use Pimcore\Model\Asset;
use Pimcore\Model\Document\Editable\Relations;
use Pimcore\Model\Document\Page;
use Pimcore\Translation\Translator;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController extends BaseController implements DocumentTypeAwareController {
/**
* @param Request $request
*
* @return Response
*/
public function indexAction(Request $request, IndexingService $indexingService): Response {
$introItems = [];
/** @var Relations $documentRelations */
$documentRelations = $this->getDocumentEditable( 'relations', 'intro-items');
if (!$documentRelations->isEmpty()) {
$documentLinks = $documentRelations->getData();
/**
* @var int $index
* @var Page $documentLink
*/
foreach($documentLinks as $index => $documentLink) {
$documentData = $indexingService->get( $documentLink );
if (!$documentData) continue;
$imageId = $documentData->teaserAssetBigId ?: $documentData->teaserAssetId;
if ($imageId) {
$asset = Asset::getById( $imageId );
}
else {
$asset = $this->document->getProperty( 'document-teaser-image-fallback' );
}
if ($asset instanceof Asset\Image) {
$image = $asset->getThumbnail('intro')->getHtml();
}
$introItems[] = [
'title' => $documentData->teaserTitleBig ?: $documentData->teaserTitle,
'content' => $documentData->teaserContentBig ?: $documentData->teaserContent,
'image' => $image,
'link' => $documentLink->getHref()
];
}
}
return $this->render( 'default/index.html.twig', [
'layoutClass' => 'layout--index',
'introItems' => $introItems
]);
}
/**
* @param Request $request
* @return Response
*/
public function defaultAction(Request $request): Response {
return $this->render('default/default.html.twig');
}
/**
* @param Request $request
*
* @return Response
*/
public function contactAction(Request $request, Translator $translator, ApplicationLogger $applicationLogger, KernelInterface $kernel): Response {
$formErrors = [];
$form = $this->createForm( ContactFormType::class );
$form->handleRequest($request);
if ($request->isMethod( 'POST')) {
if ($form->isSubmitted()) {
if ($form->isValid()) {
$formData = $form->getData();
$referer = $request->headers->get( 'referer' );
$checkForReferer = $kernel->getEnvironment() == 'prod' ? 'nuernberger-bratwuerste' : 'cooking-pot';
$honeypotMail = $request->get( 'email-repeat', false );
if ( $honeypotMail != '' || strpos( $referer, $checkForReferer ) === false ) {
$applicationLogger->info( 'Spam protection (contactForm), tried with mail: ' . $formData['email'] );
throw new HttpException( Response::HTTP_NOT_ACCEPTABLE, 'Ehm no. EMR filled, ref not matching' );
}
//do stuff and send mail
$body = 'Name: '.$formData['name']."\r\n" .
'Email: '.$formData['email']."\r\n\n" .
'Nachricht: '.$formData['message'];
try {
$config = Config::getSystemConfiguration('email');
$mail = new Mail();
$mail->to($config['sender']['email']);
$mail->subject( $translator->trans( 'mail.subject.contact-form' ) );
$mail->text( $body );
$mail->send();
return new RedirectResponse( $this->document->getProperty( 'redirect-contactform-success') );
}
catch (\Exception $exception) {
$applicationLogger->logException( 'Mailer error (contactForm)', $exception);
return new RedirectResponse( $this->document->getProperty( 'redirect-contactform-error') );
}
}
else {
foreach ($form->getErrors() as $error) {
$formErrors[] = $error->getMessage();
}
}
}
}
return $this->render( 'default/contact.html.twig', [
'form' => $form->createView(),
'errors' => $formErrors
]);
}
/**
* @Route("/debug")
* @param Request $request
*
* @return JsonResponse
*/
public function debugAction(Request $request, IndexingService $x): JsonResponse {
//$y = $x->create( 'recipe');
//$da = $y->getData();
//p_r($da);
//p_r( Page::getById( 35)->getProperty( 'document-teaser-image')->getId() );
//p_r($this->container);
//p_r($this->container->get('pimcore.email.sender.email'));
$config = Config::getSystemConfiguration('email');
p_r($config);
//p_r($x->getDocumentTypes());
//
//p_r($x->getFieldAggregated( 'recipe', 'documentSubtype' ));
//p_r($x->listing( 'recipe', ['default'] ));
return new JsonResponse([]);
}
}