diff --git a/application/Espo/Binding.php b/application/Espo/Binding.php index 55fb828917..dbe43ed4d0 100644 --- a/application/Espo/Binding.php +++ b/application/Espo/Binding.php @@ -258,12 +258,6 @@ class Binding implements BindingProcessor 'Espo\\Core\\Authentication\\Oidc\\UserProvider\\DefaultUserProvider' ); - $binder - ->bindImplementation( - 'Espo\\Core\\Authentication\\Oidc\\UserProvider\\UserRepository', - 'Espo\\Core\\Authentication\\Oidc\\UserProvider\\DefaultUserRepository' - ); - $binder->bindImplementation( 'Espo\\Core\\Mail\\Importer\\ParentFinder', 'Espo\\Core\\Mail\\Importer\\DefaultParentFinder' diff --git a/application/Espo/Core/Authentication/Oidc/UserProvider/DefaultUserRepository.php b/application/Espo/Core/Authentication/Oidc/UserProvider/DefaultUserRepository.php deleted file mode 100644 index 4fc1ce4e18..0000000000 --- a/application/Espo/Core/Authentication/Oidc/UserProvider/DefaultUserRepository.php +++ /dev/null @@ -1,84 +0,0 @@ -entityManager->getRDBRepositoryByClass(User::class)->getNew(); - } - - public function save(User $user): void - { - $this->entityManager->saveEntity($user, [ - // Prevent `user` service being loaded by hooks. - SaveOption::SKIP_HOOKS => true, - SaveOption::KEEP_NEW => true, - SaveOption::KEEP_DIRTY => true, - ]); - - $saverParams = SaverParams::create()->withRawOptions(['skipLinkMultipleHooks' => true]); - - $this->linkMultipleSaver->process($user, 'teams', $saverParams); - $this->linkMultipleSaver->process($user, 'portals', $saverParams); - $this->linkMultipleSaver->process($user, 'portalRoles', $saverParams); - $this->emailAddressSaver->process($user, $saverParams); - $this->phoneNumberSaver->process($user, $saverParams); - - $user->setAsNotNew(); - $user->updateFetchedValues(); - - $this->entityManager->refreshEntity($user); - } - - public function findByUsername(string $username): ?User - { - return $this->entityManager - ->getRDBRepositoryByClass(User::class) - ->where(['userName' => $username]) - ->findOne(); - } -} diff --git a/application/Espo/Core/Authentication/Oidc/UserProvider/UserRepository.php b/application/Espo/Core/Authentication/Oidc/UserProvider/UserRepository.php index 438c099b55..e6e6780538 100644 --- a/application/Espo/Core/Authentication/Oidc/UserProvider/UserRepository.php +++ b/application/Espo/Core/Authentication/Oidc/UserProvider/UserRepository.php @@ -29,22 +29,56 @@ namespace Espo\Core\Authentication\Oidc\UserProvider; +use Espo\Core\FieldProcessing\EmailAddress\Saver as EmailAddressSaver; +use Espo\Core\FieldProcessing\PhoneNumber\Saver as PhoneNumberSaver; +use Espo\Core\FieldProcessing\Relation\LinkMultipleSaver; +use Espo\Core\FieldProcessing\Saver\Params as SaverParams; +use Espo\Core\ORM\Repository\Option\SaveOption; use Espo\Entities\User; +use Espo\ORM\EntityManager; -interface UserRepository +class UserRepository { - /** - * Get a new unsaved user. - */ - public function getNew(): User; + public function __construct( + private EntityManager $entityManager, + private LinkMultipleSaver $linkMultipleSaver, + private EmailAddressSaver $emailAddressSaver, + private PhoneNumberSaver $phoneNumberSaver + ) {} - /** - * Save a user. - */ - public function save(User $user): void; + public function getNew(): User + { + return $this->entityManager->getRDBRepositoryByClass(User::class)->getNew(); + } - /** - * Find a user by a username. - */ - public function findByUsername(string $username): ?User; + public function save(User $user): void + { + $this->entityManager->saveEntity($user, [ + // Prevent `user` service being loaded by hooks. + SaveOption::SKIP_HOOKS => true, + SaveOption::KEEP_NEW => true, + SaveOption::KEEP_DIRTY => true, + ]); + + $saverParams = SaverParams::create()->withRawOptions(['skipLinkMultipleHooks' => true]); + + $this->linkMultipleSaver->process($user, 'teams', $saverParams); + $this->linkMultipleSaver->process($user, 'portals', $saverParams); + $this->linkMultipleSaver->process($user, 'portalRoles', $saverParams); + $this->emailAddressSaver->process($user, $saverParams); + $this->phoneNumberSaver->process($user, $saverParams); + + $user->setAsNotNew(); + $user->updateFetchedValues(); + + $this->entityManager->refreshEntity($user); + } + + public function findByUsername(string $username): ?User + { + return $this->entityManager + ->getRDBRepositoryByClass(User::class) + ->where(['userName' => $username]) + ->findOne(); + } }