<?php
/**
* Pimcore
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - Pimcore Enterprise License (PEL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
* @license http://www.pimcore.org/license GPLv3 and PEL
*/
namespace App\Controller;
use App\Website\LinkGenerator\NewsLinkGenerator;
use App\Website\Navigation\BreadcrumbHelperService;
use Knp\Component\Pager\PaginatorInterface;
use Pimcore\Model\DataObject\News;
use Pimcore\Twig\Extension\Templating\HeadTitle;
use Pimcore\Twig\Extension\Templating\Placeholder;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use FrontendPermissionToolkitBundle\Service;
use Symfony\Component\Security\Core\User\UserInterface;
class NewsB2CController extends BaseController
{
const NEWS_DEFAULT_DOCUMENT_PROPERTY_NAME = 'news_default_document';
var $service;
/**
* @param Request $request
*
* @return Response
*
* @throws \Exception
*/
public function listingAction(Request $request, PaginatorInterface $paginator,EventDispatcherInterface $eventDispatcher,UserInterface $user = null)
{
// if($this->checkPermission("view_news",$eventDispatcher,$user) != true)
// {
// throw new \Exception("Permission denied");
// }
// get a list of news objects and order them by date
$newsList = new News\Listing();
$newsList->setCondition('NewsType = ?',['B2C']);
$newsList->setOrderKey('date');
$newsList->setOrder('DESC');
$paginator = $paginator->paginate(
$newsList,
$request->get('page', 1),
6
);
return $this->render('news_b2c/listing.html.twig', [
'news' => $paginator,
'paginationVariables' => $paginator->getPaginationData()
]);
}
/**
* @Route("/b2c/{path}{newstitle}~n{news}", name="b2c-news-detail", defaults={"path"=""}, requirements={"path"=".*?", "newstitle"="[\w-]+", "news"="\d+"})
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param Placeholder $placeholderHelper
* @param NewsLinkGenerator $newsLinkGenerator
* @param BreadcrumbHelperService $breadcrumbHelperService
*
* @return Response
*/
public function detailAction(Request $request, HeadTitle $headTitleHelper, Placeholder $placeholderHelper, NewsLinkGenerator $newsLinkGenerator, BreadcrumbHelperService $breadcrumbHelperService,EventDispatcherInterface $eventDispatcher,UserInterface $user = null)
{
// if($this->checkPermission("view_news",$eventDispatcher,$user) != true)
// {
// throw new \Exception("Permission denied");
// }
$news = News::getById($request->get('news'));
if (!($news instanceof News && ($news->isPublished() || $this->verifyPreviewRequest($request, $news)))) {
throw new NotFoundHttpException('News not found.');
}
$headTitleHelper($news->getTitle());
$breadcrumbHelperService->enrichNewsPage($news);
$placeholderHelper('canonical')->set($newsLinkGenerator->generateB2C($news, ['document' => $this->document->getProperty(self::NEWS_DEFAULT_DOCUMENT_PROPERTY_NAME)]));
$newsList = new News\Listing();
$newsList->setOrderKey('date');
$newsList->setOrder('DESC');
$newsList->setLimit(5);
$newsList->setCondition('o_id != ? && NewsType = ?',[$news->getId(),'B2C']);
$additionalNews = $newsList->load();
return $this->render('news_b2c/detail.html.twig', [
'news' => $news,
'additionalNews'=>$additionalNews
]);
}
/**
* @param Request $request
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function newsTeaserAction(Request $request)
{
$paramsBag = [];
if ($request->get('type') == 'object') {
$news = News::getById($request->get('id'));
$paramsBag['news'] = $news;
return $this->render('news_b2c/news_teaser.html.twig', $paramsBag);
}
throw new NotFoundHttpException('News not found.');
}
/**
* @param Request $request
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function emailNewsTeaserAction(Request $request, NewsLinkGenerator $newsLinkGenerator)
{
$paramsBag = [];
if ($request->get('type') == 'object') {
$news = News::getById($request->get('id'));
$paramsBag['news'] = $news;
$paramsBag['detailLink'] = $newsLinkGenerator->generateB2C($news, ['document' => $this->document->getProperty('news_default_document')]);
return $this->render('news_b2c/email_news_teaser.html.twig', $paramsBag);
}
throw new NotFoundHttpException('News not found.');
}
private function checkPermission($key,EventDispatcherInterface $eventDispatcher,$userObject){
$allow = false;
$userObject = \Pimcore::getContainer()->get('security.token_storage')->getToken()->getUser();
$this->service = new Service($eventDispatcher);
if($userObject){
if($this->service->isAllowed($userObject, $key)) {
$allow = true;
}
}
return $allow;
}
}