Example #1
0
 /**
  * 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);
             }
         }
     }
 }