<?php
/**
* SecurityDocumentController extends BaseController extends FrontendController
*
*/
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Pimcore\Model\Document;
use Pimcore\Model\Asset;
use Pimcore\Tool\DeviceDetector;
use Pimcore\Translation\Translator;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Pimcore\Controller\Configuration\ResponseHeader;
use Symfony\Component\Routing\Annotation\Route;
use App\Captcha\Captcha;
use Carbon\Carbon;
class SecurityDocumentController extends BaseController
{
/**
* homepage action
*/
public function homepageAction(
Request $request,
Translator $translator
) {
$siteConfig = $this->document->getProperty('_siteConfig');
if ($siteConfig->getUseNewsblog()) {
$news = new \Pimcore\Model\DataObject\Newsblog\Listing();
$news ->setCondition("o_path LIKE '" . $siteConfig->getSiteNewsblogPath() . "%'");
$news ->setOrderKey("date");
$news ->setOrder("desc");
$news ->setLimit(3);
if ($siteConfig->getWidgetShowLatestNews()) {
foreach ($news as $article) {
$latestNews = $article;
break;
}
}
}
if ($siteConfig->getUseCalendar()) {
$calendar = new \Pimcore\Model\DataObject\CalendarDate\Listing();
$calendar ->setCondition("o_path LIKE '" . $siteConfig->getSiteCalendarPath() . "%' && date >= '" . time() . "'");
$calendar ->setOrderKey("date");
$calendar ->setOrder("asc");
$calendar ->setLimit(2);
}
$videoclips = new \Pimcore\Model\DataObject\Videoclip\Listing();
$videoclips ->setOrderKey("videoclipDate");
$videoclips ->setOrder("desc");
$videoclips ->setLimit(2);
if ($siteConfig->getWidgetShowLatestMedia()) {
foreach ($videoclips as $clip) {
$latestClip = $clip;
break;
}
}
return $this->render('sicherheitsdienst/homepage.html.twig', [
'languages' => $this->languages,
'locale' => $request->getLocale(),
'siteConfig' => $siteConfig,
'newsblog' => ((isset($news)) ? $news : null),
'latestNews' => ((isset($latestNews)) ? $latestNews : null),
'calendar' => ((isset($calendar)) ? $calendar : null),
'videoclips' => ((isset($videoclips)) ? $videoclips : null),
'latestClip' => ((isset($latestClip)) ? $latestClip : null),
'initWidgets' => 2
]);
}
/**
* document action
*/
public function documentAction(
Request $request,
Translator $translator
) {
$siteConfig = $this->document->getProperty('_siteConfig');
$calendar = new \Pimcore\Model\DataObject\CalendarDate\Listing();
$calendar ->setCondition("o_path LIKE '" . $siteConfig->getSiteCalendarPath() . "%' && date >= '" . time() . "'");
$calendar ->setOrderKey("date");
$calendar ->setOrder("asc");
$calendar ->setLimit(2);
$videoclips = new \Pimcore\Model\DataObject\Videoclip\Listing();
$videoclips ->setOrderKey("videoclipDate");
$videoclips ->setOrder("desc");
$videoclips ->setLimit(2);
// pre-generate Captcha for editables select form
$captcha = new Captcha('de');
return $this->render('sicherheitsdienst/document.html.twig', [
'languages' => $this->languages,
'locale' => $request->getLocale(),
'siteConfig' => $siteConfig,
'captcha' => $captcha->getCaptcha(),
'calendar' => $calendar,
'videoclips' => $videoclips
]);
}
/**
* newsblog action
*/
public function newsblogAction(
Request $request//,
//Translator $translator
) {
$siteConfig = $this->document->getProperty('_siteConfig');
if ( $request->get('nid') )
{
$newsArticle = \Pimcore\Model\DataObject\Newsblog::getById( $request->get('nid') );
if ( !$newsArticle->getPublished() )
$newsArticle = null;
if ( $newsArticle )
{
$newsArticle ->setHits( $newsArticle->getHits()+1 );
$newsArticle ->save();
}
}
$news = new \Pimcore\Model\DataObject\Newsblog\Listing();
$news ->setCondition("o_path LIKE '" . $siteConfig->getSiteNewsblogPath() . "%' && o_id <> '" . $request->get('nid') . "'");
$news ->setOrderKey("date");
$news ->setOrder("desc");
$news ->setLimit( LISTINGS_DEFAULT_LIMIT );
return $this->render('sicherheitsdienst/newsblog.html.twig', [
'languages' => $this->languages,
'locale' => $request->getLocale(),
'siteConfig' => $siteConfig,
'newsblog' => $news,
'newsArticle' => ( (isset($newsArticle) && $newsArticle instanceof \Pimcore\Model\DataObject\Newsblog ) ? $newsArticle : '' )
]);
}
/**
* newsblogAjax action
*/
#[Route('/ajax/newsblog/load')]
public function newsblogAjaxAction(
Request $request
) {
$siteConfig = $this->document->getProperty('_siteConfig');
if ( $request->get('offset') > 0 )
{
$response = new class {};
$response ->html = '';
$response ->offset = $request->get('offset') + AJAX_LISTINGS_DEFAULT_LIMIT;
$news = new \Pimcore\Model\DataObject\Newsblog\Listing();
$news ->setCondition("o_path LIKE '" . $siteConfig->getSiteNewsblogPath() . "%'");
$news ->setOrderKey("date");
$news ->setOrder("desc");
$news ->setOffset($request->get('offset'));
$news ->setLimit( LISTINGS_DEFAULT_LIMIT );
foreach ( $news as $i => $article )
{
$response ->html .= '<div class="col-12 col-md-12 col-xl-4">
<div class="newsblog-teaser">';
if ($siteConfig->getNewsblogShowPreviewImage() == 1)
{
$response ->html .= '<div class="teaser-image">';
if ( $article->getCover() )
{
$response->html .= '<a href="/news/article/' . $article->getId() . '/' . urlencode($article->getHeadline()) . '">
<img src="' . $article->getCover()->getThumbnail('newblogTeaserPreview') . '" alt="Beitrag ' . i . ' Titelbild" title="' . $article->getHeadline() . ' Titelbild" />
</a>';
}
$response ->html .= '</div>';
}
$response ->html .= '<h3 class="teaser-headline">
<span class="headline">' . ((strlen($article->getHeadline())>NEWSBLOG_HEADER_LENGTH) ? substr($article->getHeadline(), 0, NEWSBLOG_HEADER_LENGTH) . ' ...' : $article->getHeadline()) . '</span>
</h3>
<div class="teaser-text">
' . ((strlen($article->getTeaser())>NEWSBLOG_TEASER_LENGTH) ? (substr(strip_tags($article->getTeaser()), 0, NEWSBLOG_TEASER_LENGTH)) . ' ...' : strip_tags($article->getTeaser())) . '
</div>
<div class="teaser-options">
<a class="btn btn-outline" href="/news/article/' . $article->getId() . '/' . urlencode($article->getHeadline()) .'">Weiterlesen <span class="lsf">right</span></a>
</div>
</div>
</div>';
}
}
return new Response( json_encode($response) );
}
/**
* mediathek action
*/
public function mediathekAction(
Request $request
) {
$siteConfig = $this->document->getProperty('_siteConfig');
if ( $request->get('mid') )
{
$videoClip = \Pimcore\Model\DataObject\Videoclip::getById( $request->get('mid') );
if ( !$videoClip->getPublished() )
$videoClip = null;
if ( $videoClip )
{
$videoClip ->setHits( $videoClip->getHits()+1 );
$videoClip ->save();
}
}
$videoclips = new \Pimcore\Model\DataObject\Videoclip\Listing();
$videoclips ->setCondition("o_path LIKE '" . $siteConfig->getSiteMultimediaPath() . "%' && o_id <> '" . $request->get('mid') . "'");
$videoclips ->setOrderKey("videoclipDate");
$videoclips ->setOrder("desc");
$videoclips ->setLimit( LISTINGS_DEFAULT_LIMIT );
return $this->render('sicherheitsdienst/mediathek.html.twig', [
'languages' => $this->languages,
'locale' => $request->getLocale(),
'siteConfig' => $siteConfig,
'videoclip' => (isset($videoClip)) ? $videoClip : null,
'videoclips' => $videoclips
]);
}
/**
* mediathekAjax action
*/
#[Route('/ajax/mediathek/load')]
public function mediathekAjaxAction(
Request $request
) {
$siteConfig = $this->document->getProperty('_siteConfig');
if ( $request->get('offset') > 0 )
{
$response = new class {};
$response ->html = '';
$response ->offset = $request->get('offset') + AJAX_LISTINGS_DEFAULT_LIMIT;
$videoclips = new \Pimcore\Model\DataObject\Videoclip\Listing();
$videoclips ->setCondition("o_path LIKE '" . $siteConfig->getSiteMultimediaPath() . "%'");
$videoclips ->setOrderKey("videoclipDate");
$videoclips ->setOrder("desc");
$videoclips ->setOffset($request->get('offset'));
$videoclips ->setLimit( AJAX_LISTINGS_DEFAULT_LIMIT );
foreach ( $videoclips as $clip )
{
$response ->html .= '<div class="col-12 col-sm-6">
<div class="youtube-preview animated" data-animation="animate__slideInUp" data-timing="800" data-delay="100">
' . $clip->getVideoclipEmbeddingSrc() . '
<h3>' . $clip->getVideoclipTitle() . '</h3>
' . $clip->getVideoclipShortDescription() . '
</div>
</div>';
}
}
return new Response( json_encode($response) );
}
/**
* Renderlet Slider Action
*/
public function sliderAction (
Request $request,
Translator $translator
) {
// check for valid object + id
if ( $request->get('type') == 'object' && $request->get('id') )
{
$slider = \Pimcore\Model\DataObject\Slider::getById( $request->get('id') );
if ( $slider instanceof \Pimcore\Model\DataObject\Slider )
{
$sliderPanels = $slider->getImages();
$sliderBricks = $slider->getImages()->getBrickGetters();
$banners = [];
if ( count($sliderBricks) )
{
foreach ( $sliderBricks as $key => $getBanner )
{
$banners[] = call_user_func( array($sliderPanels, $getBanner), false );
}
}
// $this->view->banners = $banners;
return $this->render('sicherheitsdienst/slider.html.twig', [
'sliderId' => $slider->getKey(),
'sliderPanels' => $slider->getImages(),
'sliderIndicators' => $slider->getIndicators(),
'sliderControls' => $slider->getControls(),
'banners' => array_filter( $banners ), // remove empty values
'sliderError' => ''
]);
}
else
{
return $this->render('sicherheitsdienst/slider.html.twig', [
'sliderError' => "Slider konnte nicht geladen werden."
]);
}
}
}
/**
* sliderGalleryAction
*/
public function sliderGalleryAction(
Request $request
) {
if ('asset' === $request->get('type')) {
$asset = Asset::getById($request->get('id'));
if ('folder' === $asset->getType()) {
return $this->render('sicherheitsdienst/sliderGallery.html.twig', [
'assets' => $asset->getChildren(),
'editmode' => $request->get('editmode'),
'images' => $request->get('images'),
'orientation' => $request->get('orientation')
]);
}
}
return [];
}
/**
* Document contact action
*/
public function contactAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$siteConfig = $this->document->getProperty('_siteConfig');
// init vars
$message = [];
$mailSubmitted = false;
$mailRendered = false;
$spamTrapTriggered = false;
// get post form data
$post_vars = $request->request->all();
$formdata = [];
foreach ($post_vars as $key => $var) {
$formdata[$key] = $var;
}
// add logo, name, imprint, ...
if (isset($siteConfig)) {
$formdata['website_logo'] = '<img src="' . $siteConfig->getWebsiteLogo() . '" />';
$formdata['website_name'] = $siteConfig->getWebsiteName();
$formdata['website_imprint'] = $siteConfig->getWebsiteName();
}
// check Spam bot trap
if ( $request->get('email_address') != '' )
$spamTrapTriggered = true;
// captcha initialize and validate
$captcha = new Captcha('de');
$captcha_validated = false;
if ($request->get('captcha_key')) {
$captcha_validated = $captcha->validateCaptcha($request->get('captcha_key'), $request->get('captcha_answer'));
}
if (isset($formdata['contact_token'])
&& filter_var($formdata['contactEmail'], FILTER_VALIDATE_EMAIL)
&& $spamTrapTriggered === false
&& $captcha_validated === true
) {
$mail = new \Pimcore\Mail();
$mail ->addTo($siteConfig->getWebsiteEmailAddress());
$mail ->addTo($formdata['contactEmail']);
// $mail ->addReplyTo($formdata['contactEmail']);
$mail ->setSubject($siteConfig->getWebsiteName() . ' - Neue Anfrage erhalten');
$mail ->setDocument(Document::getByPath( '/sicherheitsdienst/email-templates/contact-default' ));
$mail ->setParams( $formdata );
$mail ->send();
$mailSubmitted = true;
} elseif (isset($formdata['contact_token'])) {
$message[] = '<h3 style="color: #c00;"><span class="lsf">trouble</span> Fehler</h3><p style="color: #c00;">Ihre Nachricht konnte nicht gesendet werden.</p>';
if ( !$captcha_validated )
$message[] = '<p style="color: #c00;">Ungültige Captcha-Eingabe.</p>';
}
return $this->render('sicherheitsdienst/contact.html.twig', [
'languages' => $this->languages,
'locale' => $request->getLocale(),
'siteConfig' => $siteConfig,
'device' => $device,
'captcha' => $captcha->getCaptcha(),
'formdata' => $formdata,
'mailSubmitted' => $mailSubmitted,
'message' => $message
]);
}
/**
* defaultMailAction
*/
public function defaultMailAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
return $this->render('sicherheitsdienst/defaultMailTemplate.html.twig', [
'device' => $device,
'languages' => $this->languages,
'locale' => $request->getLocale()
]);
}
/**
* search action
*/
#[Route('/search-old')]
public function searchAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$siteConfig = $this->document->getProperty('_siteConfig');
$texts = [];
$searchCount = 0;
$resultsNews = null;
$resultsVideoclips = null;
$resultsDocs = null;
$resultsShop = null;
if ( $request->get('search')!='' )
{
// search in documents
$docs = new \App\Website\Search\Document( $request->get('search') );
$docs ->setKeywords( $request->get('search') );
// search document.title and editables (type=wysiwyg,input) data field
$docs ->setDocumentFields( ["data"] );
if ( $resultsDocs = $docs ->search( 'id' ) )
foreach ( $resultsDocs as $r)
$searchCount++;
// search in newsblog
$news = new \App\Website\Search\Newsblog( $request->get('search') );
$news ->setKeywords( $request->get('search') );
$news ->setSearchRootPath( $siteConfig->getSiteNewsblogPath() );
$news ->setDataObjectFields( ["headline","article","author"] );
if ( $resultsNews = $news ->search('date', 'desc') )
foreach ( $resultsNews as $r)
$searchCount++;
// search in videoclips
$videoclips = new \App\Website\Search\Mediathek( $request->get('search') );
$videoclips ->setKeywords( $request->get('search') );
$videoclips ->setSearchRootPath( $siteConfig->getSiteMultimediaPath() );
$videoclips ->setDataObjectFields( ["videoclipTitle","videoclipDescription"] );
if ( $resultsVideoclips = $videoclips ->search('videoclipDate', 'desc') )
foreach ( $resultsVideoclips as $r)
$searchCount++;
}
return $this->render('sicherheitsdienst/search.html.twig', [
'languages' => $this->languages,
'locale' => $request->getLocale(),
'device' => $device,
'siteConfig' => $siteConfig,
'texts' => $texts,
'search' => $request->get('search'),
'searchCount' => $searchCount,
'resultsDocuments' => $resultsDocs,
'resultsNews' => $resultsNews,
'resultsVideoclips' => $resultsVideoclips
]);
}
/**
* xmlSitemapAction
*/
public function xmlSitemapAction ()
{
$log = '';
$xml = '';
$shop = \Pimcore\Model\DataObject\Newsblog::getByPATH( '' );
$sitemaps_path = './_sitemaps';
$sitemap_filename = 'sitemap.xml';
if ( !file_exists($sitemaps_path) )
mkdir($sitemaps_path, 0755);
// open handle
$handle = fopen( $sitemaps_path . '/' . $sitemap_filename, 'w+' );
if ( $handle )
{
$log .= "Start generate XML Sitemap ...\n";
$sitemap = new \AppBundle\Sitemap\Sitemap();
$xml = $sitemap ->generateXmlSitemap ( true, $shop->getShop_path() );
fputs( $handle, $xml );
fclose( $handle );
$log .= "XML Sitemap " . $sitemaps_path . '/' . $sitemap_filename . " ... written.\n";
}
return new Response( nl2br($log) );
}
}
?>