public function Bind(IReservationComponentInitializer $initializer) { $timezone = $initializer->GetTimezone(); $reservationDate = $initializer->GetReservationDate(); $requestedEndDate = $initializer->GetEndDate(); $requestedStartDate = $initializer->GetStartDate(); $requestedScheduleId = $initializer->GetScheduleId(); $requestedDate = $reservationDate == null ? Date::Now()->ToTimezone($timezone) : $reservationDate->ToTimezone($timezone); $startDate = $requestedStartDate == null ? $requestedDate : $requestedStartDate->ToTimezone($timezone); $endDate = $requestedEndDate == null ? $requestedDate : $requestedEndDate->ToTimezone($timezone); if ($initializer->IsNew()) { $resource = $initializer->PrimaryResource(); if ($resource->GetMinimumLength() != null && !$resource->GetMinimumLength()->Interval()->IsNull()) { $endDate = $startDate->ApplyDifference($resource->GetMinimumLength()->Interval()); } } $layout = $this->scheduleRepository->GetLayout($requestedScheduleId, new ReservationLayoutFactory($timezone)); $startPeriods = $layout->GetLayout($startDate); if (count($startPeriods) > 1 && $startPeriods[0]->Begin()->Compare($startPeriods[1]->Begin()) > 0) { $period = array_shift($startPeriods); $startPeriods[] = $period; } $endPeriods = $layout->GetLayout($endDate); $initializer->SetDates($startDate, $endDate, $startPeriods, $endPeriods); $hideRecurrence = !$initializer->CurrentUser()->IsAdmin && Configuration::Instance()->GetSectionKey(ConfigSection::RESERVATION, ConfigKeys::RESERVATION_PREVENT_RECURRENCE, new BooleanConverter()); $initializer->HideRecurrence($hideRecurrence); }