/** * @param ReservationSeries $reservation * @return ReservationRuleResult */ public function Validate($reservation) { $reservation->UserId(); $permissionService = $this->permissionServiceFactory->GetPermissionService(); $resourceIds = $reservation->AllResourceIds(); foreach ($resourceIds as $resourceId) { if (!$permissionService->CanAccessResource(new ReservationResource($resourceId), $reservation->BookedBy())) { return new ReservationRuleResult(false, Resources::GetInstance()->GetString('NoResourcePermission')); } } return new ReservationRuleResult(true); }
/** * @param ReservationSeries $reservationSeries * @param User $user * @param Schedule $schedule * @param IReservationViewRepository $reservationViewRepository * @return bool */ public function ExceedsQuota($reservationSeries, $user, $schedule, IReservationViewRepository $reservationViewRepository) { $timezone = $schedule->GetTimezone(); if (!is_null($this->resourceId)) { $appliesToResource = false; foreach ($reservationSeries->AllResourceIds() as $resourceId) { if (!$appliesToResource && $this->AppliesToResource($resourceId)) { $appliesToResource = true; } } if (!$appliesToResource) { return false; } } if (!is_null($this->groupId)) { $appliesToGroup = false; foreach ($user->Groups() as $group) { if (!$appliesToGroup && $this->AppliesToGroup($group->GroupId)) { $appliesToGroup = true; } } if (!$appliesToGroup) { return false; } } if (!$this->AppliesToSchedule($reservationSeries->ScheduleId())) { return false; } if (count($reservationSeries->Instances()) == 0) { return false; } $dates = $this->duration->GetSearchDates($reservationSeries, $timezone); $reservationsWithinRange = $reservationViewRepository->GetReservationList($dates->Start(), $dates->End(), $reservationSeries->UserId(), ReservationUserLevel::OWNER); try { $this->CheckAll($reservationsWithinRange, $reservationSeries, $timezone); } catch (QuotaExceededException $ex) { return true; } return false; }