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

UserManager::normalizePhone()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
ccs 0
cts 5
cp 0
rs 9.4286
cc 1
eloc 3
nc 1
nop 1
crap 2
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