You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.2 KiB
PHP
100 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace KekRozsak\FrontBundle\Twig;
|
|
|
|
use Symfony\Bridge\Doctrine\RegistryInterface;
|
|
use Symfony\Component\Security\Core\SecurityContextInterface;
|
|
use JMS\DiExtraBundle\Annotation as DI;
|
|
|
|
/**
|
|
* @DI\Service
|
|
* @DI\Tag("twig.extension")
|
|
*/
|
|
class EventsExtension extends \Twig_Extension
|
|
{
|
|
protected $_doctrine;
|
|
protected $_securityContext;
|
|
|
|
/**
|
|
* @DI\InjectParams({
|
|
* "doctrine" = @DI\Inject("doctrine"),
|
|
* "securityContext" = @DI\Inject("security.context")
|
|
* })
|
|
*
|
|
* @param \Symfony\Bridge\Doctrine\RegistryInterface $doctrine
|
|
* @param \Symfony\Component\Security\Core\SecurityContextInterface $securityContext
|
|
*/
|
|
public function __construct(RegistryInterface $doctrine, SecurityContextInterface $securityContext)
|
|
{
|
|
$this->_doctrine = $doctrine;
|
|
$this->_securityContext = $securityContext;
|
|
}
|
|
|
|
public function getGlobals()
|
|
{
|
|
$today = new \DateTime('now');
|
|
$firstDay = \DateTime::createFromFormat('Y-m-d', $today->format('Y-m-01'));
|
|
$firstDayWeekday = $firstDay->format('N');
|
|
$numDays = $firstDay->format('t');
|
|
$lastDay = \DateTime::createFromFormat('Y-m-d', $today->format('Y-m-' . sprintf("%02d", $numDays)));
|
|
|
|
/*
|
|
* Get all events in today's month. Iterate through this
|
|
* collection, adding each element to $monthEvents array's
|
|
* 'day'th element array.
|
|
*/
|
|
$query = $this->
|
|
_doctrine
|
|
->getManager()
|
|
->createQuery('
|
|
SELECT
|
|
e
|
|
FROM
|
|
KekRozsakFrontBundle:Event e
|
|
WHERE
|
|
e.cancelled = FALSE
|
|
AND (
|
|
(
|
|
e.startDate < :firstDay
|
|
AND e.endDate >= :firstDay
|
|
)
|
|
OR e.startDate BETWEEN :firstDay AND :lastDay
|
|
)
|
|
')
|
|
;
|
|
$query->setParameter('firstDay', $firstDay, \Doctrine\DBAL\Types\Type::DATE);
|
|
$query->setParameter('lastDay', $lastDay, \Doctrine\DBAL\Types\Type::DATE);
|
|
$events = $query->getResult();
|
|
|
|
$eventList = array();
|
|
for ($i = 1; $i <= $numDays; $i++) {
|
|
$date = \DateTime::createFromFormat(
|
|
'Y-m-d',
|
|
$today->format('Y-m-' . sprintf('%02d', $i))
|
|
);
|
|
$eventList[$i]['date'] = $date;
|
|
$eventList[$i]['events'] = array();
|
|
foreach ($events as $event) {
|
|
if ($event->isOnDate($date)) {
|
|
$eventList[$i]['events'][] = $event;
|
|
}
|
|
}
|
|
}
|
|
|
|
return array(
|
|
'events' => $events,
|
|
'eventList' => $eventList,
|
|
'today' => $today,
|
|
'firstDay' => $firstDay,
|
|
'lastDay' => $lastDay,
|
|
'firstDayWeekday' => ($firstDayWeekday == 0) ? 7 : $firstDayWeekday,
|
|
'numDays' => $numDays,
|
|
);
|
|
}
|
|
|
|
public function getName()
|
|
{
|
|
return 'Events';
|
|
}
|
|
}
|