19 declare(strict_types=1);
37 if (!$is_referenece) {
39 "DELETE FROM skl_user_has_level WHERE " 40 .
" skill_id = " .
$ilDB->quote($skill_id,
"integer")
43 "DELETE FROM skl_user_skill_level WHERE " 44 .
" skill_id = " .
$ilDB->quote($skill_id,
"integer")
48 "DELETE FROM skl_user_has_level WHERE " 49 .
" tref_id = " .
$ilDB->quote($skill_id,
"integer")
52 "DELETE FROM skl_user_skill_level WHERE " 53 .
" tref_id = " .
$ilDB->quote($skill_id,
"integer")
68 int $a_trigger_ref_id = 0,
69 bool $a_self_eval =
false 77 "UPDATE skl_user_skill_level SET " .
78 " level_id = " .
$ilDB->quote(0,
"integer") .
"," .
79 " next_level_fulfilment = " .
$ilDB->quote(0.0,
"float") .
"," .
80 " status_date = " .
$ilDB->quote($now,
"timestamp") .
81 " WHERE user_id = " .
$ilDB->quote($a_user_id,
"integer") .
82 " AND status_date = " .
$ilDB->quote($status_date,
"timestamp") .
83 " AND skill_id = " .
$ilDB->quote($a_skill_id,
"integer") .
85 " AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer") .
86 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
87 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
90 $ilDB->manipulate(
"INSERT INTO skl_user_skill_level " .
91 "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id," .
92 "trigger_obj_id, trigger_obj_type, trigger_title, self_eval, unique_identifier," .
93 "next_level_fulfilment) VALUES (" .
94 $ilDB->quote(0,
"integer") .
"," .
95 $ilDB->quote($a_user_id,
"integer") .
"," .
96 $ilDB->quote($a_tref_id,
"integer") .
"," .
97 $ilDB->quote($now,
"timestamp") .
"," .
98 $ilDB->quote($a_skill_id,
"integer") .
"," .
100 $ilDB->quote(1,
"integer") .
"," .
101 $ilDB->quote($a_trigger_ref_id,
"integer") .
"," .
102 $ilDB->quote($trigger_obj_id,
"integer") .
"," .
103 $ilDB->quote(
"",
"text") .
"," .
104 $ilDB->quote(
"",
"text") .
"," .
105 $ilDB->quote($a_self_eval,
"integer") .
"," .
106 $ilDB->quote(
"",
"text") .
"," .
107 $ilDB->quote(0.0,
"float") .
112 "DELETE FROM skl_user_has_level WHERE " 113 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
114 .
" AND skill_id = " .
$ilDB->quote($a_skill_id,
"integer")
115 .
" AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer")
116 .
" AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer")
117 .
" AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
129 int $a_trigger_ref_id = 0
135 $ilDB->setLimit(1, 0);
137 "SELECT * FROM skl_user_skill_level WHERE " .
138 "skill_id = " .
$ilDB->quote($a_skill_id,
"integer") .
" AND " .
139 "user_id = " .
$ilDB->quote($a_user_id,
"integer") .
" AND " .
140 "tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
" AND " .
141 "trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer") .
" AND " .
142 "self_eval = " .
$ilDB->quote(1,
"integer") .
143 " ORDER BY status_date DESC" 145 if ($rec =
$ilDB->fetchAssoc($set)) {
146 $status_day = substr($rec[
"status_date"], 0, 10);
149 $recent = $rec[
"status_date"];
161 ?
string $a_timestamp_to =
null,
167 $to = (!is_null($a_timestamp_to))
168 ?
" AND status_date <= " .
$ilDB->quote($a_timestamp_to,
"timestamp")
171 $user = ($a_user_id > 0)
172 ?
" AND user_id = " .
$ilDB->quote($a_user_id,
"integer")
175 $set =
$ilDB->query(
"SELECT * FROM skl_user_skill_level " .
176 " WHERE status_date >= " .
$ilDB->quote($a_timestamp,
"timestamp") .
177 " AND valid = " .
$ilDB->quote(1,
"integer") .
179 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
182 " ORDER BY user_id, status_date ASC ");
184 while ($rec =
$ilDB->fetchAssoc($set)) {
185 $rec[
'user_id'] = (
int) $rec[
'user_id'];
186 $rec[
'level_id'] = (
int) $rec[
'level_id'];
187 $rec[
'skill_id'] = (
int) $rec[
'skill_id'];
188 $rec[
'status'] = (
int) $rec[
'status'];
189 $rec[
'valid'] = (
int) $rec[
'valid'];
190 $rec[
'trigger_ref_id'] = (
int) $rec[
'trigger_ref_id'];
191 $rec[
'trigger_obj_id'] = (
int) $rec[
'trigger_obj_id'];
192 $rec[
'tref_id'] = (
int) $rec[
'tref_id'];
193 $rec[
'self_eval'] = (
int) $rec[
'self_eval'];
194 $rec[
'next_level_fulfilment'] = (float) $rec[
'next_level_fulfilment'];
195 $achievements[$rec[
"user_id"]][] = $rec;
198 return $achievements;
208 ?
string $trigger_title,
209 ?
string $trigger_type,
215 bool $a_self_eval =
false,
216 string $a_unique_identifier =
"",
217 float $a_next_level_fulfilment = 0.0,
218 string $trigger_user_id =
"" 223 if ($trigger_user_id ==
"") {
224 $trigger_user_id =
"-";
231 "UPDATE skl_user_skill_level SET " .
232 " level_id = " .
$ilDB->quote($a_level_id,
"integer") .
"," .
233 " status_date = " .
$ilDB->quote($now,
"timestamp") .
"," .
234 " next_level_fulfilment = " .
$ilDB->quote($a_next_level_fulfilment,
"float") .
235 " WHERE user_id = " .
$ilDB->quote($a_user_id,
"integer") .
236 " AND status_date = " .
$ilDB->quote($status_date,
"timestamp") .
237 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
238 " AND status = " .
$ilDB->quote($a_status,
"integer") .
239 " AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer") .
240 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
241 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
242 " AND trigger_user_id = " .
$ilDB->quote($trigger_user_id,
"text")
245 if ($a_unique_identifier !=
"") {
247 "DELETE FROM skl_user_skill_level WHERE " .
248 " user_id = " .
$ilDB->quote($a_user_id,
"integer") .
249 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
250 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
251 " AND trigger_ref_id = " .
$ilDB->quote($trigger_ref_id,
"integer") .
252 " AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer") .
253 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
254 " AND unique_identifier = " .
$ilDB->quote($a_unique_identifier,
"text") .
255 " AND trigger_user_id = " .
$ilDB->quote($trigger_user_id,
"text")
260 $ilDB->manipulate(
"INSERT INTO skl_user_skill_level " .
261 "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id," .
262 "trigger_obj_id, trigger_obj_type, trigger_title, self_eval, unique_identifier," .
263 "next_level_fulfilment, trigger_user_id) VALUES (" .
264 $ilDB->quote($a_level_id,
"integer") .
"," .
265 $ilDB->quote($a_user_id,
"integer") .
"," .
266 $ilDB->quote($a_tref_id,
"integer") .
"," .
267 $ilDB->quote($now,
"timestamp") .
"," .
268 $ilDB->quote($skill_id,
"integer") .
"," .
269 $ilDB->quote($a_status,
"integer") .
"," .
270 $ilDB->quote(1,
"integer") .
"," .
271 $ilDB->quote($trigger_ref_id,
"integer") .
"," .
272 $ilDB->quote($trigger_obj_id,
"integer") .
"," .
273 $ilDB->quote($trigger_type,
"text") .
"," .
274 $ilDB->quote($trigger_title,
"text") .
"," .
275 $ilDB->quote($a_self_eval,
"integer") .
"," .
276 $ilDB->quote($a_unique_identifier,
"text") .
"," .
277 $ilDB->quote($a_next_level_fulfilment,
"float") .
"," .
278 $ilDB->quote($trigger_user_id,
"text") .
285 "DELETE FROM skl_user_has_level WHERE " 286 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
287 .
" AND skill_id = " .
$ilDB->quote($skill_id,
"integer")
288 .
" AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer")
289 .
" AND trigger_obj_id = " .
$ilDB->quote($trigger_obj_id,
"integer")
290 .
" AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
294 $ilDB->manipulate(
"INSERT INTO skl_user_has_level " .
295 "(level_id, user_id, tref_id, status_date, skill_id, trigger_ref_id, trigger_obj_id, trigger_obj_type," .
296 "trigger_title, self_eval, next_level_fulfilment, trigger_user_id) VALUES (" .
297 $ilDB->quote($a_level_id,
"integer") .
"," .
298 $ilDB->quote($a_user_id,
"integer") .
"," .
299 $ilDB->quote($a_tref_id,
"integer") .
"," .
300 $ilDB->quote($now,
"timestamp") .
"," .
301 $ilDB->quote($skill_id,
"integer") .
"," .
302 $ilDB->quote($trigger_ref_id,
"integer") .
"," .
303 $ilDB->quote($trigger_obj_id,
"integer") .
"," .
304 $ilDB->quote($trigger_type,
"text") .
"," .
305 $ilDB->quote($trigger_title,
"text") .
"," .
306 $ilDB->quote($a_self_eval,
"integer") .
"," .
307 $ilDB->quote($a_next_level_fulfilment,
"float") .
"," .
308 $ilDB->quote($trigger_user_id,
"text") .
318 int $a_trigger_obj_id,
319 bool $a_self_eval =
false,
320 string $a_unique_identifier =
"" 326 $aff_rows =
$ilDB->manipulate(
327 "DELETE FROM skl_user_skill_level WHERE " 328 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
329 .
" AND trigger_obj_id = " .
$ilDB->quote($a_trigger_obj_id,
"integer")
330 .
" AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
331 .
" AND unique_identifier = " .
$ilDB->quote($a_unique_identifier,
"text")
337 $aff_rows =
$ilDB->manipulate(
338 "DELETE FROM skl_user_has_level WHERE " 339 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
340 .
" AND trigger_obj_id = " .
$ilDB->quote($a_trigger_obj_id,
"integer")
341 .
" AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
354 "DELETE FROM skl_user_skill_level WHERE " 355 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
358 "DELETE FROM skl_user_has_level WHERE " 359 .
" user_id = " .
$ilDB->quote($a_user_id,
"integer")
374 $q =
"SELECT level_id FROM skl_user_has_level " .
375 " WHERE trigger_obj_type = " .
$ilDB->quote($a_type,
"text") .
376 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
377 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
378 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
379 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
383 while ($rec =
$ilDB->fetchAssoc($set)) {
384 $has_level[$rec[
"level_id"]] =
true;
387 foreach ($levels as $l) {
388 if (isset($has_level[$l[
"id"]])) {
389 $max_level = (
int) $l[
"id"];
405 $q =
"SELECT next_level_fulfilment FROM skl_user_has_level " .
406 " WHERE trigger_obj_type = " .
$ilDB->quote($a_type,
"text") .
407 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
408 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
409 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
410 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
413 if ($rec =
$ilDB->fetchAssoc($set)) {
414 return (
float) $rec[
"next_level_fulfilment"];
429 $q =
"SELECT * FROM skl_user_has_level " .
430 " WHERE skill_id = " .
$ilDB->quote($skill_id,
"integer") .
431 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
432 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
433 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
434 " ORDER BY status_date DESC" 438 while ($rec =
$ilDB->fetchAssoc($set)) {
439 $rec[
'user_id'] = (
int) $rec[
'user_id'];
440 $rec[
'level_id'] = (
int) $rec[
'level_id'];
441 $rec[
'skill_id'] = (
int) $rec[
'skill_id'];
442 $rec[
'status'] = (
int) $rec[
'status'];
443 $rec[
'valid'] = (
int) $rec[
'valid'];
444 $rec[
'trigger_ref_id'] = (
int) $rec[
'trigger_ref_id'];
445 $rec[
'trigger_obj_id'] = (
int) $rec[
'trigger_obj_id'];
446 $rec[
'tref_id'] = (
int) $rec[
'tref_id'];
447 $rec[
'self_eval'] = (
int) $rec[
'self_eval'];
448 $rec[
'next_level_fulfilment'] = (float) $rec[
'next_level_fulfilment'];
459 int $trigger_object_id = 0,
460 string $trigger_user =
"" 465 ?
" AND self_eval = " .
$ilDB->quote($a_eval_by,
"integer")
467 $trigger_obj_str = ($trigger_object_id > 0)
468 ?
" AND trigger_obj_id = " .
$ilDB->quote($trigger_object_id,
"integer")
470 $trigger_user_str = ($trigger_user !==
"")
471 ?
" AND trigger_user_id = " .
$ilDB->quote($trigger_user,
"text")
475 $q =
"SELECT * FROM skl_user_skill_level " .
476 " WHERE skill_id = " .
$ilDB->quote($skill_id,
"integer") .
477 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
478 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
482 " ORDER BY status_date DESC" 485 while ($rec =
$ilDB->fetchAssoc($set)) {
486 $rec[
'user_id'] = (
int) $rec[
'user_id'];
487 $rec[
'level_id'] = (
int) $rec[
'level_id'];
488 $rec[
'skill_id'] = (
int) $rec[
'skill_id'];
489 $rec[
'status'] = (
int) $rec[
'status'];
490 $rec[
'valid'] = (
int) $rec[
'valid'];
491 $rec[
'trigger_ref_id'] = (
int) $rec[
'trigger_ref_id'];
492 $rec[
'trigger_obj_id'] = (
int) $rec[
'trigger_obj_id'];
493 $rec[
'tref_id'] = (
int) $rec[
'tref_id'];
494 $rec[
'self_eval'] = (
int) $rec[
'self_eval'];
495 $rec[
'next_level_fulfilment'] = (float) $rec[
'next_level_fulfilment'];
505 int $a_object_id = 0,
506 int $a_self_eval = 0,
507 string $trigger_user =
"" 517 return $level[
"level_id"];
529 int $a_self_eval = 0,
530 string $trigger_user =
"" 535 if ($trigger_user !==
"") {
536 $tr_user =
" AND trigger_user_id = " .
$ilDB->quote($skill_id,
"text");
540 $q =
"SELECT level_id FROM skl_user_has_level " .
541 " WHERE trigger_obj_id = " .
$ilDB->quote($a_object_id,
"integer") .
542 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
543 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
544 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
545 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") . $tr_user
549 while ($rec =
$ilDB->fetchAssoc($set)) {
550 $has_level[$rec[
"level_id"]] =
true;
553 foreach ($levels as $l) {
554 if (isset($has_level[$l[
"id"]])) {
555 $max_level = (
int) $l[
"id"];
571 $q =
"SELECT next_level_fulfilment FROM skl_user_has_level " .
572 " WHERE trigger_obj_id = " .
$ilDB->quote($a_object_id,
"integer") .
573 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
574 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
575 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
576 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
579 if ($rec =
$ilDB->fetchAssoc($set)) {
580 return (
float) $rec[
"next_level_fulfilment"];
596 $q =
"SELECT level_id FROM skl_user_has_level " .
597 " WHERE skill_id = " .
$ilDB->quote($skill_id,
"integer") .
598 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
599 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
600 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
604 while ($rec =
$ilDB->fetchAssoc($set)) {
605 $has_level[$rec[
"level_id"]] =
true;
608 foreach ($levels as $l) {
609 if (isset($has_level[$l[
"id"]])) {
610 $max_level = (
int) $l[
"id"];
625 $q =
"SELECT next_level_fulfilment FROM skl_user_has_level " .
626 " WHERE skill_id = " .
$ilDB->quote($skill_id,
"integer") .
627 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
628 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
629 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer")
632 if ($rec =
$ilDB->fetchAssoc($set)) {
633 return (
float) $rec[
"next_level_fulfilment"];
644 $q =
"SELECT level_id FROM skl_user_has_level " .
645 " WHERE skill_id = " .
$ilDB->quote($a_skill_id,
"integer") .
646 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
647 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
648 " AND self_eval = " .
$ilDB->quote(1,
"integer")
651 return !!
$ilDB->fetchAssoc($set);
663 $ilDB->setLimit(1, 0);
665 $q =
"SELECT level_id FROM skl_user_has_level " .
666 " WHERE trigger_obj_id = " .
$ilDB->quote($a_object_id,
"integer") .
667 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
668 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
669 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
670 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
671 " ORDER BY status_date DESC" 674 if ($rec =
$ilDB->fetchAssoc($set)) {
675 return (
int) $rec[
"level_id"];
690 $ilDB->setLimit(1, 0);
692 $q =
"SELECT status_date FROM skl_user_has_level " .
693 " WHERE trigger_obj_id = " .
$ilDB->quote($a_object_id,
"integer") .
694 " AND skill_id = " .
$ilDB->quote($skill_id,
"integer") .
695 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer") .
696 " AND user_id = " .
$ilDB->quote($a_user_id,
"integer") .
697 " AND self_eval = " .
$ilDB->quote($a_self_eval,
"integer") .
698 " ORDER BY status_date DESC" 701 if ($rec =
$ilDB->fetchAssoc($set)) {
702 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)
__construct(?ilDBInterface $db=null)
getAllHistoricLevelEntriesOfUser(int $skill_id, int $a_tref_id, int $a_user_id=0, int $a_eval_by=0, int $trigger_object_id=0, string $trigger_user="")
Interface ilSkillUserLevelRepository.
static now()
Return current timestamp in Y-m-d H:i:s format.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
getNextLevelFulfilmentPerObject(int $skill_id, int $a_tref_id, int $a_object_id, int $a_user_id=0, int $a_self_eval=0)
getLastLevelEntryOfUser(int $skill_id, int $a_tref_id, int $a_user_id, int $a_object_id=0, int $a_self_eval=0, string $trigger_user="")
removeAllUserData(int $a_user_id)
deleteUserLevelsOfSkill(int $skill_id, bool $is_referenece=false)
getNewAchievementsPerUser(string $a_timestamp, ?string $a_timestamp_to=null, 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="")
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)
getMaxLevelPerObject(int $skill_id, array $levels, int $a_tref_id, int $a_object_id, int $a_user_id=0, int $a_self_eval=0, string $trigger_user="")
getMaxLevelPerType(int $skill_id, array $levels, int $a_tref_id, string $a_type, int $a_user_id=0, int $a_self_eval=0)