Completed
Push — master ( 617c8f...4a327b )
by Derek Stephen
09:28
created

UserRepository::checkCriteriaForId()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 9
ccs 8
cts 8
cp 1
rs 9.6666
cc 2
eloc 6
nc 2
nop 1
crap 2
1
<?php
2
3
namespace Del\Repository;
4
5
use Del\Criteria\UserCriteria;
6
use Del\Entity\User;
7
use Doctrine\ORM\EntityRepository;
8
use Doctrine\ORM\QueryBuilder;
9
10
11
class UserRepository extends EntityRepository
12
{
13
    /** @var QueryBuilder $qb */
14
    private $qb;
15
16 18
    /**
17
     * @param User $user
18 18
     * @return User
19 18
     */
20 18
    public function save(User $user)
21 18
    {
22 18
        if(!$user->getID()) {
23 18
            $this->_em->persist($user);
24
        }
25
        $this->_em->flush($user);
26
        $this->_em->flush($user->getPerson());
27
        return $user;
28 18
    }
29
    /**
30 18
     * @param User $user
31 17
     */
32 17
    public function delete(User $user, $deletePerson = false)
33 18
    {
34 18
        if($deletePerson) {
35 18
            $this->_em->remove($user->getPerson());
36
        }
37
        $this->_em->remove($user);
38
        $this->_em->flush($user);
39
    }
40
41 14
    /**
42
     * @param UserCriteria $criteria
43 14
     * @return UserCriteria
44
     */
45 14
    private function checkCriteriaForId(UserCriteria $criteria)
46 1
    {
47 1
        if($criteria->hasId()) {
48 1
            $this->qb->where('u.id = :id');
49 1
            $this->qb->setParameter('id', $criteria->getId());
50
            $criteria->setLimit(1);
51 14
        }
52 13
        return $criteria;
53 13
    }
54 13
55 13
    /**
56
     * @param UserCriteria $criteria
57 14
     * @return UserCriteria
58 2
     */
59 2
    private function checkCriteriaForEmail(UserCriteria $criteria)
60 2
    {
61
        if($criteria->hasEmail()) {
62 14
            $this->qb->where('u.email = :email');
63 2
            $this->qb->setParameter('email', $criteria->getEmail());
64 2
            $criteria->setLimit(1);
65 2
        }
66
        return $criteria;
67 14
    }
68 2
69 2
    private function checkCriteriaForState(UserCriteria $criteria)
70 2
    {
71
        if($criteria->hasState()) {
72 14
            $this->qb->andWhere('u.state = :state');
73 14
            $this->qb->setParameter('state', $criteria->getState());
74 14
        }
75
    }
76 14
77
    private function checkCriteriaForRegistrationDate(UserCriteria $criteria)
78 14
    {
79
        if($criteria->hasRegistrationDate()) {
80
            $this->qb->andWhere('u.registrationDate = :regdate');
81
            $this->qb->setParameter('regdate', $criteria->getRegistrationDate());
82
        }
83
    }
84
85
    private function checkCriteriaForLastLoginDate(UserCriteria $criteria)
86
    {
87
        if($criteria->hasLastLoginDate()) {
88
            $this->qb->andWhere('u.lastLoginDate = :lastlogin');
89
            $this->qb->setParameter('lastlogin', $criteria->getLastLoginDate());
90
        }
91
    }
92
93
    /**
94
     * @param UserCriteria $criteria
95
     * @return array
96
     */
97
    public function findByCriteria(UserCriteria $criteria)
98
    {
99
        $this->qb = $this->createQueryBuilder('u');
100
101
        $criteria = $this->checkCriteriaForId($criteria);
102
        $criteria = $this->checkCriteriaForEmail($criteria);
103
        $this->checkCriteriaForState($criteria);
104
        $this->checkCriteriaForRegistrationDate($criteria);
105
        $this->checkCriteriaForLastLoginDate($criteria);
106
107
        $criteria->hasOrder() ? $this->qb->addOrderBy('u.'.$criteria->getOrder(),$criteria->getOrderDirection()) : null;
108
        $criteria->hasLimit() ? $this->qb->setMaxResults($criteria->getLimit()) : null;
109
        $criteria->hasOffset() ? $this->qb->setFirstResult($criteria->getOffset()) : null;
110
111
        $query = $this->qb->getQuery();
112
113
        return $query->getResult();
114
    }
115
}
116