3 declare(strict_types=1);
38 if (!$is_referenece) {
40 "DELETE FROM skl_user_has_level WHERE " 41 .
" skill_id = " .
$ilDB->quote($skill_id,
"integer")
44 "DELETE FROM skl_user_skill_level WHERE " 45 .
" skill_id = " .
$ilDB->quote($skill_id,
"integer")
49 "DELETE FROM skl_user_has_level WHERE " 50 .
" tref_id = " .
$ilDB->quote($skill_id,
"integer")
53 "DELETE FROM skl_user_skill_level WHERE " 54 .
" tref_id = " .
$ilDB->quote($skill_id,
"integer")
69 int $a_trigger_ref_id = 0,
70 bool $a_self_eval =
false 78 "UPDATE skl_user_skill_level SET " .
79 " level_id = " .
$ilDB->quote(0,
"integer") .
"," .
80 " next_level_fulfilment = " .
$ilDB->quote(0.0,
"float") .
"," .
81 " status_date = " .
$ilDB->quote($now,
"timestamp") .
82 " WHERE user_id = " .
$ilDB->quote($a_user_id,
"integer") .
83 " AND status_date = " .
$ilDB->quote($status_date,
"timestamp") .
84 " AND skill_id = " .
$ilDB->quote($a_skill_id,
"integer") .
86 " AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer") .
87 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
88 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
91 $ilDB->manipulate(
"INSERT INTO skl_user_skill_level " .
92 "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id," .
93 "trigger_obj_id, trigger_obj_type, trigger_title, self_eval, unique_identifier," .
94 "next_level_fulfilment) VALUES (" .
95 $ilDB->quote(0,
"integer") .
"," .
96 $ilDB->quote($a_user_id,
"integer") .
"," .
97 $ilDB->quote($a_tref_id,
"integer") .
"," .
98 $ilDB->quote($now,
"timestamp") .
"," .
99 $ilDB->quote($a_skill_id,
"integer") .
"," .
101 $ilDB->quote(1,
"integer") .
"," .
102 $ilDB->quote($a_trigger_ref_id,
"integer") .
"," .
103 $ilDB->quote($trigger_obj_id,
"integer") .
"," .
104 $ilDB->quote(
"",
"text") .
"," .
105 $ilDB->quote(
"",
"text") .
"," .
106 $ilDB->quote($a_self_eval,
"integer") .
"," .
107 $ilDB->quote(
"",
"text") .
"," .
108 $ilDB->quote(0.0,
"float") .
113 "DELETE FROM skl_user_has_level WHERE " 114 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
115 .
" AND skill_id = " .
$ilDB->quote($a_skill_id,
"integer")
116 .
" AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer")
117 .
" AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer")
118 .
" AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
130 int $a_trigger_ref_id = 0
136 $ilDB->setLimit(1, 0);
138 "SELECT * FROM skl_user_skill_level WHERE " .
139 "skill_id = " .
$ilDB->quote($a_skill_id,
"integer") .
" AND " .
140 "user_id = " .
$ilDB->quote($a_user_id,
"integer") .
" AND " .
141 "tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
" AND " .
142 "trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer") .
" AND " .
143 "self_eval = " .
$ilDB->quote(1,
"integer") .
144 " ORDER BY status_date DESC" 146 if ($rec =
$ilDB->fetchAssoc($set)) {
147 $status_day = substr($rec[
"status_date"], 0, 10);
150 $recent = $rec[
"status_date"];
162 string $a_timestamp_to = null,
168 $to = (!is_null($a_timestamp_to))
169 ?
" AND status_date <= " .
$ilDB->quote($a_timestamp_to,
"timestamp")
172 $user = ($a_user_id > 0)
173 ?
" AND user_id = " .
$ilDB->quote($a_user_id,
"integer")
176 $set =
$ilDB->query(
"SELECT * FROM skl_user_skill_level " .
177 " WHERE status_date >= " .
$ilDB->quote($a_timestamp,
"timestamp") .
178 " AND valid = " .
$ilDB->quote(1,
"integer") .
180 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
183 " ORDER BY user_id, status_date ASC ");
185 while ($rec =
$ilDB->fetchAssoc($set)) {
186 $rec[
'user_id'] = (
int) $rec[
'user_id'];
187 $rec[
'level_id'] = (
int) $rec[
'level_id'];
188 $rec[
'skill_id'] = (
int) $rec[
'skill_id'];
189 $rec[
'status'] = (
int) $rec[
'status'];
190 $rec[
'valid'] = (
int) $rec[
'valid'];
191 $rec[
'trigger_ref_id'] = (
int) $rec[
'trigger_ref_id'];
192 $rec[
'trigger_obj_id'] = (
int) $rec[
'trigger_obj_id'];
193 $rec[
'tref_id'] = (
int) $rec[
'tref_id'];
194 $rec[
'self_eval'] = (
int) $rec[
'self_eval'];
195 $rec[
'next_level_fulfilment'] = (float) $rec[
'next_level_fulfilment'];
196 $achievements[$rec[
"user_id"]][] = $rec;
199 return $achievements;
209 ?
string $trigger_title,
210 ?
string $trigger_type,
216 bool $a_self_eval =
false,
217 string $a_unique_identifier =
"",
218 float $a_next_level_fulfilment = 0.0,
219 string $trigger_user_id =
"" 224 if ($trigger_user_id ==
"") {
225 $trigger_user_id =
"-";
232 "UPDATE skl_user_skill_level SET " .
233 " level_id = " .
$ilDB->quote($a_level_id,
"integer") .
"," .
234 " status_date = " .
$ilDB->quote($now,
"timestamp") .
"," .
235 " next_level_fulfilment = " .
$ilDB->quote($a_next_level_fulfilment,
"float") .
236 " WHERE user_id = " .
$ilDB->quote($a_user_id,
"integer") .
237 " AND status_date = " .
$ilDB->quote($status_date,
"timestamp") .
238 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
239 " AND status = " .
$ilDB->quote($a_status,
"integer") .
240 " AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer") .
241 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
242 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
243 " AND trigger_user_id = " .
$ilDB->quote($trigger_user_id,
"text")
246 if ($a_unique_identifier !=
"") {
248 "DELETE FROM skl_user_skill_level WHERE " .
249 " user_id = " .
$ilDB->quote($a_user_id,
"integer") .
250 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
251 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
252 " AND trigger_ref_id = " .
$ilDB->quote($trigger_ref_id,
"integer") .
253 " AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer") .
254 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
255 " AND unique_identifier = " .
$ilDB->quote($a_unique_identifier,
"text") .
256 " AND trigger_user_id = " .
$ilDB->quote($trigger_user_id,
"text")
261 $ilDB->manipulate(
"INSERT INTO skl_user_skill_level " .
262 "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id," .
263 "trigger_obj_id, trigger_obj_type, trigger_title, self_eval, unique_identifier," .
264 "next_level_fulfilment, trigger_user_id) VALUES (" .
265 $ilDB->quote($a_level_id,
"integer") .
"," .
266 $ilDB->quote($a_user_id,
"integer") .
"," .
267 $ilDB->quote($a_tref_id,
"integer") .
"," .
268 $ilDB->quote($now,
"timestamp") .
"," .
269 $ilDB->quote($skill_id,
"integer") .
"," .
270 $ilDB->quote($a_status,
"integer") .
"," .
271 $ilDB->quote(1,
"integer") .
"," .
272 $ilDB->quote($trigger_ref_id,
"integer") .
"," .
273 $ilDB->quote($trigger_obj_id,
"integer") .
"," .
274 $ilDB->quote($trigger_type,
"text") .
"," .
275 $ilDB->quote($trigger_title,
"text") .
"," .
276 $ilDB->quote($a_self_eval,
"integer") .
"," .
277 $ilDB->quote($a_unique_identifier,
"text") .
"," .
278 $ilDB->quote($a_next_level_fulfilment,
"float") .
"," .
279 $ilDB->quote($trigger_user_id,
"text") .
286 "DELETE FROM skl_user_has_level WHERE " 287 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
288 .
" AND skill_id = " .
$ilDB->quote($skill_id,
"integer")
289 .
" AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer")
290 .
" AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer")
291 .
" AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
295 $ilDB->manipulate(
"INSERT INTO skl_user_has_level " .
296 "(level_id, user_id, tref_id, status_date, skill_id, trigger_ref_id, trigger_obj_id, trigger_obj_type," .
297 "trigger_title, self_eval, next_level_fulfilment, trigger_user_id) VALUES (" .
298 $ilDB->quote($a_level_id,
"integer") .
"," .
299 $ilDB->quote($a_user_id,
"integer") .
"," .
300 $ilDB->quote($a_tref_id,
"integer") .
"," .
301 $ilDB->quote($now,
"timestamp") .
"," .
302 $ilDB->quote($skill_id,
"integer") .
"," .
303 $ilDB->quote($trigger_ref_id,
"integer") .
"," .
304 $ilDB->quote($trigger_obj_id,
"integer") .
"," .
305 $ilDB->quote($trigger_type,
"text") .
"," .
306 $ilDB->quote($trigger_title,
"text") .
"," .
307 $ilDB->quote($a_self_eval,
"integer") .
"," .
308 $ilDB->quote($a_next_level_fulfilment,
"float") .
"," .
309 $ilDB->quote($trigger_user_id,
"text") .
319 int $a_trigger_obj_id,
320 bool $a_self_eval =
false,
321 string $a_unique_identifier =
"" 327 $aff_rows =
$ilDB->manipulate(
328 "DELETE FROM skl_user_skill_level WHERE " 329 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
330 .
" AND trigger_obj_id = " .
$ilDB->quote($a_trigger_obj_id,
"integer")
331 .
" AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
332 .
" AND unique_identifier = " .
$ilDB->quote($a_unique_identifier,
"text")
338 $aff_rows =
$ilDB->manipulate(
339 "DELETE FROM skl_user_has_level WHERE " 340 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
341 .
" AND trigger_obj_id = " .
$ilDB->quote($a_trigger_obj_id,
"integer")
342 .
" AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
355 "DELETE FROM skl_user_skill_level WHERE " 356 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
359 "DELETE FROM skl_user_has_level WHERE " 360 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
375 $q =
"SELECT level_id FROM skl_user_has_level " .
376 " WHERE trigger_obj_type = " .
$ilDB->quote($a_type,
"text") .
377 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
378 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
379 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
380 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
384 while ($rec =
$ilDB->fetchAssoc($set)) {
385 $has_level[$rec[
"level_id"]] =
true;
388 foreach ($levels as $l) {
389 if (isset($has_level[$l[
"id"]])) {
390 $max_level = (
int) $l[
"id"];
406 $q =
"SELECT next_level_fulfilment FROM skl_user_has_level " .
407 " WHERE trigger_obj_type = " .
$ilDB->quote($a_type,
"text") .
408 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
409 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
410 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
411 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
414 if ($rec =
$ilDB->fetchAssoc($set)) {
415 return (
float) $rec[
"next_level_fulfilment"];
430 $q =
"SELECT * FROM skl_user_has_level " .
431 " WHERE skill_id = " .
$ilDB->quote($skill_id,
"integer") .
432 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
433 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
434 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
435 " ORDER BY status_date DESC" 439 while ($rec =
$ilDB->fetchAssoc($set)) {
440 $rec[
'user_id'] = (
int) $rec[
'user_id'];
441 $rec[
'level_id'] = (
int) $rec[
'level_id'];
442 $rec[
'skill_id'] = (
int) $rec[
'skill_id'];
443 $rec[
'status'] = (
int) $rec[
'status'];
444 $rec[
'valid'] = (
int) $rec[
'valid'];
445 $rec[
'trigger_ref_id'] = (
int) $rec[
'trigger_ref_id'];
446 $rec[
'trigger_obj_id'] = (
int) $rec[
'trigger_obj_id'];
447 $rec[
'tref_id'] = (
int) $rec[
'tref_id'];
448 $rec[
'self_eval'] = (
int) $rec[
'self_eval'];
449 $rec[
'next_level_fulfilment'] = (float) $rec[
'next_level_fulfilment'];
464 ?
" AND self_eval = " .
$ilDB->quote($a_eval_by,
"integer")
468 $q =
"SELECT * FROM skl_user_skill_level " .
469 " WHERE skill_id = " .
$ilDB->quote($skill_id,
"integer") .
470 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
471 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
473 " ORDER BY status_date DESC" 476 while ($rec =
$ilDB->fetchAssoc($set)) {
477 $rec[
'user_id'] = (
int) $rec[
'user_id'];
478 $rec[
'level_id'] = (
int) $rec[
'level_id'];
479 $rec[
'skill_id'] = (
int) $rec[
'skill_id'];
480 $rec[
'status'] = (
int) $rec[
'status'];
481 $rec[
'valid'] = (
int) $rec[
'valid'];
482 $rec[
'trigger_ref_id'] = (
int) $rec[
'trigger_ref_id'];
483 $rec[
'trigger_obj_id'] = (
int) $rec[
'trigger_obj_id'];
484 $rec[
'tref_id'] = (
int) $rec[
'tref_id'];
485 $rec[
'self_eval'] = (
int) $rec[
'self_eval'];
486 $rec[
'next_level_fulfilment'] = (float) $rec[
'next_level_fulfilment'];
503 $q =
"SELECT level_id FROM skl_user_has_level " .
504 " WHERE trigger_obj_id = " .
$ilDB->quote($a_object_id,
"integer") .
505 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
506 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
507 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
508 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
512 while ($rec =
$ilDB->fetchAssoc($set)) {
513 $has_level[$rec[
"level_id"]] =
true;
516 foreach ($levels as $l) {
517 if (isset($has_level[$l[
"id"]])) {
518 $max_level = (
int) $l[
"id"];
534 $q =
"SELECT next_level_fulfilment FROM skl_user_has_level " .
535 " WHERE trigger_obj_id = " .
$ilDB->quote($a_object_id,
"integer") .
536 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
537 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
538 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
539 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
542 if ($rec =
$ilDB->fetchAssoc($set)) {
543 return (
float) $rec[
"next_level_fulfilment"];
559 $q =
"SELECT level_id FROM skl_user_has_level " .
560 " WHERE skill_id = " .
$ilDB->quote($skill_id,
"integer") .
561 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
562 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
563 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
567 while ($rec =
$ilDB->fetchAssoc($set)) {
568 $has_level[$rec[
"level_id"]] =
true;
571 foreach ($levels as $l) {
572 if (isset($has_level[$l[
"id"]])) {
573 $max_level = (
int) $l[
"id"];
588 $q =
"SELECT next_level_fulfilment FROM skl_user_has_level " .
589 " WHERE skill_id = " .
$ilDB->quote($skill_id,
"integer") .
590 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
591 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
592 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
595 if ($rec =
$ilDB->fetchAssoc($set)) {
596 return (
float) $rec[
"next_level_fulfilment"];
607 $q =
"SELECT level_id FROM skl_user_has_level " .
608 " WHERE skill_id = " .
$ilDB->quote($a_skill_id,
"integer") .
609 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
610 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
611 " AND self_eval = " .
$ilDB->quote(1,
"integer")
614 return !!
$ilDB->fetchAssoc($set);
626 $ilDB->setLimit(1, 0);
628 $q =
"SELECT level_id FROM skl_user_has_level " .
629 " WHERE trigger_obj_id = " .
$ilDB->quote($a_object_id,
"integer") .
630 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
631 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
632 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
633 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
634 " ORDER BY status_date DESC" 637 if ($rec =
$ilDB->fetchAssoc($set)) {
638 return (
int) $rec[
"level_id"];
653 $ilDB->setLimit(1, 0);
655 $q =
"SELECT status_date FROM skl_user_has_level " .
656 " WHERE trigger_obj_id = " .
$ilDB->quote($a_object_id,
"integer") .
657 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
658 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
659 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
660 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
661 " ORDER BY status_date DESC" 664 if ($rec =
$ilDB->fetchAssoc($set)) {
665 return $rec[
"status_date"];
hasRecentSelfEvaluation(int $trigger_obj_id, int $a_user_id, int $a_skill_id, int $a_tref_id=0, int $a_trigger_ref_id=0)
hasSelfEvaluated(int $a_user_id, int $a_skill_id, int $a_tref_id)
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)
getNextLevelFulfilmentPerType(int $skill_id, int $a_tref_id, string $a_type, int $a_user_id=0, int $a_self_eval=0)
getLastUpdatePerObject(int $skill_id, int $a_tref_id, int $a_object_id, 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)
getMaxLevelPerObject(int $skill_id, array $levels, int $a_tref_id, int $a_object_id, int $a_user_id=0, int $a_self_eval=0)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static now()
Return current timestamp in Y-m-d H:i:s format.
getNextLevelFulfilmentPerObject(int $skill_id, int $a_tref_id, int $a_object_id, int $a_user_id=0, int $a_self_eval=0)
removeAllUserData(int $a_user_id)
deleteUserLevelsOfSkill(int $skill_id, bool $is_referenece=false)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(ilDBInterface $db=null)
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="")
getMaxLevel(int $skill_id, array $levels, int $a_tref_id, int $a_user_id=0, int $a_self_eval=0)
getAllLevelEntriesOfUser(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="")
getNextLevelFulfilment(int $skill_id, int $a_tref_id, int $a_user_id=0, int $a_self_eval=0)
getLastLevelPerObject(int $skill_id, int $a_tref_id, int $a_object_id, 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)
getMaxLevelPerType(int $skill_id, array $levels, int $a_tref_id, string $a_type, int $a_user_id=0, int $a_self_eval=0)