Skip to content

Commit 4debd30

Browse files
committed
Extracting synchronization to service
1 parent 258a93f commit 4debd30

File tree

4 files changed

+72
-38
lines changed

4 files changed

+72
-38
lines changed

src/Resources/config/services.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@
3333
</service>
3434
</argument>
3535
<argument type="service" id="sylius.admin_user_provider.name_based" />
36-
<argument type="service" id="property_accessor" />
3736
<argument type="service" id="sylius_ldap.ldap.ldap_attribute_fetcher" />
3837
<argument type="service" id="sylius.factory.admin_user" />
38+
<argument type="service" id="Brille24\SyliusLdapPlugin\User\UserSynchronizer" />
3939
</service>
4040

4141
<service id="Symfony\Component\Ldap\Ldap">
@@ -54,5 +54,9 @@
5454
</argument>
5555
</service>
5656

57+
<service id="Brille24\SyliusLdapPlugin\User\UserSynchronizer">
58+
<argument type="service" id="property_accessor" />
59+
</service>
60+
5761
</services>
5862
</container>

src/User/SymfonyToSyliusUserProviderProxy.php

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,27 @@ final class SymfonyToSyliusUserProviderProxy implements SyliusUserProviderInterf
4343
private $attributeFetcher;
4444

4545
/**
46-
* @var PropertyAccessorInterface
46+
* @var FactoryInterface
4747
*/
48-
private $propertyAccessor;
48+
private $adminUserFactory;
4949

5050
/**
51-
* @var FactoryInterface
51+
* @var UserSynchronizer
5252
*/
53-
private $adminUserFactory;
53+
private $userSynchronizer;
5454

5555
public function __construct(
5656
SymfonyUserProviderInterface $ldapUserProvider,
5757
AbstractUserProvider $adminUserProvider,
58-
PropertyAccessorInterface $propertyAccessor,
5958
LdapAttributeFetcherInterface $attributeFetcher,
60-
FactoryInterface $adminUserFactory
59+
FactoryInterface $adminUserFactory,
60+
UserSynchronizer $userSynchronizer
6161
) {
6262
$this->ldapUserProvider = $ldapUserProvider;
6363
$this->adminUserProvider = $adminUserProvider;
6464
$this->attributeFetcher = $attributeFetcher;
65-
$this->propertyAccessor = $propertyAccessor;
6665
$this->adminUserFactory = $adminUserFactory;
66+
$this->userSynchronizer = $userSynchronizer;
6767
}
6868

6969
public function loadUserByUsername($username): SymfonyUserInterface
@@ -79,7 +79,7 @@ public function loadUserByUsername($username): SymfonyUserInterface
7979
return $syliusLdapUser;
8080
}
8181

82-
$this->synchroniseUsers($syliusLdapUser, $syliusUser);
82+
$this->userSynchronizer->synchroniseUsers($syliusLdapUser, $syliusUser);
8383

8484
return $syliusUser;
8585
}
@@ -95,7 +95,7 @@ public function refreshUser(SymfonyUserInterface $user): SymfonyUserInterface
9595
// Non-sylius-users (e.g.: symfony-users) are immutable and cannot be updated / synced.
9696
Assert::isInstanceOf($user, SyliusUserInterface::class);
9797

98-
$this->synchroniseUsers($syliusLdapUser, $user);
98+
$this->userSynchronizer->synchroniseUsers($syliusLdapUser, $user);
9999

100100
return $user;
101101
}
@@ -118,7 +118,6 @@ private function convertSymfonyToSyliusUser(SymfonyUserInterface $symfonyUser):
118118
$syliusUser->setPassword('');
119119
$syliusUser->setLocked($locked);
120120
$syliusUser->setEnabled(!$locked);
121-
// $syliusUser->setExpiresAt($ldapAttributes['expires_at']);
122121
$syliusUser->setLastLogin($this->attributeFetcher->toDateTime($ldapAttributes['last_login']));
123122
$syliusUser->setVerifiedAt($this->attributeFetcher->toDateTime($ldapAttributes['verified_at']));
124123
$syliusUser->setEmailCanonical($ldapAttributes['email_canonical']);
@@ -134,31 +133,4 @@ private function convertSymfonyToSyliusUser(SymfonyUserInterface $symfonyUser):
134133
return $syliusUser;
135134
}
136135

137-
private function synchroniseUsers(
138-
SyliusUserInterface $sourceUser,
139-
SyliusUserInterface $targetUser
140-
): void {
141-
$attributesToSync = [
142-
'email',
143-
'expiresAt',
144-
'lastLogin',
145-
'enabled',
146-
'verifiedAt',
147-
'emailCanonical',
148-
'username',
149-
'usernameCanonical',
150-
'credentialsExpireAt',
151-
];
152-
153-
if ($targetUser instanceof AdminUserInterface && $sourceUser instanceof AdminUserInterface) {
154-
$attributesToSync[] = 'lastName';
155-
$attributesToSync[] = 'firstName';
156-
$attributesToSync[] = 'localeCode';
157-
}
158-
159-
foreach ($attributesToSync as $attributeToSync) {
160-
$value = $this->propertyAccessor->getValue($sourceUser, $attributeToSync);
161-
$this->propertyAccessor->setValue($targetUser, $attributeToSync, $value);
162-
}
163-
}
164136
}

src/User/UserSynchronizer.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Brille24\SyliusLdapPlugin\User;
6+
7+
use Sylius\Component\Core\Model\AdminUserInterface;
8+
use Sylius\Component\User\Model\UserInterface as SyliusUserInterface;
9+
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
10+
11+
final class UserSynchronizer implements UserSynchronizerInterface
12+
{
13+
/**
14+
* @var PropertyAccessorInterface
15+
*/
16+
private $propertyAccessor;
17+
18+
public function __construct(PropertyAccessorInterface $propertyAccessor)
19+
{
20+
$this->propertyAccessor = $propertyAccessor;
21+
}
22+
23+
public function synchroniseUsers(SyliusUserInterface $sourceUser, SyliusUserInterface $targetUser): void
24+
{
25+
$attributesToSync = [
26+
'email',
27+
'expiresAt',
28+
'lastLogin',
29+
'enabled',
30+
'verifiedAt',
31+
'emailCanonical',
32+
'username',
33+
'usernameCanonical',
34+
'credentialsExpireAt',
35+
];
36+
37+
if ($targetUser instanceof AdminUserInterface && $sourceUser instanceof AdminUserInterface) {
38+
$attributesToSync[] = 'lastName';
39+
$attributesToSync[] = 'firstName';
40+
}
41+
42+
foreach ($attributesToSync as $attributeToSync) {
43+
$value = $this->propertyAccessor->getValue($sourceUser, $attributeToSync);
44+
$this->propertyAccessor->setValue($targetUser, $attributeToSync, $value);
45+
}
46+
}
47+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Brille24\SyliusLdapPlugin\User;
5+
6+
use Sylius\Component\User\Model\UserInterface as SyliusUserInterface;
7+
8+
interface UserSynchronizerInterface
9+
{
10+
public function synchroniseUsers(SyliusUserInterface $sourceUser, SyliusUserInterface $targetUser): void;
11+
}

0 commit comments

Comments
 (0)