<?php
namespace App\Controller;
use Carbon\Carbon;
use Pimcore\Model\DataObject\Event\Listing as EventListing;
use Pimcore\Model\Document\Listing as PageListing;
use App\Classes\Controller\AbstractFrontController as AbstractFrontController;
use App\Classes\DataMapper\Event\EventListingDataMapper;
use App\Traits\ControllerSidebarLinks;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Knp\Component\Pager\PaginatorInterface;
class EventController extends AbstractFrontController
{
use ControllerSidebarLinks;
const SHOW_PER_PAGE = 12;
#[Template()]
public function indexAction(Request $request, PaginatorInterface $paginator)
{
$currentDocument = $request->get('contentDocument');
$elements = array_values(array_filter(explode('/', $currentDocument->getPath())));
$division = $elements[0] ?? 'neuroscience';
$showPastEvents = $request->get('show_past_events');
$this->view->sidebar = $this->getSidebarLinks($currentDocument);
$listing = new EventListing;
$listing->addConditionParam('o_path LIKE ?', "/Events/{$division}/%");
$date = Carbon::now()->startOfDay()->timestamp;
if ($showPastEvents) {
$listing->addConditionParam('DateFrom < ?', $date)
->addConditionParam("IFNULL(DateTo, '') < ?", $date);
} else {
$listing->setCondition("(DateFrom >= ? OR IFNULL(DateTo, '') >= ?)", [$date, $date]);
}
$listing->setOrderKey('DateFrom asc', false);
$pagination = $paginator->paginate(
$listing,
$request->query->getInt('page', 1),
self::SHOW_PER_PAGE
);
$this->view->paginator = $pagination;
$this->view->paginationVariables = $pagination->getPaginationData();
$this->view->articles = EventListingDataMapper::list($pagination->getItems())->all($request);
}
protected function getNewsCategory($division)
{
$listing = new PageListing();
$listing->addConditionParam('documents.path LIKE ?', "/{$division}/%");
$listing->addConditionParam('LOWER(documents.key) = ?', 'news');
$listing->setLimit(1);
$pages = $listing->load();
return array_shift($pages);
}
}