Completed
Pull Request — master (#14)
by
unknown
02:32
created

UserRepositoryCollection   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 117
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 11
Bugs 1 Features 4
Metric Value
wmc 17
c 11
b 1
f 4
lcom 1
cbo 2
dl 0
loc 117
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 2
A addUserRepository() 0 4 1
A all() 0 8 2
A findRepositoryByClassName() 0 10 3
A supportsClass() 0 10 3
A findUserByToken() 0 12 3
A findUserByUserName() 0 12 3
1
<?php
2
3
namespace SumoCoders\FrameworkMultiUserBundle\User;
4
5
use SumoCoders\FrameworkMultiUserBundle\Exception\NoRepositoriesRegisteredException;
6
use SumoCoders\FrameworkMultiUserBundle\Exception\RepositoryNotRegisteredException;
7
8
class UserRepositoryCollection
9
{
10
    /**
11
     * @var array
12
     */
13
    private $userRepositories = [];
14
15
    /**
16
     * UserRepositoryCollection constructor.
17
     *
18
     * @param array $userRepositories
19
     */
20
    public function __construct(array $userRepositories)
21
    {
22
        foreach ($userRepositories as $repository) {
23
            $this->addUserRepository($repository);
24
        }
25
    }
26
27
    /**
28
     * Registers the UserRepository to the UserRepositoryCollection.
29
     *
30
     * @param UserRepository $userRepository
31
     */
32
    public function addUserRepository(UserRepository $userRepository)
33
    {
34
        $this->userRepositories[] = $userRepository;
35
    }
36
37
    /**
38
     * Get the userRepositories.
39
     *
40
     * @throws NoRepositoriesRegisteredException
41
     *
42
     * @return array
43
     */
44
    public function all()
45
    {
46
        if (count($this->userRepositories) === 0) {
47
            throw new NoRepositoriesRegisteredException('No user repositories registered');
48
        }
49
50
        return $this->userRepositories;
51
    }
52
53
    /**
54
     * Find the UserRepository for a given User Class.
55
     *
56
     * @param $className
57
     *
58
     * @throws RepositoryNotRegisteredException
59
     *
60
     * @return UserRepository
61
     */
62
    public function findRepositoryByClassName($className)
63
    {
64
        foreach ($this->userRepositories as $repository) {
65
            if ($repository->supportsClass($className)) {
66
                return $repository;
67
            }
68
        }
69
70
        throw RepositoryNotRegisteredException::withClassName($className);
71
    }
72
73
    /**
74
     * Check if the UserRepositoryCollection supports a User class.
75
     *
76
     * @param $className
77
     *
78
     * @return bool
79
     */
80
    public function supportsClass($className)
81
    {
82
        foreach ($this->userRepositories as $repository) {
83
            if ($repository->supportsClass($className)) {
84
                return true;
85
            }
86
        }
87
88
        return false;
89
    }
90
91
    /**
92
     * @param $token
93
     *
94
     * @return UserInterface|null
95
     */
96
    public function findUserByToken($token)
97
    {
98
        foreach ($this->userRepositories as $repository) {
99
            $user = $repository->findByPasswordResetToken($token);
100
101
            if ($user) {
102
                return $user;
103
            }
104
        }
105
106
        return;
107
    }
108
109
    /**
110
     * @param $username
111
     */
112
    public function findUserByUserName($username)
113
    {
114
        foreach ($this->userRepositories as $repository) {
115
            $user = $repository->findByUsername($username);
116
117
            if ($user) {
118
                return $user;
119
            }
120
        }
121
122
        return;
123
    }
124
}
125