/** * Update all properties to ical requirements and apply changes to dependent attributes: * - set $dtStart and $dtEnd according to the selected values from $dateFrom, $timeFrom, $dateTo and $timeTo * - remove $recurrenceRule if it's $frequency is empty * - set $recurrenceRule's $byDay value to null if empty * - apply changed $dtStart values to $excludedDates * Must be executed on persisting the event. Should be called prior to any validation. * * @param Event $event */ public function cleanUpEvent(Event $event) { if ($event->getDateFrom()) { //merge dates and times, apply noTime setting $event->setDtStart($event->getDateFrom()); if (is_null($event->getTimeFrom())) { $event->getDtStart()->setTime(0, 0); $event->setTimeFrom(new \DateTime('1970-01-01')); } else { $event->getDtStart()->setTime($event->getTimeFrom()->format('H'), $event->getTimeFrom()->format('i')); } } if ($event->getDateTo()) { $event->setDtEnd(clone $event->getDateTo()); if (is_null($event->getTimeTo())) { $event->getDtEnd()->setTime(0, 0); $event->setTimeTo(new \DateTime('1970-01-01')); } else { $event->getDtEnd()->setTime($event->getTimeTo()->format('H'), $event->getTimeTo()->format('i')); } if ($event->isNoTime()) { $event->getDtEnd()->add(new \DateInterval('P1D')); } } //do the following only if event is recurring if ($event->getRecurrenceRule()) { //remove recurring rule if empty and nullify "byDay" property if empty if ('' == $event->getRecurrenceRule()->getFreq()) { $this->em->remove($event->getRecurrenceRule()); $event->removeRecurrenceRule(); } elseif ('' == $event->getRecurrenceRule()->getByDay()) { $event->getRecurrenceRule()->setByDay(null); } //update excludeDates /** @var $entity \Xima\ICalBundle\Entity\Component\Event */ $uow = $this->em->getUnitOfWork(); $changeSet = $uow->getEntityChangeSet($event); if (isset($changeSet['dtStart']) && isset($changeSet['dtStart'][0])) { $interval = $changeSet['dtStart'][0]->diff($event->getDtStart()); foreach ($event->getExDates() as $dateTime) { $dateTime->add($interval); } } } }