ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
RegistrationCodeRepository.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS\Registration;
22
25
27{
28 private const string TABLE_NAME = 'reg_registration_codes';
29
30 public function __construct(
31 protected readonly ilDBInterface $db
32 ) {
33 }
34
35 private function filterToSQL(
36 CodeFilter $code_filter,
37 ): string {
38 $where = [];
39 if ($code_filter->getCode()) {
40 $where[] = $this->db->like('code', ilDBConstants::T_TEXT, '%' . $code_filter->getCode() . '%');
41 }
42 if ($code_filter->getRole()) {
43 $where[] = 'role = ' . $this->db->quote($code_filter->getRole(), ilDBConstants::T_INTEGER);
44 }
45 if ($code_filter->getGenerated()) {
46 $where[] = 'generated_on = ' . $this->db->quote($code_filter->getGenerated(), ilDBConstants::T_TEXT);
47 }
48 if ($code_filter->getAccessLimitation()) {
49 $where[] = 'alimit = ' . $this->db->quote($code_filter->getAccessLimitation(), ilDBConstants::T_TEXT);
50 }
51 if ($where !== []) {
52 return ' WHERE ' . implode(' AND ', $where);
53 }
54
55 return '';
56 }
57
58 public function getTotalCodeCount(
59 ?CodeFilter $code_filter = null
60 ): int {
61 $set = $this->db->query('SELECT COUNT(*) AS cnt FROM ' . self::TABLE_NAME . ($code_filter ? $this->filterToSQL($code_filter) : ''));
62 $cnt = 0;
63 if ($rec = $this->db->fetchAssoc($set)) {
64 $cnt = (int) ($rec['cnt'] ?? 0);
65 }
66
67 return $cnt;
68 }
69
84 public function getCodesData(
85 string $order_field,
86 string $order_direction,
87 int $offset,
88 int $limit,
89 ?CodeFilter $code_filter = null
90 ): array {
91 $sql = 'SELECT * FROM ' . self::TABLE_NAME . ($code_filter ? $this->filterToSQL($code_filter) : '');
92 if ($order_field) {
93 if ($order_field === 'generated') {
94 $order_field = 'generated_on';
95 }
96 $sql .= ' ORDER BY ' . $order_field . ' ' . $order_direction;
97 }
98
99 $this->db->setLimit($limit, $offset);
100 $set = $this->db->query($sql);
101 $result = [];
102 while ($rec = $this->db->fetchAssoc($set)) {
103 $rec['generated'] = (int) $rec['generated_on'];
104 unset($rec['generated_on']);
105 $result[] = $rec;
106 }
107
108 return $result;
109 }
110
126 public function loadCodesByIds(array $ids): array
127 {
128 $set = $this->db->query('SELECT * FROM ' . self::TABLE_NAME . ' WHERE ' . $this->db->in(
129 'code_id',
130 $ids,
131 false,
133 ));
134 $result = [];
135 while ($rec = $this->db->fetchAssoc($set)) {
136 $result[] = $rec;
137 }
138
139 return $result;
140 }
141
145 public function deleteCodes(array $ids): bool
146 {
147 if (\count($ids)) {
148 return (bool) $this->db->manipulate('DELETE FROM ' . self::TABLE_NAME . ' WHERE ' . $this->db->in(
149 'code_id',
150 $ids,
151 false,
153 ));
154 }
155
156 return false;
157 }
158
162 public function getGenerationDates(): array
163 {
164 $set = $this->db->query('SELECT DISTINCT(generated_on) genr FROM ' . self::TABLE_NAME . ' ORDER BY genr');
165 $result = [];
166 while ($rec = $this->db->fetchAssoc($set)) {
167 $result[] = (int) $rec['genr'];
168 }
169
170 return $result;
171 }
172
187 public function getCodesByFilter(CodeFilter $code_filter): array
188 {
189 $set = $this->db->query(
190 'SELECT * FROM ' . self::TABLE_NAME .
191 ($code_filter ? $this->filterToSQL($code_filter) : '')
192 );
193 $result = [];
194 while ($rec = $this->db->fetchAssoc($set)) {
195 $result[] = $rec;
196 }
197
198 return $result;
199 }
200}
__construct(protected readonly ilDBInterface $db)
getCodesData(string $order_field, string $order_direction, int $offset, int $limit, ?CodeFilter $code_filter=null)
Class ilDBConstants.
Interface ilDBInterface.