public function __construct(IRestServer $server, User $user, IEntityAttributeList $attributes) { $userId = $user->Id(); $this->id = $userId; $this->emailAddress = $user->EmailAddress(); $this->firstName = $user->FirstName(); $this->lastName = $user->LastName(); $this->language = $user->Language(); $this->lastLogin = Date::FromDatabase($user->LastLogin())->ToIso(); $this->organization = $user->GetAttribute(UserAttribute::Organization); $this->phoneNumber = $user->GetAttribute(UserAttribute::Phone); $this->position = $user->GetAttribute(UserAttribute::Position); $this->statusId = $user->StatusId(); $this->timezone = $user->Timezone(); $this->username = $user->Username(); $attributeValues = $attributes->GetAttributes($userId); if (!empty($attributeValues)) { foreach ($attributeValues as $av) { $this->customAttributes[] = new CustomAttributeResponse($server, $av->Id(), $av->Label(), $av->Value()); } } foreach ($user->AllowedResourceIds() as $allowedResourceId) { $this->permissions[] = new ResourceItemResponse($server, $allowedResourceId, ''); } foreach ($user->Groups() as $group) { $this->groups[] = new GroupItemResponse($server, $group->GroupId, $group->GroupName); } if ($user->GetIsCalendarSubscriptionAllowed()) { $url = new CalendarSubscriptionUrl($user->GetPublicId(), null, null); $this->icsUrl = $url->__toString(); } }
/** * @param User $user * @return bool */ public function IsAdminFor(User $user) { if ($this->isApplicationAdmin) { return true; } if (!$this->isGroupAdmin) { return false; } $adminIdsForUser = array(); foreach ($user->Groups() as $userGroup) { if (!empty($userGroup->AdminGroupId)) { $adminIdsForUser[$userGroup->AdminGroupId] = true; } } foreach ($this->Groups() as $group) { if ($group->IsGroupAdmin) { if (array_key_exists($group->GroupId, $adminIdsForUser)) { return true; } } } return false; }
/** * @param User $user * @return int */ public function Add(User $user) { $db = ServiceLocator::GetDatabase(); $id = $db->ExecuteInsert(new RegisterUserCommand($user->Username(), $user->EmailAddress(), $user->FirstName(), $user->LastName(), $user->encryptedPassword, $user->passwordSalt, $user->Timezone(), $user->Language(), $user->Homepage(), $user->GetAttribute(UserAttribute::Phone), $user->GetAttribute(UserAttribute::Organization), $user->GetAttribute(UserAttribute::Position), $user->StatusId(), $user->GetPublicId(), $user->GetDefaultScheduleId())); $user->WithId($id); if (Configuration::Instance()->GetKey(ConfigKeys::REGISTRATION_NOTIFY, new BooleanConverter())) { ServiceLocator::GetEmailService()->Send(new AccountCreationEmail($user)); } foreach ($user->GetAddedAttributes() as $added) { $db->Execute(new AddAttributeValueCommand($added->AttributeId, $added->Value, $user->Id(), CustomAttributeCategory::USER)); } $addedPreferences = $user->GetAddedEmailPreferences(); foreach ($addedPreferences as $event) { $db->Execute(new AddEmailPreferenceCommand($id, $event->EventCategory(), $event->EventType())); } $userGroups = $user->Groups(); if (!empty($userGroups)) { foreach ($userGroups as $group) { $db->Execute(new AddUserGroupCommand($id, $group->GroupId)); } } return $id; }
/** * @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; }