You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.2 KiB
99 lines
3.2 KiB
<?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'; |
|
} |
|
}
|
|
|