src/EventSubscriber/CalendarSubscriber.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Repository\CalendarRepository;
  4. use CalendarBundle\CalendarEvents;
  5. use CalendarBundle\Entity\Event;
  6. use CalendarBundle\Event\CalendarEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  9. use Symfony\Contracts\Translation\TranslatorInterface;
  10. class CalendarSubscriber implements EventSubscriberInterface
  11. {
  12.     private $calendarRepository;
  13.     private $router;
  14.     public function __construct(
  15.         CalendarRepository $calendarRepository,
  16.         UrlGeneratorInterface $router,
  17.         TranslatorInterface $translator
  18.     ) {
  19.         $this->calendarRepository $calendarRepository;
  20.         $this->router $router;
  21.         $this->translator $translator;
  22.     }
  23.     public static function getSubscribedEvents()
  24.     {
  25.         return [
  26.             CalendarEvents::SET_DATA => 'onCalendarSetData',
  27.         ];
  28.     }
  29.     public function onCalendarSetData(CalendarEvent $calendar)
  30.     {
  31.         $start $calendar->getStart();
  32.         $end $calendar->getEnd();
  33.         $filters $calendar->getFilters();
  34.         // Modify the query to fit to your entity and needs
  35.         // Change booking.beginAt by your start date property
  36.         $dbcalendarevents $this->calendarRepository
  37.             ->createQueryBuilder('calendar')
  38.             ->where('calendar.approved = 1 AND (calendar.beginAt BETWEEN :start and :end OR calendar.endAt BETWEEN :start and :end)')
  39.             ->setParameter('start'$start->format('Y-m-d H:i:s'))
  40.             ->setParameter('end'$end->format('Y-m-d H:i:s'))
  41.             ->getQuery()
  42.             ->getResult()
  43.         ;
  44.         foreach ($dbcalendarevents as $event) {
  45.             // this create the events with your data (here booking data) to fill calendar
  46.             /*if($translator->getLocale() == 'nl') {
  47.                 $calendarEvent = new Event(
  48.                     $event->getTitleNl(),
  49.                     $event->getBeginAt(),
  50.                     $event->getEndAt() // If the end date is null or not defined, a all day event is created.
  51.                 );
  52.             } else {
  53.                 $calendarEvent = new Event(
  54.                     $event->getTitleNl(),
  55.                     $event->getBeginAt(),
  56.                     $event->getEndAt() // If the end date is null or not defined, a all day event is created.
  57.                 );
  58.             }*/
  59.             $calendarEvent = new Event(
  60.                 $event->getTitleNl(),
  61.                 $event->getBeginAt(),
  62.                 $event->getEndAt() // If the end date is null or not defined, a all day event is created.
  63.             );
  64.             /*
  65.              * Add custom options to events
  66.              *
  67.              * For more information see: https://fullcalendar.io/docs/event-object
  68.              * and: https://github.com/fullcalendar/fullcalendar/blob/master/src/core/options.ts
  69.              */
  70.             $calendarEvent->setOptions([
  71.                 'backgroundColor' => '#90B116',
  72.                 'borderColor' => '#90B116',
  73.                 'textColor' => '#000000',
  74.             ]);
  75.             $calendarEvent->addOption(
  76.                 'url',
  77.                 $this->router->generate('calendar_event', [
  78.                     'id' => $event->getId(),
  79.                 ])
  80.             );
  81.             $calendarEvent->addOption(
  82.                 'title_en'$event->getTitleEn()
  83.             );
  84.             // finally, add the event to the CalendarEvent to fill the calendar
  85.             $calendar->addEvent($calendarEvent);
  86.         }
  87.     }
  88. }