Passed
Push — master ( 0716b8...6a0d02 )
by Jan
04:25
created

UserRepository   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 17
dl 0
loc 43
rs 10
c 3
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getAnonymousUser() 0 9 2
A findByEmailOrName() 0 17 3
1
<?php
2
/**
3
 * This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
4
 *
5
 * Copyright (C) 2019 Jan Böhmer (https://github.com/jbtronics)
6
 *
7
 * This program is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU General Public License
9
 * as published by the Free Software Foundation; either version 2
10
 * of the License, or (at your option) any later version.
11
 *
12
 * This program is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 * GNU General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU General Public License
18
 * along with this program; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
20
 */
21
22
namespace App\Repository;
23
24
use App\Entity\UserSystem\User;
25
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
26
use Doctrine\ORM\EntityManagerInterface;
27
use Doctrine\ORM\EntityRepository;
28
use Doctrine\ORM\Mapping;
29
use Doctrine\ORM\NonUniqueResultException;
30
use Symfony\Bridge\Doctrine\RegistryInterface;
31
32
/**
33
 * @method User|null find($id, $lockMode = null, $lockVersion = null)
34
 * @method User|null findOneBy(array $criteria, array $orderBy = null)
35
 * @method User[]    findAll()
36
 * @method User[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
37
 */
38
class UserRepository extends EntityRepository
39
{
40
    protected $anonymous_user;
41
42
    /**
43
     * Returns the anonymous user.
44
     * The result is cached, so the database is only called once, after the anonymous user was found.
45
     *
46
     * @return User|null
47
     */
48
    public function getAnonymousUser() : ?User
49
    {
50
        if ($this->anonymous_user === null) {
51
            $this->anonymous_user = $this->findOneBy([
52
                'id' => User::ID_ANONYMOUS,
53
            ]);
54
        }
55
56
        return $this->anonymous_user;
57
    }
58
59
    /**
60
     * Find a user by its name or its email. Useful for login or password reset purposes.
61
     * @param string $name_or_password The username or the email of the user that should be found
62
     * @return User|null The user if it is existing, null if no one matched the criteria
63
     */
64
    public function findByEmailOrName(string $name_or_password) : ?User
65
    {
66
        if (empty($name_or_password)) {
67
            return null;
68
        }
69
70
        $qb = $this->createQueryBuilder('u');
71
        $qb->select('u')
72
            ->where('u.name = (:name)')
73
            ->orWhere('u.email = (:email)');
74
75
        $qb->setParameters(['email' => $name_or_password, 'name' => $name_or_password]);
76
77
        try {
78
            return $qb->getQuery()->getOneOrNullResult();
79
        } catch (NonUniqueResultException $exception) {
80
            return null;
81
        }
82
    }
83
}
84