ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
RegistrationCodeRepository.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 namespace ILIAS\Registration;
22 
23 use ilDBConstants;
24 use ilDBInterface;
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 }
getCodesData(string $order_field, string $order_direction, int $offset, int $limit, CodeFilter $code_filter=null)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
__construct(protected readonly ilDBInterface $db)