Completed
Push — master ( b9c500...b355e1 )
by Allan
03:25
created

UserManager   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

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 25
cts 25
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A normalizePhone() 0 6 1
A loadUserByUsername() 0 16 4
B deleteIfNonEnabledExists() 0 22 6
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 2
    public function loadUserByUsername($username)
11
    {
12 2
        $user = $this->findUserByUsernameOrEmail($username);
13
14 2
        if (is_null($user)) {
15
            // if not username or email, we now try phone number
16 1
            $phoneNumber = $this->normalizePhone($username);
17 1
            $user = $this->repository->findOneByPhoneNumber($phoneNumber);
18
        }
19
20 2
        if (is_null($user) || !$user->isEnabled()) {
21 1
            return;
22
        }
23
24 1
        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 10
    public function deleteIfNonEnabledExists(User $user)
39
    {
40 10
        $email = $user->getEmail();
41 10
        $inDatabaseUser = null;
42 10
        if (!is_null($email)) {
43 5
            $inDatabaseUser = $this->findUserByUsernameOrEmail($email);
44
        }
45
46 10
        $phoneNumber = $user->getPhoneNumber();
47 10
        if (is_null($inDatabaseUser) && !is_null($phoneNumber)) {
48 5
            $phoneNumber = $this->normalizePhone($phoneNumber);
49 5
            $inDatabaseUser = $this->repository->findOneByPhoneNumber($phoneNumber);
50
        }
51
52 10
        $token = null;
53 10
        if (!is_null($inDatabaseUser) && !$inDatabaseUser->isEnabled()) {
54 2
            $token = $inDatabaseUser->getConfirmationToken();
55 2
            $this->deleteUser($inDatabaseUser);
56
        }
57
58 10
        return $token;
59
    }
60
61 6
    private function normalizePhone($phoneNumber)
62
    {
63 6
        $phoneNumber = str_replace('+', '00', $phoneNumber);
64
65 6
        return $phoneNumber;
66
    }
67
}
68