<?php
namespace Elements\Bundle\PresseBundle\Controller;
use Carbon\Carbon;
use Elements\Bundle\PresseBundle\Event\PresseBundleSecurityCheck;
use Knp\Component\Pager\PaginatorInterface;
use Pimcore\Model\DataObject\PresseBundleKategorie;
use Pimcore\Model\DataObject\PresseBundleText;
use Symfony\Component\EventDispatcher\GenericEvent;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
class PresseTextController extends PresseController
{
public function onKernelControllerEvent(ControllerEvent $event)
{
parent::onKernelControllerEvent($event);
$eventDispatcher = \Pimcore::getContainer()->get('event_dispatcher');
$eventDispatcher->dispatch(new PresseBundleSecurityCheck(), PresseBundleSecurityCheck::TEXT_SECURITY_EVENT);
}
/**
* @param Request $request
* @return array
* @throws \Exception
*/
public function overviewAction(Request $request, PaginatorInterface $paginator): Response
{
$presseTexteListing = new PresseBundleText\Listing();
$presseTexteListing->addConditionParam("name != '' AND name IS NOT NULL AND publishDate != '' AND publishDate <= :publishDate", [ 'publishDate' => time() ]);
if ($this->config && $this->config->getIsMultiSite()) {
$presseTexteListing->addConditionParam('site LIKE :site', ['site' => "%," . $this->config->getId() . ",%"]);
}
if (intval($request->get('category'))) {
$presseTexteListing->addConditionParam('categories LIKE :category', ['category' => '%,' . intval($request->get('category')) . ',%' ]);
}
if ($request->get('keyword') != '') {
$presseTexteListing->addConditionParam('name LIKE :keyword OR shortDescription LIKE :keyword', ['keyword' => '%' . $request->get('keyword') . '%' ]);
}
$categories = new PresseBundleKategorie\Listing();
$categories->addConditionParam('name != "" AND name IS NOT NULL');
if ($this->config->getIsMultiSite()) {
$categories->addConditionParam('site LIKE :site', ['site' => "%," . $this->config->getId() . ",%"]);
}
if ($request->get('dateFrom')) {
$dateFrom = Carbon::parse($request->get('dateFrom'));
$presseTexteListing->addConditionParam('publishDate >= :dateFrom', ['dateFrom' => $dateFrom->getTimestamp()]);
}
if ($request->get('dateTo')) {
$dateTo = Carbon::parse($request->get('dateTo'));
$presseTexteListing->addConditionParam('publishDate <= :dateTo', ['dateTo' => $dateTo->getTimestamp()]);
}
$presseTexteListing->setOrderKey('publishDate');
$presseTexteListing->setOrder('DESC');
$eventParams = [
'presseTexteListing' => $presseTexteListing,
'config' => $this->config,
];
$eventDispatcher = \Pimcore::getEventDispatcher();
/** @var GenericEvent $presseTexteListingEvent */
$presseTexteListingEvent = $eventDispatcher->dispatch(new GenericEvent('presseTexteListing', $eventParams), 'presseTexteListing');
if ($presseTexteListingEvent->hasArgument('presseTexteListing')) {
$presseTexteListing = $presseTexteListingEvent->getArgument('presseTexteListing');
}
$paginator = $paginator->paginate($presseTexteListing, $request->get('page', 1), $this->config->getItemsPerPageText() ?? 10);
$returnArray = [
'paginator' => $paginator,
'categories' => $categories
];
if ($request->isXmlHttpRequest()) {
return $this->render('@ElementsPresse/Includes/Texte/Container.html.twig', $returnArray);
}
return $this->render('@ElementsPresse/PresseText/overview.html.twig', $returnArray);
}
public function detailAction(Request $request ): Response
{
$object = PresseBundleText::getById($request->get('id'));
if($request->get('pimcore_object_preview') == '') {
if (!$object instanceof PresseBundleText || !$object->isPublished() || $object->getPublishDate()->getTimestamp() > time()) {
throw new NotFoundHttpException('The requested press text doesn\'t exist (anymore)');
}
}
if ($request->get('pimcore_object_preview') != '') {
$this->addResponseHeader( 'x-robots-tag', 'noindex,nofollow');
}
return $this->render('@ElementsPresse/PresseText/detail.html.twig', ['object' => $object, 'config' => $this->config]);
}
/**
* @Route("/{_locale}/presseXhrResponse", name="presseJsonResponse")
*/
public function jsonResponse(Request $request, PaginatorInterface $paginator): JsonResponse
{
return parent::jsonResponse($request, $paginator);
}
}