mapper->findByPhoneNumber($phoneNumber); $user = $this->userManager->get($entity->getActorId()); if (!$user instanceof IUser) { throw new DoesNotExistException('Invalid user'); } $outOfOffice = $this->availabilityCoordinator->getCurrentOutOfOfficeData($user); if ($outOfOffice === null || $outOfOffice->getReplacementUserId() === null || !$this->availabilityCoordinator->isInEffect($outOfOffice)) { return $entity; } $replacementUser = $this->userManager->get($outOfOffice->getReplacementUserId()); if (!$replacementUser instanceof IUser) { // Replacement is wrong, fall back to original user return $entity; } $outOfOffice = $this->availabilityCoordinator->getCurrentOutOfOfficeData($replacementUser); if ($outOfOffice !== null && $this->availabilityCoordinator->isInEffect($outOfOffice)) { // Replacement is also OOO, fall back to original user return $entity; } $entities = $this->mapper->findByUser($replacementUser->getUID()); if (empty($entities)) { // Replacement has no phone number, fall back to original user return $entity; } return array_shift($entities); } /** * @return list */ public function findByUser(string $userId): array { return $this->mapper->findByUser($userId); } /** * @return list */ public function findByPhoneNumbers(array $phoneNumbers): array { return $this->mapper->findByPhoneNumbers($phoneNumbers); } public function deleteByPhoneNumber(string $phoneNumber): void { $this->mapper->deleteByPhoneNumber($phoneNumber); } public function deleteByUser(string $userId): void { $this->mapper->deleteByUser($userId); } }