/** * processEntity * This function is responsible for taking a ScheduleEntity object * and generating up to $maxInstances ScheduleInstance objects from it. * * @param ScheduleEntity $scheduleEntity * @param mixed $maxInstances * @access public * @return void */ public function processEntity(ScheduleEntity $scheduleEntity, $maxInstances = null) { if (is_null($maxInstances)) { $maxInstances = $this->maxInstances; } if ($maxInstances > $this->maxInstances) { $maxInstances = $this->maxInstances; } // get rrule $timezone = 'America/New_York'; $today = new \DateTime(); $dateTimeZone = new \DateTimeZone($timezone); if ($scheduleEntity->getRrule()) { // Handling a recurring event $rrule = new RecurrenceRule($scheduleEntity->getRrule(), $scheduleEntity->getStartAt(), $timezone); $transformer = new RecurrenceRuleTransformer($rrule); $instances = $transformer->getComputedArray($scheduleEntity->getStartAt(), $dateTimeZone, $today->add(new \DateInterval('P6M')), $dateTimeZone); $options = $scheduleEntity->getOptions(); // generate instances if (count($instances)) { $count = 0; foreach ($instances as $startDateTime) { if ($count < $maxInstances) { // compute endDateTime based on duration $endDateTime = clone $startDateTime; $endDateTime->add(new \DateInterval($scheduleEntity->getDuration())); $si = new ScheduleInstance(); $si->setScheduleEntity($scheduleEntity); $si->setUser($scheduleEntity->getUser()); $si->setSchool($scheduleEntity->getSchool()); $si->setTitle($scheduleEntity->getTitle()); $si->setStart($startDateTime); $si->setEnd($endDateTime); $si->setIsAllDay(in_array('all_day', $scheduleEntity->getOptions())); $lastEnd = $endDateTime; $this->em->persist($si); $count++; } } } else { $instances = array(null); } $lastInstance = array_pop($instances); } else { // Handling a non-recurring event $si = new ScheduleInstance(); $si->setScheduleEntity($scheduleEntity); $si->setUser($scheduleEntity->getUser()); $si->setSchool($scheduleEntity->getSchool()); $si->setTitle($scheduleEntity->getTitle()); $si->setStart($scheduleEntity->getStartAt()); $si->setEnd($scheduleEntity->getEndAt()); $si->setIsAllDay(in_array('all_day', $scheduleEntity->getOptions())); $this->em->persist($si); // $lastEnd = $lastInstance = $scheduleEntity->getStartAt()->add(new \DateInterval($scheduleEntity->getDuration())); } // update last_processed // $scheduleEntity->setLastProcessedAt(new \DateTime()); // update expireAt // $scheduleEntity->setExpiresAt($lastEnd); // update maxDateAt // $scheduleEntity->setMaxDateAt($lastInstance); // $this->em->persist($scheduleEntity); $this->em->flush(); }
public function load(ObjectManager $manager) { $today = new \DateTime(); $se = new ScheduleEntity(); $se->setUser($this->getReference('mjh-user')); $se->setSchool($this->getReference('tsk_ramsey_school')); $se->setCategory($this->getReference('schedule_category_class')); $se->setLocation($this->getReference('schedule_location_Mat 1')); $se->setTitle('Dummy Entity'); $se->setStartAt($today); $se->setEndAt($today->add(new \DateInterval('PT1H'))); $se->setCreatedAt($today); $se->setLastModifiedAt($today); $se->setOptions(array()); $manager->persist($se); $manager->flush(); }