/** * @see ISchedulePageBuilder::GetScheduleDates() */ public function GetScheduleDates(UserSession $user, ISchedule $schedule, ISchedulePage $page) { $userTimezone = $user->Timezone; $providedDate = $page->GetSelectedDate(); $date = empty($providedDate) ? Date::Now() : new Date($providedDate, $userTimezone); $selectedDate = $date->ToTimezone($userTimezone)->GetDate(); $selectedWeekday = $selectedDate->Weekday(); $scheduleLength = $schedule->GetDaysVisible(); if ($page->GetShowFullWeek()) { $scheduleLength = 7; } /** * Examples * * if we are on 3 and we need to start on 6, we need to go back 4 days * if we are on 3 and we need to start on 5, we need to go back 5 days * if we are on 3 and we need to start on 4, we need to go back 6 days * if we are on 3 and we need to start on 3, we need to go back 0 days * if we are on 3 and we need to start on 2, we need to go back 1 days * if we are on 3 and we need to start on 1, we need to go back 2 days * if we are on 3 and we need to start on 0, we need to go back 3 days */ $startDay = $schedule->GetWeekdayStart(); if ($startDay == Schedule::Today) { $startDate = $selectedDate; } else { $adjustedDays = $startDay - $selectedWeekday; if ($selectedWeekday < $startDay) { $adjustedDays = $adjustedDays - 7; } $startDate = $selectedDate->AddDays($adjustedDays); } $applicableDates = new DateRange($startDate, $startDate->AddDays($scheduleLength)); return $applicableDates; }