src/EventSubscriber/CalendarSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. // src/EventSubscriber/CalendarSubscriber.php
  3. namespace App\EventSubscriber;
  4. use App\Repository\EventRepository;
  5. use App\Service\ConfigDataService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. use CalendarBundle\CalendarEvents;
  9. use CalendarBundle\Entity\Event;
  10. use CalendarBundle\Event\CalendarEvent;
  11. use Symfony\Component\Validator\Constraints\DateTime;
  12. class CalendarSubscriber implements EventSubscriberInterface
  13. {
  14.     private $eventRepository;
  15.     private $router;
  16.     private $configDataService;
  17.     public function __construct(EventRepository $eventRepositoryUrlGeneratorInterface $routerConfigDataService $configDataService) {
  18.         $this->eventRepository $eventRepository;
  19.         $this->router $router;
  20.         $this->configDataService $configDataService;
  21.     }
  22.     public static function getSubscribedEvents()
  23.     {
  24.         return [
  25.             CalendarEvents::SET_DATA => 'onCalendarSetData',
  26.         ];
  27.     }
  28.     public function onCalendarSetData(CalendarEvent $calendar)
  29.     {
  30.         $start $calendar->getStart();
  31.         $end $calendar->getEnd();
  32.         $filters $calendar->getFilters();
  33.         //dd($filters);
  34.         // Modify the query to fit to your entity and needs
  35.         // Change booking.beginAt by your start date property
  36.         // $bookings = $this->bookingRepository
  37.         //     ->createQueryBuilder('booking')
  38.         //     ->where('booking.beginAt BETWEEN :start and :end OR booking.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.         $service $this->eventRepository->getCountEventsByService('active');
  45.         $eventsRepository $this->eventRepository->findEventsNotCancelled('cancelled');
  46.         //dd($eventsRepository);
  47.         foreach ($eventsRepository as $eventRepository) {
  48.             if(!empty($eventRepository->getClient()->getFirstName()) || !empty($eventRepository->getClient()->getLastName())) {
  49.                 $name $eventRepository->getClient()->getFirstName() . ' ' $eventRepository->getClient()->getLastName();
  50.             } else {
  51.                 $name $eventRepository->getClient()->getEmail();
  52.             }
  53.             if($this->configDataService->get('eventByTime') == 'YES') {
  54.                 $startTime $eventRepository->getEventTime();
  55.                 $endTime $eventRepository->getEventTimeEnd();
  56.                 if($startTime != null) {
  57.                     $eventStartDate = new \DateTime($eventRepository->getEventDate()->format('Y-m-d') . ' ' .$startTime->format('H:i:s'));
  58.                     //$eventStartDate = $eventRepository->getEventDate()->modify($startTime->format('H:i:s'));
  59.                     //$eventStartDate = $startTime->
  60.                 
  61.                 if($endTime != null) {
  62.                     $eventEndDate = new \DateTime($eventRepository->getEventDate()->format('Y-m-d') . ' ' .$endTime->format('H:i:s'));
  63.                 } else {
  64.                     $eventEndDate null;
  65.                 }
  66.                 $calendarEvent = new Event(
  67.                     $name ' Status: ' ucfirst($eventRepository->getStatus()),
  68.                     $eventStartDate,
  69.                     $eventEndDate,
  70.                     //$normal->modify('+ 1 hour'),
  71.                     //$booking->getEndAt() // If the end date is null or not defined, a all day event is created.
  72.                 );
  73.             } else {
  74.                 //dd($eventRepository->getEventDate());
  75.                 $eventStartDate $eventRepository->getEventDate();
  76.                 $eventEndDate null;
  77.                  $calendarEvent = new Event(
  78.                     $name ' <br> Status: ' ucfirst($eventRepository->getStatus()),
  79.                     $eventStartDate,
  80.                     $eventEndDate,
  81.                     //$normal->modify('+ 1 hour'),
  82.                     //$booking->getEndAt() // If the end date is null or not defined, a all day event is created.
  83.                 );
  84.             }
  85.             
  86.             //
  87.             /*
  88.              * Add custom options to events
  89.              *
  90.              * For more information see: https://fullcalendar.io/docs/event-object
  91.              * and: https://github.com/fullcalendar/fullcalendar/blob/master/src/core/options.ts
  92.              */
  93.             if(!empty($eventRepository->getService()->getColor())) {
  94.                 $color $eventRepository->getService()->getColor();
  95.                 //var_dump($color);
  96.                 $calendarEvent->setOptions([
  97.                     'backgroundColor' => $color,
  98.                     'borderColor' => $color,
  99.                     'eventTextColor' => $color,
  100.                     'eventDisplay' => 'block',
  101.                 ]);
  102.             } else {
  103.                 $calendarEvent->setOptions([
  104.                     'backgroundColor' => '#A4303F',
  105.                     'borderColor' => '#A4303F',
  106.                 ]);
  107.             }
  108.             if($this->configDataService->get('eventByTime') == 'YES') {
  109.                 $calendarEvent->setAllDay(false);
  110.             }
  111.             //dd($calendarEvent);
  112.             
  113.             $calendarEvent->addOption(
  114.                 'url',
  115.                 $this->router->generate('app_event_show', [
  116.                     'id' => $eventRepository->getId(),
  117.                 ])
  118.             );
  119.             // finally, add the event to the CalendarEvent to fill the calendar
  120.             $calendar->addEvent($calendarEvent);
  121.         }
  122.     }
  123. }