ILIAS  release_8 Revision v8.25-1-g13de6a5eca6
class.ilSkillUserLevelDBRepository.php
Go to the documentation of this file.
1<?php
2
21{
22 protected ilDBInterface $db;
23
24 public function __construct(ilDBInterface $db = null)
25 {
26 global $DIC;
27
28 $this->db = ($db)
29 ?: $DIC->database();
30 }
31
32 public function deleteUserLevelsOfSkill(int $skill_id): void
33 {
35
36 $ilDB->manipulate(
37 "DELETE FROM skl_user_has_level WHERE "
38 . " skill_id = " . $ilDB->quote($skill_id, "integer")
39 );
40 }
41
46 bool $update,
47 int $trigger_obj_id,
48 string $status_date,
49 int $a_user_id,
50 int $a_skill_id,
51 int $a_tref_id = 0,
52 int $a_trigger_ref_id = 0,
53 bool $a_self_eval = false
54 ): void {
55 $ilDB = $this->db;
56
57 $now = ilUtil::now();
58 if ($update) {
59 // this will only be set in self eval case, means this will always have a $rec
60 $ilDB->manipulate(
61 "UPDATE skl_user_skill_level SET " .
62 " level_id = " . $ilDB->quote(0, "integer") . "," .
63 " next_level_fulfilment = " . $ilDB->quote(0.0, "float") . "," .
64 " status_date = " . $ilDB->quote($now, "timestamp") .
65 " WHERE user_id = " . $ilDB->quote($a_user_id, "integer") .
66 " AND status_date = " . $ilDB->quote($status_date, "timestamp") .
67 " AND skill_id = " . $ilDB->quote($a_skill_id, "integer") .
68 " AND status = " . $ilDB->quote(ilBasicSkill::ACHIEVED, "integer") .
69 " AND trigger_obj_id = " . $ilDB->quote($trigger_obj_id, "integer") .
70 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
71 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
72 );
73 } else {
74 $ilDB->manipulate("INSERT INTO skl_user_skill_level " .
75 "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id," .
76 "trigger_obj_id, trigger_obj_type, trigger_title, self_eval, unique_identifier," .
77 "next_level_fulfilment) VALUES (" .
78 $ilDB->quote(0, "integer") . "," .
79 $ilDB->quote($a_user_id, "integer") . "," .
80 $ilDB->quote($a_tref_id, "integer") . "," .
81 $ilDB->quote($now, "timestamp") . "," .
82 $ilDB->quote($a_skill_id, "integer") . "," .
83 $ilDB->quote(ilBasicSkill::ACHIEVED, "integer") . "," .
84 $ilDB->quote(1, "integer") . "," .
85 $ilDB->quote($a_trigger_ref_id, "integer") . "," .
86 $ilDB->quote($trigger_obj_id, "integer") . "," .
87 $ilDB->quote("", "text") . "," .
88 $ilDB->quote("", "text") . "," .
89 $ilDB->quote($a_self_eval, "integer") . "," .
90 $ilDB->quote("", "text") . "," .
91 $ilDB->quote(0.0, "float") .
92 ")");
93 }
94
95 $ilDB->manipulate(
96 "DELETE FROM skl_user_has_level WHERE "
97 . " user_id = " . $ilDB->quote($a_user_id, "integer")
98 . " AND skill_id = " . $ilDB->quote($a_skill_id, "integer")
99 . " AND tref_id = " . $ilDB->quote($a_tref_id, "integer")
100 . " AND trigger_obj_id = " . $ilDB->quote($trigger_obj_id, "integer")
101 . " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
102 );
103 }
104
108 public function hasRecentSelfEvaluation(
109 int $trigger_obj_id,
110 int $a_user_id,
111 int $a_skill_id,
112 int $a_tref_id = 0,
113 int $a_trigger_ref_id = 0
114 ): string {
115 $ilDB = $this->db;
116
117 $recent = "";
118
119 $ilDB->setLimit(1, 0);
120 $set = $ilDB->query(
121 "SELECT * FROM skl_user_skill_level WHERE " .
122 "skill_id = " . $ilDB->quote($a_skill_id, "integer") . " AND " .
123 "user_id = " . $ilDB->quote($a_user_id, "integer") . " AND " .
124 "tref_id = " . $ilDB->quote($a_tref_id, "integer") . " AND " .
125 "trigger_obj_id = " . $ilDB->quote($trigger_obj_id, "integer") . " AND " .
126 "self_eval = " . $ilDB->quote(1, "integer") .
127 " ORDER BY status_date DESC"
128 );
129 if ($rec = $ilDB->fetchAssoc($set)) {
130 $status_day = substr($rec["status_date"], 0, 10);
131 $today = substr(ilUtil::now(), 0, 10);
132 if ($rec["valid"] && $rec["status"] == ilBasicSkill::ACHIEVED && $status_day == $today) {
133 $recent = $rec["status_date"];
134 }
135 }
136
137 return $recent;
138 }
139
144 string $a_timestamp,
145 string $a_timestamp_to = null,
146 int $a_user_id = 0,
147 int $a_self_eval = 0
148 ): array {
149 $ilDB = $this->db;
150
151 $to = (!is_null($a_timestamp_to))
152 ? " AND status_date <= " . $ilDB->quote($a_timestamp_to, "timestamp")
153 : "";
154
155 $user = ($a_user_id > 0)
156 ? " AND user_id = " . $ilDB->quote($a_user_id, "integer")
157 : "";
158
159 $set = $ilDB->query("SELECT * FROM skl_user_skill_level " .
160 " WHERE status_date >= " . $ilDB->quote($a_timestamp, "timestamp") .
161 " AND valid = " . $ilDB->quote(1, "integer") .
162 " AND status = " . $ilDB->quote(ilBasicSkill::ACHIEVED, "integer") .
163 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer") .
164 $to .
165 $user .
166 " ORDER BY user_id, status_date ASC ");
167 $achievements = [];
168 while ($rec = $ilDB->fetchAssoc($set)) {
169 $rec['user_id'] = (int) $rec['user_id'];
170 $rec['level_id'] = (int) $rec['level_id'];
171 $rec['skill_id'] = (int) $rec['skill_id'];
172 $rec['status'] = (int) $rec['status'];
173 $rec['valid'] = (int) $rec['valid'];
174 $rec['trigger_ref_id'] = (int) $rec['trigger_ref_id'];
175 $rec['trigger_obj_id'] = (int) $rec['trigger_obj_id'];
176 $rec['tref_id'] = (int) $rec['tref_id'];
177 $rec['self_eval'] = (int) $rec['self_eval'];
178 $rec['next_level_fulfilment'] = (float) $rec['next_level_fulfilment'];
179 $achievements[$rec["user_id"]][] = $rec;
180 }
181
182 return $achievements;
183 }
184
189 int $skill_id,
190 int $trigger_ref_id,
191 int $trigger_obj_id,
192 ?string $trigger_title,
193 ?string $trigger_type,
194 bool $update,
195 string $status_date,
196 int $a_level_id,
197 int $a_user_id,
198 int $a_tref_id = 0,
199 bool $a_self_eval = false,
200 string $a_unique_identifier = "",
201 float $a_next_level_fulfilment = 0.0,
202 string $trigger_user_id = ""
203 ): void {
204 $ilDB = $this->db;
205 $a_status = ilBasicSkill::ACHIEVED;
206
207 if ($trigger_user_id == "") {
208 $trigger_user_id = "-";
209 }
210
211 if ($update) {
212 // this will only be set in self eval case, means this will always have a $rec
213 $now = ilUtil::now();
214 $ilDB->manipulate(
215 "UPDATE skl_user_skill_level SET " .
216 " level_id = " . $ilDB->quote($a_level_id, "integer") . "," .
217 " status_date = " . $ilDB->quote($now, "timestamp") . "," .
218 " next_level_fulfilment = " . $ilDB->quote($a_next_level_fulfilment, "float") .
219 " WHERE user_id = " . $ilDB->quote($a_user_id, "integer") .
220 " AND status_date = " . $ilDB->quote($status_date, "timestamp") .
221 " AND skill_id = " . $ilDB->quote($skill_id, "integer") .
222 " AND status = " . $ilDB->quote($a_status, "integer") .
223 " AND trigger_obj_id = " . $ilDB->quote($trigger_obj_id, "integer") .
224 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
225 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer") .
226 " AND trigger_user_id = " . $ilDB->quote($trigger_user_id, "text")
227 );
228 } else {
229 if ($a_unique_identifier != "") {
230 $ilDB->manipulate(
231 "DELETE FROM skl_user_skill_level WHERE " .
232 " user_id = " . $ilDB->quote($a_user_id, "integer") .
233 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
234 " AND skill_id = " . $ilDB->quote($skill_id, "integer") .
235 " AND trigger_ref_id = " . $ilDB->quote($trigger_ref_id, "integer") .
236 " AND trigger_obj_id = " . $ilDB->quote($trigger_obj_id, "integer") .
237 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer") .
238 " AND unique_identifier = " . $ilDB->quote($a_unique_identifier, "text") .
239 " AND trigger_user_id = " . $ilDB->quote($trigger_user_id, "text")
240 );
241 }
242
243 $now = ilUtil::now();
244 $ilDB->manipulate("INSERT INTO skl_user_skill_level " .
245 "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id," .
246 "trigger_obj_id, trigger_obj_type, trigger_title, self_eval, unique_identifier," .
247 "next_level_fulfilment, trigger_user_id) VALUES (" .
248 $ilDB->quote($a_level_id, "integer") . "," .
249 $ilDB->quote($a_user_id, "integer") . "," .
250 $ilDB->quote($a_tref_id, "integer") . "," .
251 $ilDB->quote($now, "timestamp") . "," .
252 $ilDB->quote($skill_id, "integer") . "," .
253 $ilDB->quote($a_status, "integer") . "," .
254 $ilDB->quote(1, "integer") . "," .
255 $ilDB->quote($trigger_ref_id, "integer") . "," .
256 $ilDB->quote($trigger_obj_id, "integer") . "," .
257 $ilDB->quote($trigger_type, "text") . "," .
258 $ilDB->quote($trigger_title, "text") . "," .
259 $ilDB->quote($a_self_eval, "integer") . "," .
260 $ilDB->quote($a_unique_identifier, "text") . "," .
261 $ilDB->quote($a_next_level_fulfilment, "float") . "," .
262 $ilDB->quote($trigger_user_id, "text") .
263 ")");
264 }
265
266 // fix (removed level_id and added skill id, since table should hold only
267 // one entry per skill)
268 $ilDB->manipulate(
269 "DELETE FROM skl_user_has_level WHERE "
270 . " user_id = " . $ilDB->quote($a_user_id, "integer")
271 . " AND skill_id = " . $ilDB->quote($skill_id, "integer")
272 . " AND tref_id = " . $ilDB->quote($a_tref_id, "integer")
273 . " AND trigger_obj_id = " . $ilDB->quote($trigger_obj_id, "integer")
274 . " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
275 );
276
277 if ($a_status == ilBasicSkill::ACHIEVED) {
278 $ilDB->manipulate("INSERT INTO skl_user_has_level " .
279 "(level_id, user_id, tref_id, status_date, skill_id, trigger_ref_id, trigger_obj_id, trigger_obj_type," .
280 "trigger_title, self_eval, next_level_fulfilment, trigger_user_id) VALUES (" .
281 $ilDB->quote($a_level_id, "integer") . "," .
282 $ilDB->quote($a_user_id, "integer") . "," .
283 $ilDB->quote($a_tref_id, "integer") . "," .
284 $ilDB->quote($now, "timestamp") . "," .
285 $ilDB->quote($skill_id, "integer") . "," .
286 $ilDB->quote($trigger_ref_id, "integer") . "," .
287 $ilDB->quote($trigger_obj_id, "integer") . "," .
288 $ilDB->quote($trigger_type, "text") . "," .
289 $ilDB->quote($trigger_title, "text") . "," .
290 $ilDB->quote($a_self_eval, "integer") . "," .
291 $ilDB->quote($a_next_level_fulfilment, "float") . "," .
292 $ilDB->quote($trigger_user_id, "text") .
293 ")");
294 }
295 }
296
301 int $a_user_id,
302 int $a_trigger_obj_id,
303 bool $a_self_eval = false,
304 string $a_unique_identifier = ""
305 ): bool {
306 $ilDB = $this->db;
307
308 $changed = false;
309
310 $aff_rows = $ilDB->manipulate(
311 "DELETE FROM skl_user_skill_level WHERE "
312 . " user_id = " . $ilDB->quote($a_user_id, "integer")
313 . " AND trigger_obj_id = " . $ilDB->quote($a_trigger_obj_id, "integer")
314 . " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
315 . " AND unique_identifier = " . $ilDB->quote($a_unique_identifier, "text")
316 );
317 if ($aff_rows > 0) {
318 $changed = true;
319 }
320
321 $aff_rows = $ilDB->manipulate(
322 "DELETE FROM skl_user_has_level WHERE "
323 . " user_id = " . $ilDB->quote($a_user_id, "integer")
324 . " AND trigger_obj_id = " . $ilDB->quote($a_trigger_obj_id, "integer")
325 . " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
326 );
327 if ($aff_rows > 0) {
328 $changed = true;
329 }
330 return $changed;
331 }
332
333 public function removeAllUserData(int $a_user_id): void
334 {
335 $ilDB = $this->db;
336
337 $ilDB->manipulate(
338 "DELETE FROM skl_user_skill_level WHERE "
339 . " user_id = " . $ilDB->quote($a_user_id, "integer")
340 );
341 $ilDB->manipulate(
342 "DELETE FROM skl_user_has_level WHERE "
343 . " user_id = " . $ilDB->quote($a_user_id, "integer")
344 );
345 }
346
347 public function getMaxLevelPerType(
348 int $skill_id,
349 array $levels,
350 int $a_tref_id,
351 string $a_type,
352 int $a_user_id = 0,
353 int $a_self_eval = 0
354 ): int {
355 $ilDB = $this->db;
356
357 $set = $ilDB->query(
358 $q = "SELECT level_id FROM skl_user_has_level " .
359 " WHERE trigger_obj_type = " . $ilDB->quote($a_type, "text") .
360 " AND skill_id = " . $ilDB->quote($skill_id, "integer") .
361 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
362 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
363 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
364 );
365
366 $has_level = [];
367 while ($rec = $ilDB->fetchAssoc($set)) {
368 $has_level[$rec["level_id"]] = true;
369 }
370 $max_level = 0;
371 foreach ($levels as $l) {
372 if (isset($has_level[$l["id"]])) {
373 $max_level = (int) $l["id"];
374 }
375 }
376 return $max_level;
377 }
378
380 int $skill_id,
381 int $a_tref_id,
382 string $a_type,
383 int $a_user_id = 0,
384 int $a_self_eval = 0
385 ): float {
386 $ilDB = $this->db;
387
388 $set = $ilDB->query(
389 $q = "SELECT next_level_fulfilment FROM skl_user_has_level " .
390 " WHERE trigger_obj_type = " . $ilDB->quote($a_type, "text") .
391 " AND skill_id = " . $ilDB->quote($skill_id, "integer") .
392 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
393 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
394 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
395 );
396
397 if ($rec = $ilDB->fetchAssoc($set)) {
398 return (float) $rec["next_level_fulfilment"];
399 }
400
401 return 0;
402 }
403
405 int $skill_id,
406 int $a_tref_id,
407 int $a_user_id = 0,
408 int $a_self_eval = 0
409 ): array {
410 $ilDB = $this->db;
411
412 $set = $ilDB->query(
413 $q = "SELECT * FROM skl_user_has_level " .
414 " WHERE skill_id = " . $ilDB->quote($skill_id, "integer") .
415 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
416 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
417 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer") .
418 " ORDER BY status_date DESC"
419 );
420
421 $levels = [];
422 while ($rec = $ilDB->fetchAssoc($set)) {
423 $rec['user_id'] = (int) $rec['user_id'];
424 $rec['level_id'] = (int) $rec['level_id'];
425 $rec['skill_id'] = (int) $rec['skill_id'];
426 $rec['status'] = (int) $rec['status'];
427 $rec['valid'] = (int) $rec['valid'];
428 $rec['trigger_ref_id'] = (int) $rec['trigger_ref_id'];
429 $rec['trigger_obj_id'] = (int) $rec['trigger_obj_id'];
430 $rec['tref_id'] = (int) $rec['tref_id'];
431 $rec['self_eval'] = (int) $rec['self_eval'];
432 $rec['next_level_fulfilment'] = (float) $rec['next_level_fulfilment'];
433 $levels[] = $rec;
434 }
435 return $levels;
436 }
437
439 int $skill_id,
440 int $a_tref_id,
441 int $a_user_id = 0,
442 int $a_eval_by = 0
443 ): array {
444 $ilDB = $this->db;
445
446 $by = ($a_eval_by != ilBasicSkill::EVAL_BY_ALL)
447 ? " AND self_eval = " . $ilDB->quote($a_eval_by, "integer")
448 : "";
449
450 $set = $ilDB->query(
451 $q = "SELECT * FROM skl_user_skill_level " .
452 " WHERE skill_id = " . $ilDB->quote($skill_id, "integer") .
453 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
454 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
455 $by .
456 " ORDER BY status_date DESC"
457 );
458 $levels = [];
459 while ($rec = $ilDB->fetchAssoc($set)) {
460 $rec['user_id'] = (int) $rec['user_id'];
461 $rec['level_id'] = (int) $rec['level_id'];
462 $rec['skill_id'] = (int) $rec['skill_id'];
463 $rec['status'] = (int) $rec['status'];
464 $rec['valid'] = (int) $rec['valid'];
465 $rec['trigger_ref_id'] = (int) $rec['trigger_ref_id'];
466 $rec['trigger_obj_id'] = (int) $rec['trigger_obj_id'];
467 $rec['tref_id'] = (int) $rec['tref_id'];
468 $rec['self_eval'] = (int) $rec['self_eval'];
469 $rec['next_level_fulfilment'] = (float) $rec['next_level_fulfilment'];
470 $levels[] = $rec;
471 }
472 return $levels;
473 }
474
475 public function getMaxLevelPerObject(
476 int $skill_id,
477 array $levels,
478 int $a_tref_id,
479 int $a_object_id,
480 int $a_user_id = 0,
481 int $a_self_eval = 0
482 ): int {
483 $ilDB = $this->db;
484
485 $set = $ilDB->query(
486 $q = "SELECT level_id FROM skl_user_has_level " .
487 " WHERE trigger_obj_id = " . $ilDB->quote($a_object_id, "integer") .
488 " AND skill_id = " . $ilDB->quote($skill_id, "integer") .
489 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
490 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
491 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
492 );
493
494 $has_level = [];
495 while ($rec = $ilDB->fetchAssoc($set)) {
496 $has_level[$rec["level_id"]] = true;
497 }
498 $max_level = 0;
499 foreach ($levels as $l) {
500 if (isset($has_level[$l["id"]])) {
501 $max_level = (int) $l["id"];
502 }
503 }
504 return $max_level;
505 }
506
508 int $skill_id,
509 int $a_tref_id,
510 int $a_object_id,
511 int $a_user_id = 0,
512 int $a_self_eval = 0
513 ): float {
514 $ilDB = $this->db;
515
516 $set = $ilDB->query(
517 $q = "SELECT next_level_fulfilment FROM skl_user_has_level " .
518 " WHERE trigger_obj_id = " . $ilDB->quote($a_object_id, "integer") .
519 " AND skill_id = " . $ilDB->quote($skill_id, "integer") .
520 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
521 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
522 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
523 );
524
525 if ($rec = $ilDB->fetchAssoc($set)) {
526 return (float) $rec["next_level_fulfilment"];
527 }
528
529 return 0;
530 }
531
532 public function getMaxLevel(
533 int $skill_id,
534 array $levels,
535 int $a_tref_id,
536 int $a_user_id = 0,
537 int $a_self_eval = 0
538 ): int {
539 $ilDB = $this->db;
540
541 $set = $ilDB->query(
542 $q = "SELECT level_id FROM skl_user_has_level " .
543 " WHERE skill_id = " . $ilDB->quote($skill_id, "integer") .
544 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
545 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
546 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
547 );
548
549 $has_level = [];
550 while ($rec = $ilDB->fetchAssoc($set)) {
551 $has_level[$rec["level_id"]] = true;
552 }
553 $max_level = 0;
554 foreach ($levels as $l) {
555 if (isset($has_level[$l["id"]])) {
556 $max_level = (int) $l["id"];
557 }
558 }
559 return $max_level;
560 }
561
562 public function getNextLevelFulfilment(
563 int $skill_id,
564 int $a_tref_id,
565 int $a_user_id = 0,
566 int $a_self_eval = 0
567 ): float {
568 $ilDB = $this->db;
569
570 $set = $ilDB->query(
571 $q = "SELECT next_level_fulfilment FROM skl_user_has_level " .
572 " WHERE skill_id = " . $ilDB->quote($skill_id, "integer") .
573 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
574 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
575 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer")
576 );
577
578 if ($rec = $ilDB->fetchAssoc($set)) {
579 return (float) $rec["next_level_fulfilment"];
580 }
581
582 return 0;
583 }
584
585 public function hasSelfEvaluated(int $a_user_id, int $a_skill_id, int $a_tref_id): bool
586 {
587 $ilDB = $this->db;
588
589 $set = $ilDB->query(
590 $q = "SELECT level_id FROM skl_user_has_level " .
591 " WHERE skill_id = " . $ilDB->quote($a_skill_id, "integer") .
592 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
593 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
594 " AND self_eval = " . $ilDB->quote(1, "integer")
595 );
596
597 return !!$ilDB->fetchAssoc($set);
598 }
599
600 public function getLastLevelPerObject(
601 int $skill_id,
602 int $a_tref_id,
603 int $a_object_id,
604 int $a_user_id = 0,
605 int $a_self_eval = 0
606 ): int {
607 $ilDB = $this->db;
608
609 $ilDB->setLimit(1, 0);
610 $set = $ilDB->query(
611 $q = "SELECT level_id FROM skl_user_has_level " .
612 " WHERE trigger_obj_id = " . $ilDB->quote($a_object_id, "integer") .
613 " AND skill_id = " . $ilDB->quote($skill_id, "integer") .
614 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
615 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
616 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer") .
617 " ORDER BY status_date DESC"
618 );
619
620 if ($rec = $ilDB->fetchAssoc($set)) {
621 return (int) $rec["level_id"];
622 }
623
624 return 0;
625 }
626
627 public function getLastUpdatePerObject(
628 int $skill_id,
629 int $a_tref_id,
630 int $a_object_id,
631 int $a_user_id = 0,
632 int $a_self_eval = 0
633 ): ?string {
634 $ilDB = $this->db;
635
636 $ilDB->setLimit(1, 0);
637 $set = $ilDB->query(
638 $q = "SELECT status_date FROM skl_user_has_level " .
639 " WHERE trigger_obj_id = " . $ilDB->quote($a_object_id, "integer") .
640 " AND skill_id = " . $ilDB->quote($skill_id, "integer") .
641 " AND tref_id = " . $ilDB->quote($a_tref_id, "integer") .
642 " AND user_id = " . $ilDB->quote($a_user_id, "integer") .
643 " AND self_eval = " . $ilDB->quote($a_self_eval, "integer") .
644 " ORDER BY status_date DESC"
645 );
646
647 if ($rec = $ilDB->fetchAssoc($set)) {
648 return $rec["status_date"];
649 }
650
651 return null;
652 }
653}
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getAllLevelEntriesOfUser(int $skill_id, int $a_tref_id, int $a_user_id=0, int $a_self_eval=0)
getMaxLevelPerObject(int $skill_id, array $levels, int $a_tref_id, int $a_object_id, int $a_user_id=0, int $a_self_eval=0)
resetUserSkillLevelStatus(bool $update, int $trigger_obj_id, string $status_date, int $a_user_id, int $a_skill_id, int $a_tref_id=0, int $a_trigger_ref_id=0, bool $a_self_eval=false)
@inheritDoc
getLastUpdatePerObject(int $skill_id, int $a_tref_id, int $a_object_id, int $a_user_id=0, int $a_self_eval=0)
getMaxLevel(int $skill_id, array $levels, int $a_tref_id, int $a_user_id=0, int $a_self_eval=0)
hasSelfEvaluated(int $a_user_id, int $a_skill_id, int $a_tref_id)
getNextLevelFulfilmentPerType(int $skill_id, int $a_tref_id, string $a_type, int $a_user_id=0, int $a_self_eval=0)
getNewAchievementsPerUser(string $a_timestamp, string $a_timestamp_to=null, int $a_user_id=0, int $a_self_eval=0)
getAllHistoricLevelEntriesOfUser(int $skill_id, int $a_tref_id, int $a_user_id=0, int $a_eval_by=0)
getNextLevelFulfilmentPerObject(int $skill_id, int $a_tref_id, int $a_object_id, int $a_user_id=0, int $a_self_eval=0)
writeUserSkillLevelStatus(int $skill_id, int $trigger_ref_id, int $trigger_obj_id, ?string $trigger_title, ?string $trigger_type, bool $update, string $status_date, int $a_level_id, int $a_user_id, int $a_tref_id=0, bool $a_self_eval=false, string $a_unique_identifier="", float $a_next_level_fulfilment=0.0, string $trigger_user_id="")
@inheritDoc
getNextLevelFulfilment(int $skill_id, int $a_tref_id, int $a_user_id=0, int $a_self_eval=0)
removeAllUserSkillLevelStatusOfObject(int $a_user_id, int $a_trigger_obj_id, bool $a_self_eval=false, string $a_unique_identifier="")
@inheritDoc
getMaxLevelPerType(int $skill_id, array $levels, int $a_tref_id, string $a_type, int $a_user_id=0, int $a_self_eval=0)
hasRecentSelfEvaluation(int $trigger_obj_id, int $a_user_id, int $a_skill_id, int $a_tref_id=0, int $a_trigger_ref_id=0)
@inheritDoc
getLastLevelPerObject(int $skill_id, int $a_tref_id, int $a_object_id, int $a_user_id=0, int $a_self_eval=0)
static now()
Return current timestamp in Y-m-d H:i:s format.
global $DIC
Definition: feed.php:28
$update
Definition: imgupload.php:92
Interface ilDBInterface.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...