vendor/dachcom-digital/members/src/MembersBundle/Manager/UserManager.php line 22

Open in your IDE?
  1. <?php
  2. namespace MembersBundle\Manager;
  3. use MembersBundle\Adapter\User\UserInterface;
  4. use MembersBundle\Configuration\Configuration;
  5. use Pimcore\Model\DataObject;
  6. use Pimcore\Model\Version;
  7. class UserManager implements UserManagerInterface
  8. {
  9.     protected Configuration $configuration;
  10.     protected ClassManagerInterface $classManager;
  11.     protected int $memberStorageId;
  12.     public function __construct(Configuration $configurationClassManagerInterface $classManager)
  13.     {
  14.         $this->configuration $configuration;
  15.         $this->classManager $classManager;
  16.         $storagePath $configuration->getConfig('storage_path');
  17.         if (($membersStoreObject DataObject::getByPath($storagePath)) instanceof DataObject\Folder) {
  18.             $this->memberStorageId $membersStoreObject->getId();
  19.         }
  20.     }
  21.     public function getClass(): string
  22.     {
  23.         return $this->classManager->getUserClass();
  24.     }
  25.     public function deleteUser(UserInterface $user): void
  26.     {
  27.         if (!$user instanceof DataObject\Concrete) {
  28.             return;
  29.         }
  30.         $user->delete();
  31.     }
  32.     public function findUserByConfirmationToken(string $tokenbool $includeUnpublished true): ?UserInterface
  33.     {
  34.         $memberListing $this->classManager->getUserListing();
  35.         $memberListing->setCondition('confirmationToken = ?', [$token]);
  36.         $memberListing->setUnpublished($includeUnpublished);
  37.         $elements $memberListing->getObjects();
  38.         if (count($elements) === 0) {
  39.             return null;
  40.         }
  41.         return $elements[0];
  42.     }
  43.     public function findUserByEmail(string $emailAddressbool $includeUnpublished true): ?UserInterface
  44.     {
  45.         $memberListing $this->classManager->getUserListing();
  46.         $memberListing->setCondition('email = ?', [$emailAddress]);
  47.         $memberListing->setUnpublished($includeUnpublished);
  48.         $elements $memberListing->getObjects();
  49.         if (count($elements) === 0) {
  50.             return null;
  51.         }
  52.         return $elements[0];
  53.     }
  54.     public function findUserByUsername(string $usernamebool $includeUnpublished true): ?UserInterface
  55.     {
  56.         $memberListing $this->classManager->getUserListing();
  57.         $memberListing->setCondition('userName = ?', [$username]);
  58.         $memberListing->setUnpublished($includeUnpublished);
  59.         $elements $memberListing->getObjects();
  60.         if (count($elements) === 0) {
  61.             return null;
  62.         }
  63.         return $elements[0];
  64.     }
  65.     public function findUserById(int $userIdbool $includeUnpublished true): ?UserInterface
  66.     {
  67.         $memberListing $this->classManager->getUserListing();
  68.         $memberListing->setCondition('oo_id = ?', [$userId]);
  69.         $memberListing->setUnpublished($includeUnpublished);
  70.         $elements $memberListing->getObjects();
  71.         if (count($elements) === 0) {
  72.             return null;
  73.         }
  74.         return $elements[0];
  75.     }
  76.     public function findUserByCondition(
  77.         string $condition '',
  78.         array $conditionVariables = [],
  79.         bool $includeUnpublished true,
  80.         bool $returnSingle true
  81.     ): ?UserInterface {
  82.         $memberListing $this->classManager->getUserListing();
  83.         $memberListing->setCondition($condition$conditionVariables);
  84.         $memberListing->setUnpublished($includeUnpublished);
  85.         $elements $memberListing->getObjects();
  86.         if (count($elements) === 0) {
  87.             return null;
  88.         }
  89.         if (count($elements) > 1) {
  90.             throw new \Exception(sprintf('User condition "%s" is ambiguous, multiple matches occurred'$condition));
  91.         }
  92.         return $elements[0];
  93.     }
  94.     public function findUserByUsernameOrEmail($usernameOrEmail): ?UserInterface
  95.     {
  96.         if (preg_match('/^.+\@\S+\.\S+$/'$usernameOrEmail)) {
  97.             return $this->findUserByEmail($usernameOrEmail);
  98.         }
  99.         return $this->findUserByUsername($usernameOrEmail);
  100.     }
  101.     public function findUsers(): array
  102.     {
  103.         $memberListing $this->classManager->getUserListing();
  104.         return $memberListing->getObjects();
  105.     }
  106.     public function reloadUser(UserInterface $user): void
  107.     {
  108.         throw new \Exception('reload user not implemented');
  109.     }
  110.     public function createUser(): UserInterface
  111.     {
  112.         $userClass $this->classManager->getUserClass();
  113.         return new $userClass();
  114.     }
  115.     public function createAnonymousUser(string $key): UserInterface
  116.     {
  117.         $userClass $this->classManager->getUserClass();
  118.         $user = new $userClass();
  119.         return $this->setupNewUser($user$key);
  120.     }
  121.     public function updateUser(UserInterface $user, array $properties = []): UserInterface
  122.     {
  123.         $new false;
  124.         $userConfig $this->configuration->getConfig('user');
  125.         $objectKeyGetter sprintf('get%s'ucfirst($userConfig['adapter']['object_key_form_field']));
  126.         //It's a new user!
  127.         if (empty($user->getKey())) {
  128.             $new true;
  129.             $key $user->$objectKeyGetter();
  130.             $user $this->setupNewUser($user$key);
  131.         }
  132.         // update user properties.
  133.         if (!empty($properties)) {
  134.             foreach ($properties as $propKey => $propValue) {
  135.                 $user->setProperty($propKey'text'$propValuefalse);
  136.             }
  137.         }
  138.         // Transfer plain password after a fresh register or a password reset action.
  139.         if (!empty($user->getPlainPassword())) {
  140.             $user->setPassword($user->getPlainPassword());
  141.         }
  142.         return $new $this->saveWithVersion($user) : $this->saveWithoutVersion($user);
  143.     }
  144.     private function setupNewUser(UserInterface $user, ?string $key): UserInterface
  145.     {
  146.         $validKey $key ?? $user->getEmail();
  147.         $user->setKey(\Pimcore\File::getValidFilename($validKey));
  148.         $user->setParentId($this->memberStorageId);
  149.         $userGroups = [];
  150.         $userConfiguration $this->configuration->getConfig('user');
  151.         foreach ($userConfiguration['initial_groups'] as $group) {
  152.             $listing $this->classManager->getGroupListing();
  153.             $listing->setUnpublished(false);
  154.             if (is_string($group)) {
  155.                 $listing->setCondition('name = ?', [$group]);
  156.             } else {
  157.                 $listing->setCondition('oo_id = ?', [$group]);
  158.             }
  159.             $objects $listing->getObjects();
  160.             if (count($objects) > 0) {
  161.                 $userGroups[] = $objects[0];
  162.             }
  163.         }
  164.         if (count($userGroups)) {
  165.             $user->setGroups($userGroups);
  166.         }
  167.         return $user;
  168.     }
  169.     /**
  170.      * @throws \Exception
  171.      */
  172.     private function saveWithVersion(UserInterface $user): UserInterface
  173.     {
  174.         return $user->save();
  175.     }
  176.     /**
  177.      * @throws \Exception
  178.      */
  179.     private function saveWithoutVersion(UserInterface $user): UserInterface
  180.     {
  181.         Version::disable();
  182.         $state $user->save();
  183.         Version::enable();
  184.         return $state;
  185.     }
  186. }