/** * @return void */ public function Validate() { try { $this->isValid = true; $days = array(null); if (!$this->validateSingle) { Log::Debug('Validating daily layout'); Log::Debug(var_export($this->reservableSlots, true)); if (count($this->reservableSlots) != DayOfWeek::NumberOfDays || count($this->blockedSlots) != DayOfWeek::NumberOfDays) { $this->isValid = false; return; } $layout = ScheduleLayout::ParseDaily('UTC', $this->reservableSlots, $this->blockedSlots); $days = DayOfWeek::Days(); } else { Log::Debug('Validating single layout'); $layout = ScheduleLayout::Parse('UTC', $this->reservableSlots, $this->blockedSlots); } foreach ($days as $day) { if (is_null($day)) { $day = 0; } $slots = $layout->GetLayout(Date::Now()->AddDays($day)->ToUtc()); /** @var $firstDate Date */ $firstDate = $slots[0]->BeginDate(); /** @var $lastDate Date */ $lastDate = $slots[count($slots) - 1]->EndDate(); if (!$firstDate->IsMidnight() || !$lastDate->IsMidnight()) { Log::Debug('Dates are not midnight'); $this->isValid = false; } for ($i = 0; $i < count($slots) - 1; $i++) { if (!$slots[$i]->EndDate()->Equals($slots[$i + 1]->BeginDate())) { $this->isValid = false; } } } } catch (Exception $ex) { Log::Error('Error during LayoutValidator', $ex); $this->isValid = false; } }
private function MigrateSchedules(Database $legacyDatabase, Database $currentDatabase) { $schedulesMigrated = MigrationSession::GetLastScheduleRow(); Log::Debug('Start migrating schedules. Starting at row %s', $schedulesMigrated); $scheduleRepo = new ScheduleRepository(); $getLegacySchedules = new AdHocCommand("select scheduleid, scheduletitle, daystart, dayend, timespan,\n timeformat, weekdaystart, viewdays, usepermissions, ishidden, showsummary, adminemail, isdefault\n from schedules order by scheduleid limit {$schedulesMigrated}, 500"); $getExistingSchedules = new AdHocCommand('select legacyid from schedules'); $reader = $currentDatabase->Query($getExistingSchedules); $knownIds = array(); while ($row = $reader->GetRow()) { $knownIds[] = $row['legacyid']; } $reader = $legacyDatabase->Query($getLegacySchedules); while ($row = $reader->GetRow()) { $legacyScheduleId = $row['scheduleid']; if (in_array($legacyScheduleId, $knownIds)) { continue; } $newId = $scheduleRepo->Add(new Schedule(null, $row['scheduletitle'], false, $row['weekdaystart'], $row['viewdays']), 1); $currentDatabase->Execute(new AdHocCommand("update schedules set legacyid = \"{$row['scheduleid']}\" where schedule_id = {$newId}")); $timezone = Configuration::Instance()->GetDefaultTimezone(); $available = $this->CreateAvailableTimeSlots($row['daystart'], $row['dayend'], $row['timespan']); $unavailable = $this->CreateUnavailableTimeSlots($row['daystart'], $row['dayend'], $row['timespan']); $layout = ScheduleLayout::Parse($timezone, $available, $unavailable); $scheduleRepo->AddScheduleLayout($newId, $layout); $schedulesMigrated++; MigrationSession::SetLastScheduleRow($schedulesMigrated); } Log::Debug('Done migrating schedules (%s schedules)', $schedulesMigrated); $getLegacyCount = new AdHocCommand('select count(*) as count from schedules'); $getMigratedCount = new AdHocCommand('select count(*) as count from schedules where legacyid is not null'); $progressCounts = $this->GetProgressCounts($getLegacyCount, $getMigratedCount); $this->page->SetProgress($progressCounts); $this->page->SetSchedulesMigrated($progressCounts->MigratedCount); MigrationSession::SetLastScheduleRow($progressCounts->MigratedCount); }
public function testCanGetPeriodForTime() { $timezone = 'America/Chicago'; $reservableSlots = "00:00 - 01:00 Label 1 A\n1:00- 2:00\r\n02:00 -3:30\n03:30-12:00\r\n"; $blockedSlots = "12:00 - 15:00 Blocked 1 A\n15:00- 20:00\r\n20:00 -0:00\n"; $layout = ScheduleLayout::Parse($timezone, $reservableSlots, $blockedSlots); $actual1 = $layout->GetPeriod(Date::Parse('2012-01-01 15:30:00', $timezone)); $actual2 = $layout->GetPeriod(Date::Parse('2012-01-01 02:00:00', $timezone)); $this->assertEquals(new NonSchedulePeriod(Date::Parse('2012-01-01 15:00', $timezone), Date::Parse('2012-01-01 20:00', $timezone)), $actual1); $this->assertEquals(new SchedulePeriod(Date::Parse('2012-01-01 02:00', $timezone), Date::Parse('2012-01-01 03:30', $timezone)), $actual2); }
/** * @param int $scheduleId * @param string $timezone * @param string $reservableSlots * @param string $blockedSlots */ public function ChangeLayout($scheduleId, $timezone, $reservableSlots, $blockedSlots) { $layout = ScheduleLayout::Parse($timezone, $reservableSlots, $blockedSlots); $this->scheduleRepository->AddScheduleLayout($scheduleId, $layout); }