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 recurMonthlyLast($slug, Request $request, Application $app)
 {
     if (!$this->build($slug, $request, $app)) {
         $app->abort(404, "Event does not exist.");
     }
     if (!$this->parameters['group']) {
         die("NO");
     }
     if ($this->parameters['event']->getIsDeleted()) {
         die("No");
         // TODO
     }
     if ($this->parameters['event']->getIsImported()) {
         die("No");
         // TODO
     }
     $eventRecurSetRepository = new EventRecurSetRepository();
     $eventRecurSet->setCustomFields($app['currentSite']->getCachedEventCustomFieldDefinitionsAsModels());
     $eventRecurSet = $eventRecurSetRepository->getForEvent($this->parameters['event']);
     $eventRecurSet->setTimeZoneName($app['currentTimeZone']);
     $this->parameters['newEvents'] = $eventRecurSet->getNewMonthlyEventsOnLastDayInWeekFilteredForExisting($this->parameters['event'], $app['config']->recurEventForDaysInFutureWhenMonthly);
     if ($request->request->get('submitted') == 'yes' && $request->request->get('CSFRToken') == $app['websession']->getCSFRToken()) {
         $data = is_array($request->request->get('new')) ? $request->request->get('new') : array();
         $this->addTagsToParameters($app);
         $mrb = new MediaRepositoryBuilder();
         $mrb->setIncludeDeleted(false);
         $mrb->setSite($app['currentSite']);
         $mrb->setEvent($this->parameters['event']);
         $medias = $mrb->fetchAll();
         $eventRepository = new EventRepository();
         $count = 0;
         foreach ($this->parameters['newEvents'] as $event) {
             if (in_array($event->getStartAt()->getTimeStamp(), $data)) {
                 $eventRepository->create($event, $app['currentSite'], $app['currentUser'], $this->parameters['group'], $this->parameters['groups'], null, $this->parameters['tags'], $medias);
                 ++$count;
             }
         }
         if ($count > 0) {
             return $app->redirect("/group/" . $this->parameters['group']->getSlug());
         }
     }
     return $app['twig']->render('site/event/recurMonthly.html.twig', $this->parameters);
 }
 function recurArbitrary($slug, Request $request, Application $app)
 {
     if (!$this->build($slug, $request, $app)) {
         $app->abort(404, "Event does not exist.");
     }
     if (!$this->parameters['group']) {
         die("NO");
     }
     if ($this->parameters['event']->getIsDeleted()) {
         die("No");
         // TODO
     }
     if ($this->parameters['event']->getIsImported()) {
         die("No");
         // TODO
     }
     $eventRecurSetRepository = new EventRecurSetRepository();
     $eventRecurSet = $eventRecurSetRepository->getForEvent($this->parameters['event']);
     $eventRecurSet->setTimeZoneName($app['currentTimeZone']);
     $eventRecurSet->setCustomFields($app['currentSite']->getCachedEventCustomFieldDefinitionsAsModels());
     if ($request->request->get('date') && $request->request->get('CSFRToken') == $app['websession']->getCSFRToken()) {
         $start = new \DateTime($request->request->get('date'), new \DateTimeZone($this->parameters['event']->getTimeZone()));
         if ($eventRecurSet->isDateToSoonForArbitraryDate($start, $app['timesource'])) {
             $app['flashmessages']->addError('That date is to soon!');
         } else {
             if ($eventRecurSet->isDateToLateForArbitraryDate($start, $app['timesource'])) {
                 $app['flashmessages']->addError('That date is to late!');
             } else {
                 $newEvents = $eventRecurSet->getNewEventOnArbitraryDateFilteredForExisting($this->parameters['event'], $start, $app['config']->recurEventForDaysInFutureWhenArbitrary);
                 if ($newEvents) {
                     $newEvent = $newEvents[0];
                     $this->addTagsToParameters($app);
                     $mrb = new MediaRepositoryBuilder();
                     $mrb->setIncludeDeleted(false);
                     $mrb->setSite($app['currentSite']);
                     $mrb->setEvent($this->parameters['event']);
                     $medias = $mrb->fetchAll();
                     $eventMeta = new EventEditMetaDataModel();
                     $eventMeta->setUserAccount($app['currentUser']);
                     $eventMeta->setFromRequest($request);
                     $eventRepository = new EventRepository();
                     $eventRepository->createWithMetaData($newEvent, $app['currentSite'], $eventMeta, $this->parameters['group'], $this->parameters['groups'], null, $this->parameters['tags'], $medias);
                     return $app->redirect("/event/" . $newEvent->getSlugForURL());
                 }
             }
         }
     }
     return $app['twig']->render('site/event/recur.arbitrary.html.twig', $this->parameters);
 }
 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;
 }