<?php
/**
* BlogController extends BaseController extends FrontendController
*
*/
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Pimcore\Controller\Configuration\ResponseHeader;
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\Routing\Annotation\Route;
use Carbon\Carbon;
use App\Blog\Blog;
use App\Captcha\Captcha;
use App\Website\Search\Newsblog;
class BlogController extends BaseController
{
/**
* Blog homepage action
*/
public function homepageAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$blog = $this->document->getProperty('blog');
// $tools = new Blog;
$categories = null;
$articles = null;
$article = null;
// return new Response( $blog->getCategoriesRoot() );
if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
{
$categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$categories ->setCondition("o_path = '" . $blog->getCategoriesRoot() . "/'");
$categories ->setOrderKey("position");
$categories ->setOrder("asc");
$articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
$articles ->setCondition("o_path LIKE '" . $blog->getArticlesRoot() . "%' && isArchived <> '1'");
$articles ->setOrderKey('date');
$articles ->setOrder('desc');
$articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
// set latest article for og data
if ( count($articles) )
foreach ($articles as $a)
if ( !$article )
$article = $a;
}
return $this->render('blog/homepage.html.twig', [
'languages' => $this->getValidLanguages(),
'locale' => $request->getLocale(),
'device' => $device,
'blog' => $blog,
'navigation' => Blog::blogNavigation( $categories, $blog->getCategoriesRoot() ),
'catgories' => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories : null,
'articles' => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles : null,
'article' => $article
]);
}
/**
* Blog document action
*/
public function documentAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$blog = $this->document->getProperty('blog');
if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
{
$categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$categories ->setCondition("o_path = '" . $blog->getCategoriesRoot() . "/'");
$categories ->setOrderKey("position");
$categories ->setOrder("asc");
$articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
$articles ->setCondition("o_path LIKE '" . $blog->getArticlesRoot() . "%' && isArchived <> '1'");
$articles ->setOrderKey('date');
$articles ->setOrder('desc');
$articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
}
return $this->render('blog/document.html.twig', [
'languages' => $this->getValidLanguages(),
'locale' => $request->getLocale(),
'device' => $device,
'blog' => $blog,
'navigation' => Blog::blogNavigation( $categories, $blog->getCategoriesRoot() ),
'catgories' => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories : null,
'articles' => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles : null
]);
}
/**
* Blog category action
*/
public function categoryAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$blog = $this->document->getProperty('blog');
$category = null;
$categoryId = ($request->get('cid')) ? $request->get('cid') : '';
$categoryKey = ($request->get('ckey')) ? $request->get('ckey') : '';
$findSubcats = "";
$article = null;
if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
{
$categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$categories ->setCondition("o_path = '" . $blog->getCategoriesRoot() . "/'");
$categories ->setOrderKey("position");
$categories ->setOrder("asc");
$category = \Pimcore\Model\DataObject\BlogCategory::getById($categoryId);
if ( !$category && $categoryKey!='' )
{
$list = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$list ->setCondition("o_path LIKE '" . $blog->getCategoriesRoot() . "%' && o_key = '" . $categoryKey . "'");
foreach ($list as $c)
$category = $c;
}
if ( $category instanceof \Pimcore\Model\DataObject\BlogCategory )
{
$subCategories = $category->getChildren();
if ( count($subCategories) )
{
foreach ( $subCategories as $subcat )
$findSubcats .= " or FIND_IN_SET('" . $subcat->getId() . "', categories) ";
}
}
$articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
$articles ->setCondition("o_path LIKE '" . $blog->getArticlesRoot() . "%' && isArchived <> '1' && ( FIND_IN_SET('" . $category->getId() . "', categories) " . $findSubcats . " )");
$articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
// set latest article for og data
if ( count($articles) )
foreach ($articles as $a)
if ( !$article )
$article = $a;
}
return $this->render('blog/category.html.twig', [
'languages' => $this->getValidLanguages(),
'locale' => $request->getLocale(),
'device' => $device,
'blog' => $blog,
'navigation' => Blog::blogNavigation( $categories, $blog->getCategoriesRoot(), $category ),
'catgories' => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories : null,
'category' => ($category instanceof \Pimcore\Model\DataObject\BlogCategory) ? $category : null,
'articles' => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles : null,
'article' => $article
]);
}
/**
* Blog archive action
*/
public function archiveAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$blog = $this->document->getProperty('blog');
if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
{
$categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$categories ->setCondition("o_path = '" . $blog->getCategoriesRoot() . "/'");
$categories ->setOrderKey("position");
$categories ->setOrder("asc");
$articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
// $articles ->setCondition("o_path LIKE '" . $blog->getArticlesRoot() . "%' && isArchived = '1'");
$articles ->setCondition("o_path LIKE '" . $blog->getArticlesRoot() . "%'");
$articles ->setOrderKey('date');
$articles ->setOrder('desc');
// $articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
}
return $this->render('blog/archive.html.twig', [
'languages' => $this->getValidLanguages(),
'locale' => $request->getLocale(),
'device' => $device,
'blog' => $blog,
'navigation' => Blog::blogNavigation( $categories, $blog->getCategoriesRoot() ),
'catgories' => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories : null,
'articles' => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles : null
]);
}
/**
* Blog archiveCategory action
*/
public function archiveCategoryAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$blog = $this->document->getProperty('blog');
$category = null;
$categoryId = ($request->get('cid')) ? $request->get('cid') : '';
$categoryKey = ($request->get('ckey')) ? $request->get('ckey') : '';
$findSubcats = "";
$article = null;
if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
{
$categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$categories ->setCondition("o_path = '" . $blog->getCategoriesRoot() . "/'");
$categories ->setOrderKey("position");
$categories ->setOrder("asc");
$category = \Pimcore\Model\DataObject\BlogCategory::getById($categoryId);
if ( !$category && $categoryKey!='' )
{
$list = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$list ->setCondition("o_path LIKE '" . $blog->getCategoriesRoot() . "%' && o_key = '" . $categoryKey . "'");
foreach ($list as $c)
$category = $c;
}
if ( $category instanceof \Pimcore\Model\DataObject\BlogCategory )
{
$subCategories = $category->getChildren();
if ( count($subCategories) )
{
foreach ( $subCategories as $subcat )
$findSubcats .= " or FIND_IN_SET('" . $subcat->getId() . "', categories) ";
}
}
$articles = new \Pimcore\Model\DataObject\BlogArticle\Listing();
$articles ->setCondition("o_path LIKE '" . $blog->getArticlesRoot() . "%' && isArchived = '1' && ( FIND_IN_SET('" . $category->getId() . "', categories) " . $findSubcats . " )");
$articles ->setLimit(BLOG_ROOT_LISTING_LIMIT);
// set latest article for og data
if ( count($articles) )
foreach ($articles as $a)
if ( !$article )
$article = $a;
}
return $this->render('blog/archive.html.twig', [
'languages' => $this->getValidLanguages(),
'locale' => $request->getLocale(),
'device' => $device,
'blog' => $blog,
'navigation' => Blog::blogNavigation( $categories, $blog->getCategoriesRoot(), $category ),
'catgories' => ($categories instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $categories : null,
'category' => ($category instanceof \Pimcore\Model\DataObject\BlogCategory) ? $category : null,
'articles' => ($articles instanceof \Pimcore\Model\DataObject\BlogArticle\Listing) ? $articles : null,
'article' => $article
]);
}
/**
* Blog article action
*/
public function articleAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$blog = $this->document->getProperty('blog');
$articleYear = ($request->get('year')) ? $request->get('year') : '';
$articleMonth = ($request->get('month')) ? $request->get('month') : '';
$articleDay = ($request->get('day')) ? $request->get('day') : '';
$articleKey = ($request->get('key')) ? $request->get('key') : '';
if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
{
$categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$categories ->setCondition("o_path = '" . $blog->getCategoriesRoot() . "/'");
$categories ->setOrderKey("position");
$categories ->setOrder("asc");
// $articlePath = $blog->getArticlesRoot() . '/' . $articleYear . '/' . $articleMonth . '/' . $articleDay . '/' . $articleKey;
$articlePath = $blog->getArticlesRoot() . '/' . $articleKey;
echo 'P: ' . $articlePath;
$article = \Pimcore\Model\DataObject\BlogArticle::getByPath($articlePath);
}
return $this->render('blog/article.html.twig', [
'languages' => $this->getValidLanguages(),
'locale' => $request->getLocale(),
'device' => $device,
'blog' => $blog,
'navigation' => Blog::blogNavigation( $categories, $blog->getCategoriesRoot() ),
'searchTerm' => ($request->get('s')) ? $request->get('s') : '',
'article' => $article,
'prevArticle' => Blog::getPrevArticle( $article, $blog->getArticlesRoot() ),
'nextArticle' => Blog::getNextArticle( $article, $blog->getArticlesRoot() )
]);
}
/**
* Blog search action
*/
public function searchAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$blog = $this->document->getProperty('blog');
$texts = [];
$searchCount = 0;
$resultsNews = null;
$resultsDocs = null;
$resultsShop = null;
if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
{
$categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$categories ->setCondition("o_path = '" . $blog->getCategoriesRoot() . "/'");
$categories ->setOrderKey("position");
$categories ->setOrder("asc");
}
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( $blog->getArticlesRoot() );
$news ->setDataObjectFields( ["headline","article","author"] );
if ( $resultsNews = $news ->search() )
foreach ( $resultsNews as $r)
$searchCount++;
}
return $this->render('blog/search.html.twig', [
'languages' => $this->getValidLanguages(),
'locale' => $request->getLocale(),
'device' => $device,
'blog' => $blog,
'navigation' => Blog::blogNavigation( $categories, $blog->getCategoriesRoot() ),
'texts' => $texts,
'search' => $request->get('search'),
'searchCount' => $searchCount,
'resultsDocuments' => $resultsDocs,
'resultsNews' => $resultsNews,
'resultsShop' => $resultsShop,
'timestamp' => time()
]);
}
/**
* Document contact action
*/
public function contactAction(
Request $request,
Translator $translator
) {
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$blog = $this->document->getProperty('blog');
$message = [];
$mailSubmitted = false;
$mailRendered = false;
if ( $blog instanceof \Pimcore\Model\DataObject\Blog )
{
$categories = new \Pimcore\Model\DataObject\BlogCategory\Listing();
$categories ->setCondition("o_path = '" . $blog->getCategoriesRoot() . "/'");
$categories ->setOrderKey("position");
$categories ->setOrder("asc");
}
// get post form data
$post_vars = $request->request->all();
$formdata = [];
foreach ($post_vars as $key => $var) {
$formdata[$key] = $var;
}
// init captcha
$captcha = new Captcha('de');
$captcha_validated = false;
// validate captcha
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['contact_email'], FILTER_VALIDATE_EMAIL)
&& $captcha_validated === true
) {
$mail = new \Pimcore\Mail();
// $mail ->setCharset('utf-8');
$mail ->addTo( SITE_MAIL_DEFAULT );
$mail ->addTo( $formdata['contact_email'] );
// $mail ->setFrom( SITE_MAIL_DEFAULT, $formdata['contact_firstname'].' '.$formdata['contact_lastname'] );
$mail ->addReplyTo( $formdata['contact_email'] );
$mail ->setSubject( SITE_NAME . ' - Neue Anfrage erhalten' );
$mail ->setDocument( Document::getByPath( '/email-templates/contact-form' ) );
$mail ->setParams( $formdata );
$mail ->send();
$mailSubmitted = true;
$mailRendered = $mail->getBodyHtmlRendered();
$message[] = '<h3><span class="lsf">check</span> Vielen Dank für Ihre Nachricht</h3>
<p>Wir werden Ihr Anliegen schnellstmöglich bearbeiten.</p>';
}
else if ( isset( $formdata['contact_token'] )
&& $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('blog/contact.html.twig', [
'languages' => $this->getValidLanguages(),
'locale' => $request->getLocale(),
'device' => $device,
'blog' => $blog,
'navigation' => Blog::blogNavigation( $categories, $blog->getCategoriesRoot() ),
'captcha' => $captcha->getCaptcha(),
'formdata' => $formdata,
'mailSubmitted' => $mailSubmitted,
'mailRendered' => ($mailRendered) ? $mailRendered : '',
'message' => $message
]);
}
}
?>