DefaultUsernameListener::onFlush()   B
last analyzed

Complexity

Conditions 5
Paths 4

Size

Total Lines 26
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
c 2
b 1
f 0
dl 0
loc 26
rs 8.439
cc 5
eloc 16
nc 4
nop 1
1
<?php
2
3
namespace DoS\UserBundle\EventListener;
4
5
use Sylius\Component\User\Model\CustomerInterface;
6
use Doctrine\ORM\Event\OnFlushEventArgs;
7
8
class DefaultUsernameListener
9
{
10
    /**
11
     * @param OnFlushEventArgs $onFlushEventArgs
12
     */
13
    public function onFlush(OnFlushEventArgs $onFlushEventArgs)
14
    {
15
        $entityManager = $onFlushEventArgs->getEntityManager();
16
        $unitOfWork = $entityManager->getUnitOfWork();
17
18
        $entities = array_merge(
19
            $unitOfWork->getScheduledEntityInsertions(),
20
            $unitOfWork->getScheduledEntityUpdates()
21
        );
22
23
        foreach ($entities as $entity) {
24
            if (!$entity instanceof CustomerInterface) {
25
                continue;
26
            }
27
28
            $user = $entity->getUser();
29
30
            if (null !== $user && $user->getUsername() === null) {
31
                $user->setUsername($entity->getEmail());
32
                $user->setUsernameCanonical($user->getEmail());
33
                $entityManager->persist($user);
34
                $userMetadata = $entityManager->getClassMetadata(get_class($user));
35
                $unitOfWork->recomputeSingleEntityChangeSet($userMetadata, $user);
36
            }
37
        }
38
    }
39
}
40