ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
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  {
34  $ilDB = $this->db;
35 
36  $ilDB->manipulate(
37  "DELETE FROM skl_user_has_level WHERE "
38  . " skill_id = " . $ilDB->quote($skill_id, "integer")
39  );
40  }
41 
45  public function resetUserSkillLevelStatus(
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 
143  public function getNewAchievementsPerUser(
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 
188  public function writeUserSkillLevelStatus(
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 
404  public function getAllLevelEntriesOfUser(
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 }
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)
$update
Definition: imgupload.php:92
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)
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="")
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)