src/EventListener/SetEventEndDateListener.php line 36

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Harmonizely\EventListener;
  4. use Doctrine\ORM\Event\LifecycleEventArgs;
  5. use Harmonizely\Model\EventInterface;
  6. use Symfony\Component\EventDispatcher\GenericEvent;
  7. use Webmozart\Assert\Assert;
  8. class SetEventEndDateListener
  9. {
  10.     public function prePersist(LifecycleEventArgs $event): void
  11.     {
  12.         $object $event->getObject();
  13.         if (!$object instanceof EventInterface) {
  14.             return;
  15.         }
  16.         $this->setEndDate($object);
  17.     }
  18.     public function preUpdate(LifecycleEventArgs $args): void
  19.     {
  20.         $entity $args->getEntity();
  21.         if (!$entity instanceof EventInterface) {
  22.             return;
  23.         }
  24.         $this->setEndDate($entity);
  25.     }
  26.     public function setEventEndDate(GenericEvent $event): void
  27.     {
  28.         /** @var EventInterface $event */
  29.         $event $event->getSubject();
  30.         Assert::isInstanceOf($eventEventInterface::class);
  31.         $this->setEndDate($event);
  32.     }
  33.     private function setEndDate(EventInterface $event): void
  34.     {
  35.         $duration $event->getDuration();
  36.         $endDate = clone $event->getScheduledAt();
  37.         $endDate $endDate->modify(sprintf('+%d minutes'$duration));
  38.         $event->setEndDate($endDate);
  39.     }
  40. }