src/EventSubscriber/CalendarSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Repository\Affaire\EvenementRepository;
  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. class CalendarSubscriber implements EventSubscriberInterface
  10. {
  11.     private $evenementRepository;
  12.     private $router;
  13.     public function __construct(
  14.         EvenementRepository $evenementRepository,
  15.         UrlGeneratorInterface $router
  16.     ) {
  17.         $this->evenementRepository $evenementRepository;
  18.         $this->router $router;
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return [
  23.             CalendarEvents::SET_DATA => 'onCalendarSetData',
  24.         ];
  25.     }
  26.     public function onCalendarSetData(CalendarEvent $calendar)
  27.     {
  28.         dd($calendar);
  29.         $start $calendar->getStart();
  30.         $end $calendar->getEnd();
  31.         $filters $calendar->getFilters();
  32.         // Modify the query to fit to your entity and needs
  33.         // Change evenement.beginAt by your start date property
  34.         $evenements $this->evenementRepository
  35.             ->createQueryBuilder('evenement')
  36.             ->where('evenement.beginAt BETWEEN :start and :end OR evenement.endAt BETWEEN :start and :end')
  37.             ->setParameter('start'$start->format('Y-m-d H:i:s'))
  38.             ->setParameter('end'$end->format('Y-m-d H:i:s'))
  39.             ->getQuery()
  40.             ->getResult()
  41.         ;
  42.         foreach ($evenements as $evenement) {
  43.             // this create the events with your data (here evenement data) to fill calendar
  44.             $evenementEvent = new Event(
  45.                 $evenement->getTitle(),
  46.                 $evenement->getBeginAt(),
  47.                 $evenement->getEndAt() // If the end date is null or not defined, a all day event is created.
  48.             );
  49.             /*
  50.              * Add custom options to events
  51.              *
  52.              * For more information see: https://fullcalendar.io/docs/event-object
  53.              * and: https://github.com/fullcalendar/fullcalendar/blob/master/src/core/options.ts
  54.              */
  55.             $evenementEvent->setOptions([
  56.                 'backgroundColor' => 'red',
  57.                 'borderColor' => 'red',
  58.             ]);
  59.             $evenementEvent->addOption(
  60.                 'url',
  61.                 $this->router->generate('evenement_show', [
  62.                     'id' => $evenement->getId(),
  63.                 ])
  64.             );
  65.             // finally, add the event to the CalendarEvent to fill the calendar
  66.             $calendar->addEvent($evenementEvent);
  67.         }
  68.     }
  69. }