public function run(ImportedEventOccurrenceModel $importedEventOccurrenceModel)
 {
     $eventRepo = new EventRepository();
     $eventRecurSetRepo = new EventRecurSetRepository();
     if ($importedEventOccurrenceModel->hasReoccurence()) {
         // Have to load it looking for the right time to!
         $event = $this->loadEventForImportedReoccurredEvent($importedEventOccurrenceModel);
     } else {
         // just load it.
         $event = $this->loadEventForImportedEvent($importedEventOccurrenceModel);
     }
     if ($event) {
         $this->eventsSeenIDs[] = $event->getId();
         // Set Existing Event From Import Event URL
         if ($importedEventOccurrenceModel->getIsDeleted()) {
             if (!$event->getIsDeleted()) {
                 $eventRepo->delete($event);
                 return true;
             }
         } else {
             if ($event->setFromImportedEventModel($importedEventOccurrenceModel) || $event->getIsDeleted()) {
                 $event->setIsDeleted(false);
                 $eventRepo->edit($event);
                 return true;
             }
         }
     } else {
         if (!$this->importURL->getIsManualEventsCreation()) {
             // New Event From Import Event URL
             $event = $this->newEventFromImportedEventModel($importedEventOccurrenceModel);
             if ($this->eventRecurSet) {
                 $event->setEventRecurSetId($this->eventRecurSet->getId());
             }
             $eventRepo->create($event, $this->site, null, $this->group, null, $importedEventOccurrenceModel);
             $this->eventsSeenIDs[] = $event->getId();
             if (!$this->eventRecurSet && $this->makeEventRecurSetIfNone) {
                 $this->eventRecurSet = $eventRecurSetRepo->getForEvent($event);
             }
             return true;
         } else {
             return false;
         }
     }
     return false;
 }
 function testAcrossBST1()
 {
     \TimeSource::mock(2015, 5, 1, 7, 0, 0);
     $user = new UserAccountModel();
     $user->setEmail("*****@*****.**");
     $user->setUsername("test");
     $user->setPassword("password");
     $userRepo = new UserAccountRepository();
     $userRepo->create($user);
     $site = new SiteModel();
     $site->setTitle("Test");
     $site->setSlug("test");
     $siteRepo = new SiteRepository();
     $siteRepo->create($site, $user, array(), $this->getSiteQuotaUsedForTesting());
     $event = new EventModel();
     $event->setSummary("test");
     $event->setDescription("test test");
     $event->setTimezone('Europe/London');
     $start = new \DateTime("", new \DateTimeZone('Europe/London'));
     $start->setDate(2015, 5, 10);
     $start->setTime(19, 0, 0);
     $event->setStartAt($start);
     $end = new \DateTime("", new \DateTimeZone('Europe/London'));
     $end->setDate(2015, 5, 10);
     $end->setTime(21, 0, 0);
     $event->setEndAt($end);
     $event->setUrl("http://www.info.com");
     $event->setTicketUrl("http://www.tickets.com");
     $eventRepository = new EventRepository();
     $eventRepository->create($event, $site, $user);
     $event = $eventRepository->loadBySlug($site, $event->getSlug());
     $eventRecurSetRepository = new EventRecurSetRepository();
     $eventRecurSet = $eventRecurSetRepository->getForEvent($event);
     $eventRecurSet->setTimeZoneName($event->getTimezone());
     $newStart = new \DateTime();
     $newStart->setDate(2015, 11, 1);
     $newEvent = $eventRecurSet->getNewEventOnArbitraryDate($event, $newStart);
     // What we are really testing here is start and end times set correctly
     $this->assertEquals("2015-11-01T19:00:00+00:00", $newEvent->getStartAtInUTC()->format("c"));
     $this->assertEquals("2015-11-01T21:00:00+00:00", $newEvent->getEndAtInUTC()->format("c"));
     $this->assertEquals("2015-11-01T19:00:00+00:00", $newEvent->getStartAtInTimezone()->format("c"));
     $this->assertEquals("2015-11-01T21:00:00+00:00", $newEvent->getEndAtInTimezone()->format("c"));
 }
 function moveToArea($slug, Request $request, Application $app)
 {
     if (!$this->build($slug, $request, $app)) {
         $app->abort(404, "Event does not exist.");
     }
     $gotResultEditedVenue = false;
     $gotResultEditedEvent = false;
     if ($request->request->get('area') && $request->request->get('CSFRToken') == $app['websession']->getCSFRToken()) {
         if (intval($request->request->get('area'))) {
             $areaRepository = new AreaRepository();
             $area = $areaRepository->loadBySlug($app['currentSite'], $request->request->get('area'));
             if ($area && (!$this->parameters['area'] || $area->getId() != $this->parameters['area']->getId())) {
                 if ($this->parameters['venue']) {
                     $this->parameters['venue']->setAreaId($area->getId());
                     $venueRepository = new VenueRepository();
                     $venueRepository->edit($this->parameters['venue'], $app['currentUser']);
                     $gotResultEditedVenue = true;
                 } else {
                     $this->parameters['event']->setAreaId($area->getId());
                     $eventRepository = new EventRepository();
                     $eventRepository->edit($this->parameters['event'], $app['currentUser']);
                     $gotResultEditedEvent = true;
                 }
                 $app['flashmessages']->addMessage('Thank you; event updated!');
             }
         }
     }
     if ($gotResultEditedEvent) {
         $repo = new EventRecurSetRepository();
         if ($repo->isEventInSetWithNotDeletedFutureEvents($this->parameters['event'])) {
             return $app->redirect("/event/" . $this->parameters['event']->getSlugForUrl() . '/edit/future');
         } else {
             return $app->redirect("/event/" . $this->parameters['event']->getSlugForUrl());
         }
     } else {
         return $app->redirect("/event/" . $this->parameters['event']->getSlugForUrl() . '/');
     }
 }
 protected function processICalEvent(ICalEvent $icalevent)
 {
     global $CONFIG;
     $importedEventRepo = new ImportedEventRepository();
     $eventRecurSetRepo = new EventRecurSetRepository();
     $importedEventChangesToSave = false;
     $importedEvent = $importedEventRepo->loadByImportURLIDAndImportId($this->importURLRun->getImportURL()->getId(), $icalevent->getUid());
     if (!$importedEvent) {
         if (!$icalevent->isDeleted()) {
             $importedEvent = new ImportedEventModel();
             $importedEvent->setImportId($icalevent->getUid());
             $importedEvent->setImportUrlId($this->importURLRun->getImportURL()->getId());
             $this->setOurEventFromIcalEvent($importedEvent, $icalevent);
             $importedEventChangesToSave = true;
         }
     } else {
         if ($icalevent->isDeleted()) {
             if (!$importedEvent->getIsDeleted()) {
                 $importedEvent->setIsDeleted(true);
                 $importedEventChangesToSave = true;
             }
         } else {
             $importedEventChangesToSave = $this->setOurEventFromIcalEvent($importedEvent, $icalevent);
             // if was deleted, undelete
             if ($importedEvent->getIsDeleted()) {
                 $importedEvent->setIsDeleted(false);
                 $importedEventChangesToSave = true;
             }
         }
     }
     $ietieo = new ImportedEventToImportedEventOccurrences($importedEvent);
     if ($ietieo->getToMultiples()) {
         $eventRecurSet = $importedEvent != null ? $eventRecurSetRepo->getForImportedEvent($importedEvent) : null;
         $this->importedEventOccurrenceToEvent->setEventRecurSet($eventRecurSet, true);
     } else {
         $this->importedEventOccurrenceToEvent->setEventRecurSet(null, false);
     }
     foreach ($ietieo->getImportedEventOccurrences() as $importedEventOccurrence) {
         if ($importedEventOccurrence->getEndAt()->getTimeStamp() < TimeSource::time()) {
             $this->inpast++;
         } else {
             if ($importedEventOccurrence->getStartAt()->getTimeStamp() > TimeSource::time() + $CONFIG->importURLAllowEventsSecondsIntoFuture) {
                 $this->tofarinfuture++;
             } else {
                 if ($this->saved < $this->limitToSaveOnEachRun) {
                     // Imported Event
                     if ($importedEventChangesToSave) {
                         if ($importedEvent->getId()) {
                             if ($importedEvent->getIsDeleted()) {
                                 $importedEventRepo->delete($importedEvent);
                             } else {
                                 $importedEventRepo->edit($importedEvent);
                             }
                         } else {
                             $importedEventRepo->create($importedEvent);
                             // the ID will not be set until this point. So make sure we copy over the ID below just to be sure.
                         }
                         $importedEventChangesToSave = false;
                     }
                     // ... and the Imported Event Occurrence becomes a real event!
                     $importedEventOccurrence->setId($importedEvent->getId());
                     if ($this->importedEventOccurrenceToEvent->run($importedEventOccurrence)) {
                         $this->saved++;
                     }
                 }
             }
         }
     }
 }