ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilSkillUserLevelDBRepository.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
23 {
24  protected ilDBInterface $db;
25 
26  public function __construct(ilDBInterface $db = null)
27  {
28  global $DIC;
29 
30  $this->db = ($db)
31  ?: $DIC->database();
32  }
33 
34  public function deleteUserLevelsOfSkill(int $skill_id, bool $is_referenece = false): void
35  {
36  $ilDB = $this->db;
37 
38  if (!$is_referenece) {
39  $ilDB->manipulate(
40  "DELETE FROM skl_user_has_level WHERE "
41  . " skill_id = " . $ilDB->quote($skill_id, "integer")
42  );
43  $ilDB->manipulate(
44  "DELETE FROM skl_user_skill_level WHERE "
45  . " skill_id = " . $ilDB->quote($skill_id, "integer")
46  );
47  } else {
48  $ilDB->manipulate(
49  "DELETE FROM skl_user_has_level WHERE "
50  . " tref_id = " . $ilDB->quote($skill_id, "integer")
51  );
52  $ilDB->manipulate(
53  "DELETE FROM skl_user_skill_level WHERE "
54  . " tref_id = " . $ilDB->quote($skill_id, "integer")
55  );
56  }
57  }
58 
62  public function resetUserSkillLevelStatus(
63  bool $update,
64  int $trigger_obj_id,
65  string $status_date,
66  int $a_user_id,
67  int $a_skill_id,
68  int $a_tref_id = 0,
69  int $a_trigger_ref_id = 0,
70  bool $a_self_eval = false
71  ): void {
72  $ilDB = $this->db;
73 
74  $now = ilUtil::now();
75  if ($update) {
76  // this will only be set in self eval case, means this will always have a $rec
77  $ilDB->manipulate(
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") .
85  " AND status = " . $ilDB->quote(ilBasicSkill::ACHIEVED, "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")
89  );
90  } else {
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") . "," .
100  $ilDB->quote(ilBasicSkill::ACHIEVED, "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") .
109  ")");
110  }
111 
112  $ilDB->manipulate(
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")
119  );
120  }
121 
125  public function hasRecentSelfEvaluation(
126  int $trigger_obj_id,
127  int $a_user_id,
128  int $a_skill_id,
129  int $a_tref_id = 0,
130  int $a_trigger_ref_id = 0
131  ): string {
132  $ilDB = $this->db;
133 
134  $recent = "";
135 
136  $ilDB->setLimit(1, 0);
137  $set = $ilDB->query(
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"
145  );
146  if ($rec = $ilDB->fetchAssoc($set)) {
147  $status_day = substr($rec["status_date"], 0, 10);
148  $today = substr(ilUtil::now(), 0, 10);
149  if ($rec["valid"] && $rec["status"] == ilBasicSkill::ACHIEVED && $status_day == $today) {
150  $recent = $rec["status_date"];
151  }
152  }
153 
154  return $recent;
155  }
156 
160  public function getNewAchievementsPerUser(
161  string $a_timestamp,
162  string $a_timestamp_to = null,
163  int $a_user_id = 0,
164  int $a_self_eval = 0
165  ): array {
166  $ilDB = $this->db;
167 
168  $to = (!is_null($a_timestamp_to))
169  ? " AND status_date <= " . $ilDB->quote($a_timestamp_to, "timestamp")
170  : "";
171 
172  $user = ($a_user_id > 0)
173  ? " AND user_id = " . $ilDB->quote($a_user_id, "integer")
174  : "";
175 
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") .
179  " AND status = " . $ilDB->quote(ilBasicSkill::ACHIEVED, "integer") .
180  " AND self_eval = " . $ilDB->quote($a_self_eval, "integer") .
181  $to .
182  $user .
183  " ORDER BY user_id, status_date ASC ");
184  $achievements = [];
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;
197  }
198 
199  return $achievements;
200  }
201 
205  public function writeUserSkillLevelStatus(
206  int $skill_id,
207  int $trigger_ref_id,
208  int $trigger_obj_id,
209  ?string $trigger_title,
210  ?string $trigger_type,
211  bool $update,
212  string $status_date,
213  int $a_level_id,
214  int $a_user_id,
215  int $a_tref_id = 0,
216  bool $a_self_eval = false,
217  string $a_unique_identifier = "",
218  float $a_next_level_fulfilment = 0.0,
219  string $trigger_user_id = ""
220  ): void {
221  $ilDB = $this->db;
222  $a_status = ilBasicSkill::ACHIEVED;
223 
224  if ($trigger_user_id == "") {
225  $trigger_user_id = "-";
226  }
227 
228  if ($update) {
229  // this will only be set in self eval case, means this will always have a $rec
230  $now = ilUtil::now();
231  $ilDB->manipulate(
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")
244  );
245  } else {
246  if ($a_unique_identifier != "") {
247  $ilDB->manipulate(
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")
257  );
258  }
259 
260  $now = ilUtil::now();
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") .
280  ")");
281  }
282 
283  // fix (removed level_id and added skill id, since table should hold only
284  // one entry per skill)
285  $ilDB->manipulate(
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")
292  );
293 
294  if ($a_status == ilBasicSkill::ACHIEVED) {
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") .
310  ")");
311  }
312  }
313 
318  int $a_user_id,
319  int $a_trigger_obj_id,
320  bool $a_self_eval = false,
321  string $a_unique_identifier = ""
322  ): bool {
323  $ilDB = $this->db;
324 
325  $changed = false;
326 
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")
333  );
334  if ($aff_rows > 0) {
335  $changed = true;
336  }
337 
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")
343  );
344  if ($aff_rows > 0) {
345  $changed = true;
346  }
347  return $changed;
348  }
349 
350  public function removeAllUserData(int $a_user_id): void
351  {
352  $ilDB = $this->db;
353 
354  $ilDB->manipulate(
355  "DELETE FROM skl_user_skill_level WHERE "
356  . " user_id = " . $ilDB->quote($a_user_id, "integer")
357  );
358  $ilDB->manipulate(
359  "DELETE FROM skl_user_has_level WHERE "
360  . " user_id = " . $ilDB->quote($a_user_id, "integer")
361  );
362  }
363 
364  public function getMaxLevelPerType(
365  int $skill_id,
366  array $levels,
367  int $a_tref_id,
368  string $a_type,
369  int $a_user_id = 0,
370  int $a_self_eval = 0
371  ): int {
372  $ilDB = $this->db;
373 
374  $set = $ilDB->query(
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")
381  );
382 
383  $has_level = [];
384  while ($rec = $ilDB->fetchAssoc($set)) {
385  $has_level[$rec["level_id"]] = true;
386  }
387  $max_level = 0;
388  foreach ($levels as $l) {
389  if (isset($has_level[$l["id"]])) {
390  $max_level = (int) $l["id"];
391  }
392  }
393  return $max_level;
394  }
395 
397  int $skill_id,
398  int $a_tref_id,
399  string $a_type,
400  int $a_user_id = 0,
401  int $a_self_eval = 0
402  ): float {
403  $ilDB = $this->db;
404 
405  $set = $ilDB->query(
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")
412  );
413 
414  if ($rec = $ilDB->fetchAssoc($set)) {
415  return (float) $rec["next_level_fulfilment"];
416  }
417 
418  return 0;
419  }
420 
421  public function getAllLevelEntriesOfUser(
422  int $skill_id,
423  int $a_tref_id,
424  int $a_user_id = 0,
425  int $a_self_eval = 0
426  ): array {
427  $ilDB = $this->db;
428 
429  $set = $ilDB->query(
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"
436  );
437 
438  $levels = [];
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'];
450  $levels[] = $rec;
451  }
452  return $levels;
453  }
454 
456  int $skill_id,
457  int $a_tref_id,
458  int $a_user_id = 0,
459  int $a_eval_by = 0
460  ): array {
461  $ilDB = $this->db;
462 
463  $by = ($a_eval_by != ilBasicSkill::EVAL_BY_ALL)
464  ? " AND self_eval = " . $ilDB->quote($a_eval_by, "integer")
465  : "";
466 
467  $set = $ilDB->query(
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") .
472  $by .
473  " ORDER BY status_date DESC"
474  );
475  $levels = [];
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'];
487  $levels[] = $rec;
488  }
489  return $levels;
490  }
491 
492  public function getMaxLevelPerObject(
493  int $skill_id,
494  array $levels,
495  int $a_tref_id,
496  int $a_object_id,
497  int $a_user_id = 0,
498  int $a_self_eval = 0
499  ): int {
500  $ilDB = $this->db;
501 
502  $set = $ilDB->query(
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")
509  );
510 
511  $has_level = [];
512  while ($rec = $ilDB->fetchAssoc($set)) {
513  $has_level[$rec["level_id"]] = true;
514  }
515  $max_level = 0;
516  foreach ($levels as $l) {
517  if (isset($has_level[$l["id"]])) {
518  $max_level = (int) $l["id"];
519  }
520  }
521  return $max_level;
522  }
523 
525  int $skill_id,
526  int $a_tref_id,
527  int $a_object_id,
528  int $a_user_id = 0,
529  int $a_self_eval = 0
530  ): float {
531  $ilDB = $this->db;
532 
533  $set = $ilDB->query(
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")
540  );
541 
542  if ($rec = $ilDB->fetchAssoc($set)) {
543  return (float) $rec["next_level_fulfilment"];
544  }
545 
546  return 0;
547  }
548 
549  public function getMaxLevel(
550  int $skill_id,
551  array $levels,
552  int $a_tref_id,
553  int $a_user_id = 0,
554  int $a_self_eval = 0
555  ): int {
556  $ilDB = $this->db;
557 
558  $set = $ilDB->query(
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")
564  );
565 
566  $has_level = [];
567  while ($rec = $ilDB->fetchAssoc($set)) {
568  $has_level[$rec["level_id"]] = true;
569  }
570  $max_level = 0;
571  foreach ($levels as $l) {
572  if (isset($has_level[$l["id"]])) {
573  $max_level = (int) $l["id"];
574  }
575  }
576  return $max_level;
577  }
578 
579  public function getNextLevelFulfilment(
580  int $skill_id,
581  int $a_tref_id,
582  int $a_user_id = 0,
583  int $a_self_eval = 0
584  ): float {
585  $ilDB = $this->db;
586 
587  $set = $ilDB->query(
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")
593  );
594 
595  if ($rec = $ilDB->fetchAssoc($set)) {
596  return (float) $rec["next_level_fulfilment"];
597  }
598 
599  return 0;
600  }
601 
602  public function hasSelfEvaluated(int $a_user_id, int $a_skill_id, int $a_tref_id): bool
603  {
604  $ilDB = $this->db;
605 
606  $set = $ilDB->query(
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")
612  );
613 
614  return !!$ilDB->fetchAssoc($set);
615  }
616 
617  public function getLastLevelPerObject(
618  int $skill_id,
619  int $a_tref_id,
620  int $a_object_id,
621  int $a_user_id = 0,
622  int $a_self_eval = 0
623  ): int {
624  $ilDB = $this->db;
625 
626  $ilDB->setLimit(1, 0);
627  $set = $ilDB->query(
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"
635  );
636 
637  if ($rec = $ilDB->fetchAssoc($set)) {
638  return (int) $rec["level_id"];
639  }
640 
641  return 0;
642  }
643 
644  public function getLastUpdatePerObject(
645  int $skill_id,
646  int $a_tref_id,
647  int $a_object_id,
648  int $a_user_id = 0,
649  int $a_self_eval = 0
650  ): string {
651  $ilDB = $this->db;
652 
653  $ilDB->setLimit(1, 0);
654  $set = $ilDB->query(
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"
662  );
663 
664  if ($rec = $ilDB->fetchAssoc($set)) {
665  return $rec["status_date"];
666  }
667 
668  return "";
669  }
670 }
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.
global $DIC
Definition: feed.php:28
getNextLevelFulfilmentPerObject(int $skill_id, int $a_tref_id, int $a_object_id, int $a_user_id=0, int $a_self_eval=0)
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...
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="")
$q
Definition: shib_logout.php:21
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)