function test1()
 {
     $this->addCountriesToTestDB();
     \TimeSource::mock(2014, 10, 1, 1, 1, 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());
     $countryRepo = new CountryRepository();
     $gb = $countryRepo->loadByTwoCharCode('GB');
     $area = new AreaModel();
     $area->setTitle("test");
     $area->setDescription("test test");
     $areaRepo = new \repositories\AreaRepository();
     $areaRepo->create($area, null, $site, $gb, $user);
     $venue = new VenueModel();
     $venue->setTitle("test");
     $venue->setDescription("test test");
     $venue->setCountryId($gb->getId());
     $venue->setAreaId($area->getId());
     $venueRepo = new VenueRepository();
     $venueRepo->create($venue, $site, $user);
     $venueDuplicate = new VenueModel();
     $venueDuplicate->setTitle("test Duplicate");
     $venueRepo->create($venueDuplicate, $site, $user);
     \TimeSource::mock(2014, 10, 1, 1, 2, 0);
     $venueRepo->markDuplicate($venueDuplicate, $venue, $user);
     $event = new EventModel();
     $event->setSummary("test");
     $event->setStartAt(getUTCDateTime(2014, 5, 10, 19, 0, 0, 'Europe/London'));
     $event->setEndAt(getUTCDateTime(2014, 5, 10, 21, 0, 0, 'Europe/London'));
     $event->setVenueId($venue->getId());
     $eventRepository = new EventRepository();
     $eventRepository->create($event, $site, $user);
     ## Test
     $this->assertNotNull($venueRepo->loadBySlug($site, $venue->getSlug()));
     $event = $eventRepository->loadBySlug($site, $event->getSlug());
     $this->assertEquals($venue->getId(), $event->getVenueId());
     ## Now Purge!
     $venueRepo->purge($venue);
     ## Test
     $this->assertNull($venueRepo->loadBySlug($site, $venue->getSlug()));
     $event = $eventRepository->loadBySlug($site, $event->getSlug());
     $this->assertNull($event->getVenueId());
 }
 function test1()
 {
     \TimeSource::mock(2014, 1, 1, 0, 0, 0);
     $this->addCountriesToTestDB();
     $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());
     $countryRepo = new CountryRepository();
     $gb = $countryRepo->loadByTwoCharCode('GB');
     $venue1 = new VenueModel();
     $venue1->setTitle("test");
     $venue1->setDescription("test test");
     $venue1->setCountryId($gb->getId());
     $venue2 = new VenueModel();
     $venue2->setTitle("test this looks similar");
     $venue2->setDescription("test test");
     $venue2->setCountryId($gb->getId());
     $venueRepo = new VenueRepository();
     $venueRepo->create($venue1, $site, $user);
     $venueRepo->create($venue2, $site, $user);
     $event = new EventModel();
     $event->setSummary("test");
     $event->setStartAt(getUTCDateTime(2014, 5, 10, 19, 0, 0));
     $event->setEndAt(getUTCDateTime(2014, 5, 10, 21, 0, 0));
     $event->setVenueId($venue2->getId());
     $eventRepository = new EventRepository();
     $eventRepository->create($event, $site, $user);
     // Test before
     $event = $eventRepository->loadBySlug($site, $event->getSlug());
     $this->assertEquals($venue2->getId(), $event->getVenueId());
     $venue2 = $venueRepo->loadById($venue2->getId());
     $this->assertFalse($venue2->getIsDeleted());
     $this->assertNull($venue2->getIsDuplicateOfId());
     // Mark
     \TimeSource::mock(2014, 1, 1, 2, 0, 0);
     $venueRepo->markDuplicate($venue2, $venue1, $user);
     // Test Duplicate
     $event = $eventRepository->loadBySlug($site, $event->getSlug());
     $this->assertEquals($venue1->getId(), $event->getVenueId());
     $venue2 = $venueRepo->loadById($venue2->getId());
     $this->assertTrue($venue2->getIsDeleted());
     $this->assertEquals($venue1->getId(), $venue2->getIsDuplicateOfId());
 }
 public function getNewEventOnArbitraryDate(EventModel $event, \DateTime $newDate)
 {
     $timeZoneUTC = new \DateTimeZone("UTC");
     $timeZone = new \DateTimeZone($this->timeZoneName);
     $start = clone $newDate;
     $start->setTimezone($timeZone);
     $start->setTime($event->getStartAtInTimezone()->format('G'), $event->getStartAtInTimezone()->format('i'), $event->getStartAtInTimezone()->format('s'));
     $start->setTimezone($timeZoneUTC);
     $end = clone $start;
     $end->add($event->getStartAtInUTC()->diff($event->getEndAtInUTC(), true));
     $newEvent = new EventModel();
     $newEvent->setGroupId($event->getGroupId());
     $newEvent->setVenueId($event->getVenueId());
     $newEvent->setCountryId($event->getCountryId());
     $newEvent->setEventRecurSetId($this->id);
     $newEvent->setSummary($event->getSummary());
     $newEvent->setDescription($event->getDescription());
     $newEvent->setStartAt($start);
     $newEvent->setEndAt($end);
     foreach ($this->customFields as $customField) {
         if ($event->hasCustomField($customField)) {
             $newEvent->setCustomField($customField, $event->getCustomField($customField));
         }
     }
     return $newEvent;
 }
 function testScoreVenueSame()
 {
     $site = new SiteModel();
     $eventNew = new models\EventModel();
     $eventNew->setStartAt(new \DateTime("12th April 2012 10:00:00"));
     $eventNew->setEndAt(new \DateTime("12th April 2012 13:00:00"));
     $eventNew->setVenueId(34);
     $eventExisting = new models\EventModel();
     $eventExisting->setStartAt(new \DateTime("12th March 2012 10:00:00"));
     $eventExisting->setEndAt(new \DateTime("12th March 2012 13:00:00"));
     $eventExisting->setVenueId(34);
     $sfde = new SearchForDuplicateEvents($eventNew, $site);
     $score = $sfde->getScoreForConsideredEvent($eventExisting);
     $this->assertEquals(1, $score);
 }
 function testMoveAllFutureEventsAtVenueToNoSetVenueWithNoArea()
 {
     $this->addCountriesToTestDB();
     TimeSource::mock(2013, 7, 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());
     $countryRepo = new CountryRepository();
     $venue = new VenueModel();
     $venue->setCountryId($countryRepo->loadByTwoCharCode('GB')->getId());
     $venue->setTitle("edinburgh hall");
     $venueRepo = new VenueRepository();
     $venueRepo->create($venue, $site, $user);
     #### Event To Change
     $event = new EventModel();
     $event->setCountryId($countryRepo->loadByTwoCharCode('GB')->getId());
     $event->setSummary("test");
     $event->setDescription("test test");
     $event->setStartAt($this->mktime(2013, 8, 1, 19, 0, 0));
     $event->setEndAt($this->mktime(2013, 8, 1, 21, 0, 0));
     $event->setVenueId($venue->getId());
     $eventRepository = new EventRepository();
     $eventRepository->create($event, $site, $user);
     #### Load Event, Check in Venue
     $event = $eventRepository->loadBySlug($site, $event->getSlug());
     $this->assertEquals(false, $event->getIsDeleted());
     $this->assertNull($event->getAreaId());
     $this->assertEquals($venue->getId(), $event->getVenueId());
     #### In preperation for deleting event, call moveAllFutureEventsAtVenueToNoSetVenue()
     TimeSource::mock(2013, 7, 1, 8, 0, 0);
     $eventRepository->moveAllFutureEventsAtVenueToNoSetVenue($venue, $user);
     #### Load event, check in area
     $event = $eventRepository->loadBySlug($site, $event->getSlug());
     $this->assertEquals(false, $event->getIsDeleted());
     $this->assertNull($event->getVenueId());
     $this->assertNull($event->getAreaId());
 }
 public function moveAllFutureEventsAtVenueToNoSetVenueWithMetaData(VenueModel $venue, EventEditMetaDataModel $eventEditMetaDataModel)
 {
     global $DB;
     $statFetch = $DB->prepare("SELECT event_information.* FROM event_information WHERE venue_id = :venue_id AND start_at > :start_at AND is_deleted='0'");
     $statFetch->execute(array('venue_id' => $venue->getId(), 'start_at' => \TimeSource::getFormattedForDataBase()));
     while ($data = $statFetch->fetch()) {
         $event = new EventModel();
         $event->setFromDataBaseRow($data);
         $event->setVenueId(null);
         $event->setAreaId($venue->getAreaId());
         $this->eventDBAccess->update($event, array('venue_id', 'area_id'), $eventEditMetaDataModel);
     }
 }
 /**
  * 
  * Gets new monthly events on the basis that the event is on the something day in the week.
  * eg. 2nd tuesday of month 
  * eg. 4th saturday in month
  * 
  * @param \models\EventModel $event
  * @param type $monthsInAdvance
  * @return \models\EventModel
  */
 public function getNewMonthlyEventsOnSetDayInWeek(EventModel $event, $daysInAdvance = 186)
 {
     // constants
     $interval = new \DateInterval('P1D');
     $timeZone = new \DateTimeZone($this->timeZoneName);
     $timeZoneUTC = new \DateTimeZone("UTC");
     // calculate which day of month it should be
     $dayOfWeek = $event->getStartAt()->format("N");
     $thisStart = new \DateTime($event->getStartAt()->format('Y-m-d H:i:s'), $timeZoneUTC);
     $thisEnd = new \DateTime($event->getEndAt()->format('Y-m-d H:i:s'), $timeZoneUTC);
     $thisStart->setTimeZone($timeZone);
     $thisEnd->setTimeZone($timeZone);
     $weekInMonth = 1;
     while ($thisStart->format('d') > 1) {
         $thisStart->sub($interval);
         $thisEnd->sub($interval);
         if ($thisStart->format("N") == $dayOfWeek) {
             ++$weekInMonth;
         }
     }
     // vars
     $out = array();
     $currentMonthLong = $thisStart->format('F');
     $currentMonthShort = $thisStart->format('M');
     $currentMonth = $thisStart->format('m');
     $currentWeekInMonth = 1;
     $loopStop = \TimeSource::time() + $daysInAdvance * 24 * 60 * 60;
     while ($thisStart->getTimestamp() < $loopStop) {
         $thisStart->add($interval);
         $thisEnd->add($interval);
         //print $thisStart->format("r")."  current month: ".$currentMonth." current week: ".$currentWeekInMonth."\n";
         if ($currentMonth != $thisStart->format('m')) {
             $currentMonth = $thisStart->format('m');
             $currentWeekInMonth = 1;
         }
         if ($thisStart->format("N") == $dayOfWeek) {
             if ($currentWeekInMonth == $weekInMonth && $thisStart->getTimestamp() > \TimeSource::time()) {
                 $start = clone $thisStart;
                 $end = clone $thisEnd;
                 $start->setTimeZone($timeZoneUTC);
                 $end->setTimeZone($timeZoneUTC);
                 $include = true;
                 if ($include) {
                     $newEvent = new EventModel();
                     $newEvent->setGroupId($event->getGroupId());
                     $newEvent->setVenueId($event->getVenueId());
                     $newEvent->setCountryId($event->getCountryId());
                     $newEvent->setEventRecurSetId($this->id);
                     $newEvent->setSummary($event->getSummary());
                     $newEvent->setDescription($event->getDescription());
                     $newEvent->setStartAt($start);
                     $newEvent->setEndAt($end);
                     foreach ($this->customFields as $customField) {
                         if ($event->hasCustomField($customField)) {
                             $newEvent->setCustomField($customField, $event->getCustomField($customField));
                         }
                     }
                     if (stripos($newEvent->getSummary(), $currentMonthLong) !== false) {
                         $newEvent->setSummary(str_ireplace($currentMonthLong, $newEvent->getStartAt()->format('F'), $newEvent->getSummary()));
                     } else {
                         if (stripos($newEvent->getSummary(), $currentMonthShort) !== false) {
                             $newEvent->setSummary(str_ireplace($currentMonthShort, $newEvent->getStartAt()->format('M'), $newEvent->getSummary()));
                         }
                     }
                     $out[] = $newEvent;
                 }
             }
             ++$currentWeekInMonth;
         }
     }
     return $out;
 }
 function addDataToEventBeforeCheck(EventModel $eventModel)
 {
     if ($this->draftEvent->getDetailsValue('area.id')) {
         $eventModel->setAreaId($this->draftEvent->getDetailsValue('area.id'));
     }
     if ($this->draftEvent->getDetailsValue('venue.id')) {
         $eventModel->setVenueId($this->draftEvent->getDetailsValue('venue.id'));
     }
 }