Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.82% |
1 / 122 |
|
12.50% |
1 / 8 |
CRAP | |
0.00% |
0 / 1 |
LogJournal | |
0.82% |
1 / 122 |
|
12.50% |
1 / 8 |
634.76 | |
0.00% |
0 / 1 |
getModelClass | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
updateDeletedLog | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
2 | |||
findPaginated | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
2 | |||
count | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
2 | |||
addOrder | |
0.00% |
0 / 43 |
|
0.00% |
0 / 1 |
90 | |||
addSearches | |
0.00% |
0 / 34 |
|
0.00% |
0 / 1 |
110 | |||
findAllByCollectivityWithoutSubjects | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
deleteAllAnteriorToDate | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | declare(strict_types=1); |
4 | |
5 | namespace App\Infrastructure\ORM\Reporting\Repository; |
6 | |
7 | use App\Application\Doctrine\Repository\CRUDRepository; |
8 | use App\Domain\Reporting\Dictionary\LogJournalActionDictionary; |
9 | use App\Domain\Reporting\Dictionary\LogJournalSubjectDictionary; |
10 | use App\Domain\Reporting\Model; |
11 | use App\Domain\Reporting\Model\LoggableSubject; |
12 | use App\Domain\Reporting\Repository; |
13 | use App\Domain\User\Model\Collectivity; |
14 | use Doctrine\ORM\QueryBuilder; |
15 | use Doctrine\ORM\Tools\Pagination\Paginator; |
16 | |
17 | class LogJournal extends CRUDRepository implements Repository\LogJournal |
18 | { |
19 | protected function getModelClass(): string |
20 | { |
21 | return Model\LogJournal::class; |
22 | } |
23 | |
24 | public function updateDeletedLog(LoggableSubject $subject) |
25 | { |
26 | $qb = $this->getManager()->createQueryBuilder(); |
27 | $qb |
28 | ->update($this->getModelClass(), 'o') |
29 | ->set('o.isDeleted', ':true') |
30 | ->andWhere($qb->expr()->eq('o.subjectId', ':uuid')) |
31 | ->setParameters( |
32 | [ |
33 | 'true' => true, |
34 | 'uuid' => $subject->getId()->toString(), |
35 | ] |
36 | ) |
37 | ; |
38 | |
39 | $qb->getQuery()->execute(); |
40 | } |
41 | |
42 | public function findPaginated($firstResult, $maxResults, $orderColumn, $orderDir, $searches, $criteria = []) |
43 | { |
44 | $query = $this->createQueryBuilder() |
45 | ->addSelect('collectivite') |
46 | ->leftJoin('o.collectivity', 'collectivite') |
47 | ; |
48 | |
49 | $this->addOrder($query, $orderColumn, $orderDir); |
50 | $this->addSearches($query, $searches); |
51 | |
52 | $query = $query->getQuery(); |
53 | $query->setFirstResult($firstResult); |
54 | $query->setMaxResults($maxResults); |
55 | |
56 | return new Paginator($query); |
57 | } |
58 | |
59 | public function count(array $criteria = []) |
60 | { |
61 | return $this |
62 | ->createQueryBuilder() |
63 | ->select('count(o.id)') |
64 | ->getQuery() |
65 | ->getSingleScalarResult() |
66 | ; |
67 | } |
68 | |
69 | private function addOrder(&$queryBuilder, $orderColumn, $orderDir) |
70 | { |
71 | switch ($orderColumn) { |
72 | case 'subjectId': |
73 | $queryBuilder->addOrderBy('o.subjectId', $orderDir); |
74 | break; |
75 | case 'userFullName': |
76 | $queryBuilder->addOrderBy('o.userFullName', $orderDir); |
77 | break; |
78 | case 'userEmail': |
79 | $queryBuilder->addOrderBy('o.userEmail', $orderDir); |
80 | break; |
81 | case 'collectivite': |
82 | $queryBuilder |
83 | ->addOrderBy('collectivite.name', $orderDir); |
84 | break; |
85 | case 'date': |
86 | $queryBuilder->addOrderBy('o.date', $orderDir); |
87 | break; |
88 | case 'subject': |
89 | $queryBuilder->addSelect('(case |
90 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::REGISTRY_MESUREMENT . '\' THEN 1 |
91 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::REGISTRY_CONFORMITE_TRAITEMENT . '\' THEN 2 |
92 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::USER_COLLECTIVITY . '\' THEN 3 |
93 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::REGISTRY_REQUEST . '\' THEN 4 |
94 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::USER_EMAIL . '\' THEN 5 |
95 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::REGISTRY_CONFORMITE_ORGANISATION_EVALUATION . '\' THEN 6 |
96 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::MATURITY_SURVEY . '\' THEN 7 |
97 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::USER_PASSWORD . '\' THEN 8 |
98 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::USER_LASTNAME . '\' THEN 9 |
99 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::USER_FIRSTNAME . '\' THEN 10 |
100 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::REGISTRY_PROOF . '\' THEN 11 |
101 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::REGISTRY_CONTRACTOR . '\' THEN 12 |
102 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::REGISTRY_TREATMENT . '\' THEN 13 |
103 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::USER_USER . '\' THEN 14 |
104 | WHEN o.subjectType = \'' . LogJournalSubjectDictionary::REGISTRY_VIOLATION . '\' THEN 15 |
105 | ELSE 16 END) AS HIDDEN subject_order') |
106 | ->addOrderBy('subject_order', $orderDir); |
107 | break; |
108 | case 'action': |
109 | $queryBuilder->addSelect('(case when o.action = \'' . LogJournalActionDictionary::LOGIN . '\' THEN 1 WHEN o.action = \'' . LogJournalActionDictionary::CREATE . '\' THEN 2 WHEN o.action = \'' . LogJournalActionDictionary::UPDATE . '\' THEN 3 ELSE 4 END) AS HIDDEN action_order') |
110 | ->addOrderBy('action_order', $orderDir); |
111 | break; |
112 | case 'subjectName': |
113 | $queryBuilder->addOrderBy('o.subjectName', $orderDir); |
114 | break; |
115 | } |
116 | } |
117 | |
118 | private function addSearches(QueryBuilder $queryBuilder, array $searches) |
119 | { |
120 | foreach ($searches as $columnName => $search) { |
121 | switch ($columnName) { |
122 | case 'subjectId': |
123 | $queryBuilder->andWhere('o.subjectId LIKE :id') |
124 | ->setParameter('id', '%' . $search . '%'); |
125 | break; |
126 | case 'userFullName': |
127 | $queryBuilder->andWhere('o.userFullName LIKE :name') |
128 | ->setParameter('name', '%' . $search . '%'); |
129 | break; |
130 | case 'userEmail': |
131 | $queryBuilder->andWhere('o.userEmail LIKE :email') |
132 | ->setParameter('email', '%' . $search . '%'); |
133 | break; |
134 | case 'collectivite': |
135 | $queryBuilder->andWhere('collectivite.name LIKE :collectivite') |
136 | ->setParameter('collectivite', '%' . $search . '%'); |
137 | break; |
138 | case 'date': |
139 | $queryBuilder->andWhere('o.date BETWEEN :start_date AND :finish_date') |
140 | ->setParameter('start_date', date_create_from_format('d/m/y', substr($search, 0, 8))->format('Y-m-d 00:00:00')) |
141 | ->setParameter('finish_date', date_create_from_format('d/m/y', substr($search, 11, 8))->format('Y-m-d 23:59:59')); |
142 | break; |
143 | case 'subject': |
144 | $queryBuilder->andWhere('o.subjectType = :subject') |
145 | ->setParameter('subject', $search); |
146 | break; |
147 | case 'action': |
148 | $queryBuilder->andWhere('o.action = :action') |
149 | ->setParameter('action', $search); |
150 | break; |
151 | case 'subjectName': |
152 | $queryBuilder->andWhere('o.subjectName LIKE :subjectName') |
153 | ->setParameter('subjectName', '%' . $search . '%'); |
154 | break; |
155 | } |
156 | } |
157 | } |
158 | |
159 | public function findAllByCollectivityWithoutSubjects(Collectivity $collectivity, $limit, array $subjects = []) |
160 | { |
161 | $qb = $this->createQueryBuilder(); |
162 | $qb->andWhere($qb->expr()->eq('o.collectivity', ':collectivity')) |
163 | ->andWhere($qb->expr()->notIn('o.subjectType', ':subjects')) |
164 | ->setParameters([ |
165 | 'collectivity' => $collectivity, |
166 | 'subjects' => $subjects, |
167 | ]) |
168 | ->addOrderBy('o.date', 'DESC') |
169 | ->setMaxResults($limit) |
170 | ; |
171 | |
172 | return $qb->getQuery()->getResult(); |
173 | } |
174 | |
175 | public function deleteAllAnteriorToDate(\DateTime $date) |
176 | { |
177 | $query = $this->getManager()->createQuery("DELETE FROM App\Domain\Reporting\Model\LogJournal o WHERE o.date < :dateP") |
178 | ->setParameter('dateP', $date) |
179 | ; |
180 | |
181 | return $query->execute(); |
182 | } |
183 | } |