Completed
Push — master ( 817fef...b9c500 )
by Allan
06:04
created

UserManager   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 0%

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 11
c 3
b 0
f 0
lcom 1
cbo 2
dl 0
loc 60
ccs 0
cts 36
cp 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A loadUserByUsername() 0 16 4
B deleteIfNonEnabledExists() 0 22 6
A normalizePhone() 0 6 1
1
<?php
2
3
namespace SMG\UserBundle\Manager;
4
5
use FOS\UserBundle\Entity\UserManager as FOSUserManager;
6
use SMG\UserBundle\Entity\User;
7
8
class UserManager extends FOSUserManager
9
{
10
    public function loadUserByUsername($username)
11
    {
12
        $user = $this->findUserByUsernameOrEmail($username);
13
14
        if (is_null($user)) {
15
            // if not username or email, we now try phone number
16
            $phoneNumber = $this->normalizePhone($username);
17
            $user = $this->repository->findOneByPhoneNumber($phoneNumber);
18
        }
19
20
        if (is_null($user) || !$user->isEnabled()) {
21
            return;
22
        }
23
24
        return $user;
25
    }
26
27
    /**
28
     * If a User already exists with the same email or phone number but
29
     * that it was never enabled, we delete that previous user (this case
30
     * may happen if the user stop the registration process before sending
31
     * the validation code and then change phone etc.).
32
     * However to not confuse user, we keep the same confirmation token.
33
     *
34
     * @param User $user User to check the existence of
35
     *
36
     * @return string|null
37
     */
38
    public function deleteIfNonEnabledExists(User $user)
39
    {
40
        $email = $user->getEmail();
41
        $inDatabaseUser = null;
42
        if (!is_null($email)) {
43
            $inDatabaseUser = $this->findUserByUsernameOrEmail($email);
44
        }
45
46
        $phoneNumber = $user->getPhoneNumber();
47
        if (is_null($inDatabaseUser) && !is_null($phoneNumber)) {
48
            $phoneNumber = $this->normalizePhone($phoneNumber);
49
            $inDatabaseUser = $this->repository->findOneByPhoneNumber($phoneNumber);
50
        }
51
52
        $token = null;
53
        if (!is_null($inDatabaseUser) && !$inDatabaseUser->isEnabled()) {
54
            $token = $inDatabaseUser->getConfirmationToken();
55
            $this->deleteUser($inDatabaseUser);
56
        }
57
58
        return $token;
59
    }
60
61
    private function normalizePhone($phoneNumber)
62
    {
63
        $phoneNumber = str_replace('+', '00', $phoneNumber);
64
65
        return $phoneNumber;
66
    }
67
}
68