ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilBasicSkill.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5include_once("./Services/Skill/classes/class.ilSkillTreeNode.php");
6include_once("./Services/Skill/interfaces/interface.ilSkillUsageInfo.php");
7
17{
18 const ACHIEVED = 1;
19 const NOT_ACHIEVED = 0;
20
22 const EVAL_BY_SELF = 1;
23 const EVAL_BY_ALL = 2;
24
25 var $id;
26
31 function __construct($a_id = 0)
32 {
33 parent::ilSkillTreeNode($a_id);
34 $this->setType("skll");
35 }
36
40 function read()
41 {
42 parent::read();
43 }
44
49 function create()
50 {
51 parent::create();
52 }
53
57 function delete()
58 {
59 global $ilDB;
60
61 $ilDB->manipulate("DELETE FROM skl_level WHERE "
62 ." skill_id = ".$ilDB->quote($this->getId(), "integer")
63 );
64
65 $ilDB->manipulate("DELETE FROM skl_user_has_level WHERE "
66 ." skill_id = ".$ilDB->quote($this->getId(), "integer")
67 );
68
69 parent::delete();
70 }
71
75 function copy()
76 {
77 $skill = new ilBasicSkill();
78 $skill->setTitle($this->getTitle());
79 $skill->setType($this->getType());
80 $skill->setSelfEvaluation($this->getSelfEvaluation());
81 $skill->setOrderNr($this->getOrderNr());
82 $skill->create();
83
84 $levels = $this->getLevelData();
85 if (sizeof($levels))
86 {
87 foreach($levels as $item)
88 {
89 $skill->addLevel($item["title"], $item["description"]);
90 }
91 }
92 $skill->update();
93
94 return $skill;
95 }
96
97 //
98 //
99 // Skill level related methods
100 //
101 //
102
109 function addLevel($a_title, $a_description)
110 {
111 global $ilDB;
112
113 $nr = $this->getMaxLevelNr();
114 $nid = $ilDB->nextId("skl_level");
115 $ilDB->insert("skl_level", array(
116 "id" => array("integer", $nid),
117 "skill_id" => array("integer", $this->getId()),
118 "nr" => array("integer", $nr+1),
119 "title" => array("text", $a_title),
120 "description" => array("clob", $a_description)
121 ));
122
123 }
124
130 function getMaxLevelNr()
131 {
132 global $ilDB;
133
134 $set = $ilDB->query("SELECT MAX(nr) mnr FROM skl_level WHERE ".
135 " skill_id = ".$ilDB->quote($this->getId(), "integer")
136 );
137 $rec = $ilDB->fetchAssoc($set);
138 return (int) $rec["mnr"];
139 }
140
146 function getLevelData($a_id = 0)
147 {
148 global $ilDB;
149
150 if ($a_id > 0)
151 {
152 $and = " AND id = ".$ilDB->quote($a_id, "integer");
153 }
154
155 $set = $ilDB->query("SELECT * FROM skl_level WHERE ".
156 " skill_id = ".$ilDB->quote($this->getId(), "integer").
157 $and.
158 " ORDER BY nr"
159 );
160 $levels = array();
161 while ($rec = $ilDB->fetchAssoc($set))
162 {
163 if ($a_id > 0)
164 {
165 return $rec;
166 }
167 $levels[] = $rec;
168 }
169 return $levels;
170 }
171
178 protected static function lookupLevelProperty($a_id, $a_prop)
179 {
180 global $ilDB;
181
182 $set = $ilDB->query("SELECT $a_prop FROM skl_level WHERE ".
183 " id = ".$ilDB->quote($a_id, "integer")
184 );
185 $rec = $ilDB->fetchAssoc($set);
186 return $rec[$a_prop];
187 }
188
195 static function lookupLevelTitle($a_id)
196 {
197 return ilBasicSkill::lookupLevelProperty($a_id, "title");
198 }
199
206 static function lookupLevelDescription($a_id)
207 {
208 return ilBasicSkill::lookupLevelProperty($a_id, "description");
209 }
210
217 static function lookupLevelTrigger($a_id)
218 {
219die("ilBasicSkill::lookupLevelTrigger is deprecated.");
220 $ref_id = ilBasicSkill::lookupLevelProperty($a_id, "trigger_ref_id");
221 $obj_id = ilBasicSkill::lookupLevelProperty($a_id, "trigger_obj_id");
222 return array("ref_id" => $ref_id, "obj_id" => $obj_id);
223 }
224
231 static function lookupLevelSkillId($a_id)
232 {
233 return ilBasicSkill::lookupLevelProperty($a_id, "skill_id");
234 }
235
242 static protected function writeLevelProperty($a_id, $a_prop, $a_value, $a_type)
243 {
244 global $ilDB;
245
246 $ilDB->update("skl_level", array(
247 $a_prop => array($a_type, $a_value),
248 ), array(
249 "id" => array("integer", $a_id),
250 ));
251 }
252
259 static function writeLevelTitle($a_id, $a_title)
260 {
261 ilBasicSkill::writeLevelProperty($a_id, "title", $a_title, "text");
262 }
263
270 static function writeLevelDescription($a_id, $a_description)
271 {
272 ilBasicSkill::writeLevelProperty($a_id, "description", $a_description, "clob");
273 }
274
281 static function writeLevelTrigger($a_id, $a_trigger_ref_id)
282 {
283die("ilBasicSkill::writeLevelTrigger is deprecated.");
284 $a_trigger_obj_id = 0;
285 if ($a_trigger_ref_id > 0)
286 {
287 $a_trigger_obj_id = ilObject::_lookupObjId($a_trigger_ref_id);
288 }
289 ilBasicSkill::writeLevelProperty($a_id, "trigger_ref_id", $a_trigger_ref_id, "integer");
290 ilBasicSkill::writeLevelProperty($a_id, "trigger_obj_id", $a_trigger_obj_id, "integer");
291 }
292
299 function updateLevelOrder($order)
300 {
301 global $ilDB;
302
303 asort($order);
304
305 $cnt = 1;
306 foreach ($order as $id => $o)
307 {
308 $ilDB->manipulate("UPDATE skl_level SET ".
309 " nr = ".$ilDB->quote($cnt, "integer").
310 " WHERE id = ".$ilDB->quote($id, "integer")
311 );
312 $cnt++;
313 }
314 }
315
322 function deleteLevel($a_id)
323 {
324 global $ilDB;
325
326 $ilDB->manipulate("DELETE FROM skl_level WHERE "
327 ." id = ".$ilDB->quote($a_id, "integer")
328 );
329
330 }
331
339 {
340 global $ilDB;
341
342 $set = $ilDB->query("SELECT id, nr FROM skl_level WHERE ".
343 " skill_id = ".$ilDB->quote($this->getId(), "integer").
344 " ORDER BY nr ASC"
345 );
346 $cnt = 1;
347 while ($rec = $ilDB->fetchAssoc($set))
348 {
349 $ilDB->manipulate("UPDATE skl_level SET ".
350 " nr = ".$ilDB->quote($cnt, "integer").
351 " WHERE id = ".$ilDB->quote($rec["id"], "integer")
352 );
353 $cnt++;
354 }
355 }
356
363 function lookupLevelsForTriggerRefId($a_ref_id)
364 {
365 global $ilDB;
366die("ilBasicSkill::lookupLevelsForTriggerRefId is deprecated.");
367 $set = $ilDB->query("SELECT id FROM skl_level WHERE ".
368 " trigger_ref_id = ".$ilDB->quote($a_ref_id, "integer")
369 );
370 $levels = array();
371 while ($rec = $ilDB->fetchAssoc($set))
372 {
373 $levels[] = $rec["id"];
374 }
375 return $levels;
376 }
377
384 function getSkillForLevelId($a_level_id)
385 {
386 global $ilDB;
387
388 $set = $ilDB->query("SELECT * FROM skl_level WHERE ".
389 " id = ".$ilDB->quote($a_level_id, "integer")
390 );
391 $skill = null;
392 if ($rec = $ilDB->fetchAssoc($set))
393 {
394 if (ilSkillTreeNode::isInTree($rec["skill_id"]))
395 {
396 $skill = new ilBasicSkill($rec["skill_id"]);
397 }
398 }
399 return $skill;
400 }
401
402 //
403 //
404 // User skill (level) related methods
405 //
406 //
407
408
413 public static function updateAllUserSkillLevels()
414 {
415 global $ilDB;
416die("ilBasicSkill::updateAllUserSkillLevels is deprecated.");
417 $set = $ilDB->query("SELECT id, trigger_obj_id FROM skl_level WHERE ".
418 " trigger_obj_id > ".$ilDB->quote(0, "integer")
419 );
420 while ($rec = $ilDB->fetchAssoc($set)) // all trigger objects
421 {
422 $skill_level_id = $rec["id"];
423 $tr_obj_id = $rec["trigger_obj_id"];
424
425 if (ilObject::_hasUntrashedReference($tr_obj_id))
426 {
427 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
428 $completed = ilLPStatusWrapper::_lookupCompletedForObject($tr_obj_id);
429 foreach ($completed as $user_id)
430 {
432 $user_id, ilBasicSkill::ACHIEVED);
433 }
434 }
435 }
436 }
437
442 public static function updateSkillLevelsByTriggerRef($a_user_id, $a_ref_id)
443 {
444 global $ilDB;
445die("ilBasicSkill::updateSkillLevelsByTriggerRef is deprecated.");
446 $set = $ilDB->query("SELECT id, trigger_obj_id FROM skl_level WHERE ".
447 " trigger_ref_id = ".$ilDB->quote($a_ref_id, "integer")
448 );
449 while ($rec = $ilDB->fetchAssoc($set)) // all trigger objects
450 {
451 $skill_level_id = $rec["id"];
452 $tr_obj_id = $rec["trigger_obj_id"];
453
454 if (ilObject::_hasUntrashedReference($tr_obj_id))
455 {
456 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
457 $completed = ilLPStatusWrapper::_lookupCompletedForObject($tr_obj_id);
458 foreach ($completed as $user_id)
459 {
460 if ($a_user_id == $user_id)
461 {
463 $user_id, ilBasicSkill::ACHIEVED);
464 }
465 }
466 }
467 }
468 }
469
481 static function writeUserSkillLevelStatus($a_level_id, $a_user_id,
482 $a_trigger_ref_id, $a_tref_id = 0, $a_status = ilBasicSkill::ACHIEVED, $a_force = false,
483 $a_self_eval = 0, $a_unique_identifier = "")
484 {
485 global $ilDB;
486
487 $skill_id = ilBasicSkill::lookupLevelSkillId($a_level_id);
488 $trigger_ref_id = $a_trigger_ref_id;
489 $trigger_obj_id = ilObject::_lookupObjId($trigger_ref_id);
490 $trigger_title = ilObject::_lookupTitle($trigger_obj_id);
491 $trigger_type = ilObject::_lookupType($trigger_obj_id);
492
493 $update = false;
494
495 // check whether current skill user level is identical
496 // to the one that should be set (-> no change required)
497/* $ilDB->setLimit(1);
498 $set = $ilDB->query("SELECT status, valid FROM skl_user_skill_level WHERE ".
499 "level_id = ".$ilDB->quote($a_level_id, "integer")." AND ".
500 "user_id = ".$ilDB->quote($a_user_id, "integer")." AND ".
501 "tref_id = ".$ilDB->quote((int) $a_tref_id, "integer")." AND ".
502 "trigger_obj_id = ".$ilDB->quote($trigger_obj_id, "integer")." AND ".
503 "self_eval = ".$ilDB->quote($a_self_eval, "integer").
504 " ORDER BY status_date DESC"
505 );
506 $rec = $ilDB->fetchAssoc($set);
507 if (!$rec["valid"] || $rec["status"] != $a_status)
508 {
509 $save = true;
510 }*/
511
512 if ($a_self_eval)
513 {
514 $ilDB->setLimit(1);
515 $set = $ilDB->query("SELECT * FROM skl_user_skill_level WHERE ".
516 "skill_id = ".$ilDB->quote($skill_id, "integer")." AND ".
517 "user_id = ".$ilDB->quote($a_user_id, "integer")." AND ".
518 "tref_id = ".$ilDB->quote((int) $a_tref_id, "integer")." AND ".
519 "trigger_obj_id = ".$ilDB->quote($trigger_obj_id, "integer")." AND ".
520 "self_eval = ".$ilDB->quote($a_self_eval, "integer").
521 " ORDER BY status_date DESC"
522 );
523 $rec = $ilDB->fetchAssoc($set);
524 $status_day = substr($rec["status_date"], 0, 10);
525 $today = substr(ilUtil::now(), 0, 10);
526 if ($rec["valid"] && $rec["status"] == $a_status && $status_day == $today)
527 {
528 $update = true;
529 }
530 }
531
532 if ($update)
533 {
534 $now = ilUtil::now();
535 $ilDB->manipulate("UPDATE skl_user_skill_level SET ".
536 " level_id = ".$ilDB->quote($a_level_id, "integer").",".
537 " status_date = ".$ilDB->quote($now, "timestamp").
538 " WHERE user_id = ".$ilDB->quote($a_user_id, "integer").
539 " AND status_date = ".$ilDB->quote($rec["status_date"], "timestamp").
540 " AND skill_id = ".$ilDB->quote($rec["skill_id"], "integer").
541 " AND status = ".$ilDB->quote($a_status, "integer").
542 " AND trigger_obj_id = ".$ilDB->quote($trigger_obj_id, "integer").
543 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
544 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer")
545 );
546 }
547 else
548 {
549 if ($a_unique_identifier != "")
550 {
551 $ilDB->manipulate("DELETE FROM skl_user_skill_level WHERE ".
552 " user_id = ".$ilDB->quote($a_user_id, "integer").
553 " AND tref_id = ".$ilDB->quote($a_tref_id, "integer").
554 " AND skill_id = ".$ilDB->quote($skill_id, "integer").
555 " AND trigger_ref_id = ".$ilDB->quote($trigger_ref_id, "integer").
556 " AND trigger_obj_id = ".$ilDB->quote($trigger_obj_id, "integer").
557 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer").
558 " AND unique_identifier = ".$ilDB->quote($a_unique_identifier, "text")
559 );
560 }
561
562 $now = ilUtil::now();
563 $ilDB->manipulate("INSERT INTO skl_user_skill_level ".
564 "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id,".
565 "trigger_obj_id, trigger_obj_type, trigger_title, self_eval, unique_identifier) VALUES (".
566 $ilDB->quote($a_level_id, "integer").",".
567 $ilDB->quote($a_user_id, "integer").",".
568 $ilDB->quote((int) $a_tref_id, "integer").",".
569 $ilDB->quote($now, "timestamp").",".
570 $ilDB->quote($skill_id, "integer").",".
571 $ilDB->quote($a_status, "integer").",".
572 $ilDB->quote(1, "integer").",".
573 $ilDB->quote($trigger_ref_id, "integer").",".
574 $ilDB->quote($trigger_obj_id, "integer").",".
575 $ilDB->quote($trigger_type, "text").",".
576 $ilDB->quote($trigger_title, "text").",".
577 $ilDB->quote($a_self_eval, "integer").",".
578 $ilDB->quote($a_unique_identifier, "text").
579 ")");
580 }
581
582 // fix (removed level_id and added skill id, since table should hold only
583 // one entry per skill)
584 $ilDB->manipulate("DELETE FROM skl_user_has_level WHERE "
585 ." user_id = ".$ilDB->quote($a_user_id, "integer")
586 ." AND skill_id = ".$ilDB->quote($skill_id, "integer")
587 ." AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer")
588 ." AND trigger_obj_id = ".$ilDB->quote($trigger_obj_id, "integer")
589 ." AND self_eval = ".$ilDB->quote($a_self_eval, "integer")
590 );
591
592 if ($a_status == ilBasicSkill::ACHIEVED)
593 {
594 $ilDB->manipulate("INSERT INTO skl_user_has_level ".
595 "(level_id, user_id, tref_id, status_date, skill_id, trigger_ref_id, trigger_obj_id, trigger_obj_type, trigger_title, self_eval) VALUES (".
596 $ilDB->quote($a_level_id, "integer").",".
597 $ilDB->quote($a_user_id, "integer").",".
598 $ilDB->quote($a_tref_id, "integer").",".
599 $ilDB->quote($now, "timestamp").",".
600 $ilDB->quote($skill_id, "integer").",".
601 $ilDB->quote($trigger_ref_id, "integer").",".
602 $ilDB->quote($trigger_obj_id, "integer").",".
603 $ilDB->quote($trigger_type, "text").",".
604 $ilDB->quote($trigger_title, "text").",".
605 $ilDB->quote($a_self_eval, "integer").
606 ")");
607 }
608 }
609
616 function getMaxLevelPerType($a_tref_id, $a_type, $a_user_id = 0, $a_self_eval = 0)
617 {
618 global $ilDB, $ilUser;
619
620 if ($a_user_id == 0)
621 {
622 $a_user_id = $ilUser->getId();
623 }
624
625 $set = $ilDB->query($q = "SELECT level_id FROM skl_user_has_level ".
626 " WHERE trigger_obj_type = ".$ilDB->quote($a_type, "text").
627 " AND skill_id = ".$ilDB->quote($this->getId(), "integer").
628 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
629 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
630 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer")
631 );
632
633 $has_level = array();
634 while ($rec = $ilDB->fetchAssoc($set))
635 {
636 $has_level[$rec["level_id"]] = true;
637 }
638 $max_level = 0;
639 foreach ($this->getLevelData() as $l)
640 {
641 if (isset($has_level[$l["id"]]))
642 {
643 $max_level = $l["id"];
644 }
645 }
646 return $max_level;
647 }
648
655 function getAllLevelEntriesOfUser($a_tref_id, $a_user_id = 0, $a_self_eval = 0)
656 {
657 global $ilDB, $ilUser;
658
659 if ($a_user_id == 0)
660 {
661 $a_user_id = $ilUser->getId();
662 }
663
664 $set = $ilDB->query($q = "SELECT * FROM skl_user_has_level ".
665 " WHERE skill_id = ".$ilDB->quote($this->getId(), "integer").
666 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
667 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
668 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer").
669 " ORDER BY status_date DESC"
670 );
671
672 $levels = array();
673 while ($rec = $ilDB->fetchAssoc($set))
674 {
675 $levels[] = $rec;
676 }
677 return $levels;
678 }
679
686 function getAllHistoricLevelEntriesOfUser($a_tref_id, $a_user_id = 0, $a_eval_by = 0)
687 {
688 global $ilDB, $ilUser;
689
690 if ($a_user_id == 0)
691 {
692 $a_user_id = $ilUser->getId();
693 }
694
695 $by = ($a_eval_by != self::EVAL_BY_ALL)
696 ? " AND self_eval = ".$ilDB->quote($a_self_eval, "integer")
697 : "";
698
699 $set = $ilDB->query($q = "SELECT * FROM skl_user_skill_level ".
700 " WHERE skill_id = ".$ilDB->quote($this->getId(), "integer").
701 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
702 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
703 $by.
704 " ORDER BY status_date DESC"
705 );
706 $levels = array();
707 while ($rec = $ilDB->fetchAssoc($set))
708 {
709 $levels[] = $rec;
710 }
711 return $levels;
712 }
713
714
721 function getMaxLevelPerObject($a_tref_id, $a_object_id, $a_user_id = 0, $a_self_eval = 0)
722 {
723 global $ilDB, $ilUser;
724
725 if ($a_user_id == 0)
726 {
727 $a_user_id = $ilUser->getId();
728 }
729
730 $set = $ilDB->query($q = "SELECT level_id FROM skl_user_has_level ".
731 " WHERE trigger_obj_id = ".$ilDB->quote($a_object_id, "integer").
732 " AND skill_id = ".$ilDB->quote($this->getId(), "integer").
733 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
734 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
735 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer")
736 );
737
738 $has_level = array();
739 while ($rec = $ilDB->fetchAssoc($set))
740 {
741 $has_level[$rec["level_id"]] = true;
742 }
743 $max_level = 0;
744 foreach ($this->getLevelData() as $l)
745 {
746 if (isset($has_level[$l["id"]]))
747 {
748 $max_level = $l["id"];
749 }
750 }
751 return $max_level;
752 }
753
760 function getLastLevelPerObject($a_tref_id, $a_object_id, $a_user_id = 0, $a_self_eval = 0)
761 {
762 global $ilDB, $ilUser;
763
764 if ($a_user_id == 0)
765 {
766 $a_user_id = $ilUser->getId();
767 }
768
769 $ilDB->setLimit(1);
770 $set = $ilDB->query($q = "SELECT level_id FROM skl_user_has_level ".
771 " WHERE trigger_obj_id = ".$ilDB->quote($a_object_id, "integer").
772 " AND skill_id = ".$ilDB->quote($this->getId(), "integer").
773 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
774 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
775 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer").
776 " ORDER BY status_date DESC"
777 );
778
779 $rec = $ilDB->fetchAssoc($set);
780
781 return $rec["level_id"];
782 }
783
790 function getLastUpdatePerObject($a_tref_id, $a_object_id, $a_user_id = 0, $a_self_eval = 0)
791 {
792 global $ilDB, $ilUser;
793
794 if ($a_user_id == 0)
795 {
796 $a_user_id = $ilUser->getId();
797 }
798
799 $ilDB->setLimit(1);
800 $set = $ilDB->query($q = "SELECT status_date FROM skl_user_has_level ".
801 " WHERE trigger_obj_id = ".$ilDB->quote($a_object_id, "integer").
802 " AND skill_id = ".$ilDB->quote($this->getId(), "integer").
803 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
804 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
805 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer").
806 " ORDER BY status_date DESC"
807 );
808
809 $rec = $ilDB->fetchAssoc($set);
810
811 return $rec["status_date"];
812 }
813
820 static function getCompletionDateForTriggerRefId($a_user_id, $a_ref_id = null, $a_self_eval = 0)
821 {
822 global $ilDB;
823die("ilBasicSkill::getCompletionDateForTriggerRefId is deprecated.");
824 if ($a_ref_id == "")
825 {
826 $a_ref_id = null;
827 }
828 else if (!is_array($a_ref_id))
829 {
830 $a_ref_id = array($a_ref_id);
831 }
832 if (!is_array($a_user_id))
833 {
834 $a_user_id = array($a_user_id);
835 }
836
837 if ($a_ref_id != null)
838 {
839 if (!is_array($a_ref_id))
840 {
841 $a_ref_id = array($a_ref_id);
842 }
843
844 $set = $ilDB->query($q = "SELECT user_id, status_date, trigger_ref_id FROM skl_user_has_level WHERE ".
845 $ilDB->in("user_id", $a_user_id, false, "integer")." AND ".
846 $ilDB->in("trigger_ref_id", $a_ref_id, false, "integer")
847 );
848
849 $completion = array();
850 while ($rec = $ilDB->fetchAssoc($set))
851 {
852 if (!isset($completion[$rec["user_id"]][$rec["trigger_ref_id"]]))
853 {
854 $completion[$rec["user_id"]][$rec["trigger_ref_id"]] = $rec["status_date"];
855 }
856 else if ($rec["status_date"] < $completion[$rec["user_id"]][$rec["trigger_ref_id"]])
857 {
858 $completion[$rec["user_id"]][$rec["trigger_ref_id"]] = $rec["status_date"];
859 }
860 }
861
862 foreach ($a_ref_id as $ref_id)
863 {
864 foreach ($a_user_id as $user_id)
865 {
866 if (!isset($completion[$user_id][$ref_id]))
867 {
868 $completion[$user_id][$ref_id] = false;
869 }
870 }
871 }
872 }
873 else
874 {
875 $completion = array();
876 foreach ($a_user_id as $user_id)
877 {
878 include_once 'Services/Membership/classes/class.ilParticipants.php';
879 $a_ref_id = ilParticipants::_getMembershipByType($user_id, 'crs', true);
880
881 $set = $ilDB->query($q = "SELECT user_id, status_date, trigger_ref_id FROM skl_user_has_level WHERE ".
882 "user_id = ".$ilDB->quote($user_id, "integer")." AND ".
883 $ilDB->in("trigger_ref_id", $a_ref_id, false, "integer")
884 );
885
886 while ($rec = $ilDB->fetchAssoc($set))
887 {
888 if (!isset($completion[$user_id][$rec["trigger_ref_id"]]))
889 {
890 $completion[$user_id][$rec["trigger_ref_id"]] = $rec["status_date"];
891 }
892 else if ($rec["status_date"] < $completion[$user_id][$rec["trigger_ref_id"]])
893 {
894 $completion[$user_id][$rec["trigger_ref_id"]] = $rec["status_date"];
895 }
896 }
897 foreach ($a_ref_id as $ref_id)
898 {
899 if (!isset($completion[$user_id][$ref_id]))
900 {
901 $completion[$user_id][$ref_id] = false;
902 }
903 }
904 }
905
906 }
907 return $completion;
908 }
909
916 static function checkUserCertificateForTriggerRefId($a_user_id, $a_ref_id, $a_self_eval = 0)
917 {
918 global $ilDB;
919die("ilBasicSkill::checkUserCertificateForTriggerRefId is deprecated.");
920 if (!is_array($a_ref_id))
921 {
922 $a_ref_id = array($a_ref_id);
923 }
924 if (!is_array($a_user_id))
925 {
926 $a_user_id = array($a_user_id);
927 }
928 $set = $ilDB->query($q = "SELECT user_id, status_date, trigger_ref_id, level_id, skill_id FROM skl_user_has_level WHERE ".
929 $ilDB->in("user_id", $a_user_id, false, "integer")." AND ".
930 $ilDB->in("trigger_ref_id", $a_ref_id, false, "integer")
931 );
932
933 $completion = array();
934
935 $completion = array();
936 while ($rec = $ilDB->fetchAssoc($set))
937 {
938 if (!isset($completion[$rec["user_id"]][$rec["trigger_ref_id"]])
939 && ilBasicSkill::_lookupCertificate($rec["skill_id"], $rec["level_id"]))
940 {
941 $completion[$rec["user_id"]][$rec["trigger_ref_id"]] = true;
942 }
943 }
944
945 foreach ($a_ref_id as $ref_id)
946 {
947 foreach ($a_user_id as $user_id)
948 {
949 if (!isset($completion[$user_id][$ref_id]))
950 {
951 $completion[$user_id][$ref_id] = false;
952 }
953 }
954 }
955 return $completion;
956
957 }
958
965 function lookupLevelAchievementDate($a_user_id, $a_level_id, $a_self_eval = 0)
966 {
967 global $ilDB;
968die("ilBasicSkill::lookupLevelAchievementDate is deprecated.");
969 $set = $ilDB->query("SELECT user_id, status_date, trigger_ref_id, level_id, skill_id FROM skl_user_has_level WHERE ".
970 " user_id = ".$ilDB->quote($a_user_id, "integer").
971 " AND user_id = ".$ilDB->quote($a_user_id, "integer")
972 );
973 if ($rec = $ilDB->fetchAssoc($set))
974 {
975 return $rec["status_date"];
976 }
977
978 return false;
979 }
980
987 static function getTriggerOfAllCertificates($a_user_id, $a_self_eval = 0)
988 {
989 global $ilDB, $tree;
990die("ilBasicSkill::getTriggerOfAllCertificates is deprecated.");
991 if (!is_array($a_user_id))
992 {
993 $a_user_id = array($a_user_id);
994 }
995
996 $set = $ilDB->query($q = "SELECT user_id, status_date, trigger_ref_id, level_id, skill_id FROM skl_user_has_level WHERE ".
997 $ilDB->in("user_id", $a_user_id, false, "integer")
998 );
999
1000 $completion = array();
1001
1002 while ($rec = $ilDB->fetchAssoc($set))
1003 {
1004 if ((!is_array($completion[$rec["user_id"]]) || !in_array($rec["trigger_ref_id"], $completion[$rec["user_id"]]))
1005 && ilBasicSkill::_lookupCertificate($rec["skill_id"], $rec["level_id"]))
1006 {
1007 if ($tree->isInTree($rec["trigger_ref_id"]))
1008 {
1009 $completion[$rec["user_id"]][] = $rec["trigger_ref_id"];
1010 }
1011 }
1012 }
1013
1014 foreach ($a_user_id as $user_id)
1015 {
1016 if (!is_array($completion[$user_id]))
1017 {
1018 $completion[$user_id] = array();
1019 }
1020 }
1021 return $completion;
1022 }
1023
1030 static function getSkillLevelsForTrigger($a_ref_id)
1031 {
1032 global $ilDB;
1033die("ilBasicSkill::getSkillLevelsForTrigger is deprecated.");
1034 $set = $ilDB->query($q = "SELECT id FROM skl_level".
1035 " WHERE trigger_ref_id = ".$ilDB->quote($a_ref_id, "integer"));
1036
1037 $skill_levels = array();
1038 while ($rec = $ilDB->fetchAssoc($set))
1039 {
1040 $skill_levels[] = $rec["id"];
1041 }
1042
1043 return $skill_levels;
1044
1045 }
1046
1047 //
1048 //
1049 // Certificate related methods
1050 //
1051 //
1052
1060 {
1061 return $this->getTitle();
1062 }
1063
1070 function getLevelTitleForCertificate($a_level_id)
1071 {
1072die("ilBasicSkill::getLevelTitleForCertificate is deprecated.");
1073 return ilBasicSkill::lookupLevelTitle($a_level_id);
1074 }
1075
1082 function getTriggerTitleForCertificate($a_level_id)
1083 {
1084die("ilBasicSkill::getTriggerTitleForCertificate is deprecated.");
1085 $tr = ilBasicSkill::lookupLevelTrigger($a_level_id);
1086 return ilObject::_lookupTitle($tr["obj_id"]);
1087 }
1088
1096 {
1097 return "Skill";
1098 }
1099
1106 public static function _lookupCertificate($a_skill_id, $a_skill_level_id)
1107 {
1108 $certificatefile = CLIENT_WEB_DIR."/certificates/skill/".
1109 ((int)$a_skill_id)."/".((int) $a_skill_level_id)."/certificate.xml";
1110 if (@file_exists($certificatefile))
1111 {
1112 return true;
1113 }
1114 else
1115 {
1116 return false;
1117 }
1118 }
1119
1126 static public function getUsageInfo($a_cskill_ids, &$a_usages)
1127 {
1128 global $ilDB;
1129
1130 include_once("./Services/Skill/classes/class.ilSkillUsage.php");
1132 "skl_user_skill_level", "user_id");
1133 }
1134
1135
1136}
1137?>
global $l
Definition: afr.php:30
lookupLevelsForTriggerRefId($a_ref_id)
Lookup levels for trigger.
static updateSkillLevelsByTriggerRef($a_user_id, $a_ref_id)
Look for all skill level that have a trigger and update the user skill level information,...
static writeLevelTrigger($a_id, $a_trigger_ref_id)
Write trigger.
static lookupLevelProperty($a_id, $a_prop)
Lookup level property.
static getCompletionDateForTriggerRefId($a_user_id, $a_ref_id=null, $a_self_eval=0)
Get trigger completion.
__construct($a_id=0)
Constructor @access public.
getMaxLevelNr()
Get maximum level nr.
getAllHistoricLevelEntriesOfUser($a_tref_id, $a_user_id=0, $a_eval_by=0)
Get all historic level entries.
getSkillForLevelId($a_level_id)
Get skill for level id.
static lookupLevelSkillId($a_id)
Lookup level skill id.
static getSkillLevelsForTrigger($a_ref_id)
Get assigned skill levels for trigger.
getLevelTitleForCertificate($a_level_id)
Get title for certificate.
static writeLevelTitle($a_id, $a_title)
Write level title.
getAllLevelEntriesOfUser($a_tref_id, $a_user_id=0, $a_self_eval=0)
Get all level entries.
deleteLevel($a_id)
Delete level.
addLevel($a_title, $a_description)
Add new level.
getTriggerTitleForCertificate($a_level_id)
Get trigger title for certificate.
read()
Read data from database.
static getTriggerOfAllCertificates($a_user_id, $a_self_eval=0)
Get trigger completion.
static lookupLevelTitle($a_id)
Lookup level title.
getTitleForCertificate()
Get title for certificate.
static writeUserSkillLevelStatus($a_level_id, $a_user_id, $a_trigger_ref_id, $a_tref_id=0, $a_status=ilBasicSkill::ACHIEVED, $a_force=false, $a_self_eval=0, $a_unique_identifier="")
Write skill level status.
getMaxLevelPerObject($a_tref_id, $a_object_id, $a_user_id=0, $a_self_eval=0)
Get max levels per object.
static getUsageInfo($a_cskill_ids, &$a_usages)
Get usage info.
updateLevelOrder($order)
Update level order.
getLastLevelPerObject($a_tref_id, $a_object_id, $a_user_id=0, $a_self_eval=0)
Get last level set per object.
lookupLevelAchievementDate($a_user_id, $a_level_id, $a_self_eval=0)
Lookup level achievement date.
create()
Create skill.
getLevelData($a_id=0)
Get level data.
static writeLevelProperty($a_id, $a_prop, $a_value, $a_type)
Write level property.
static writeLevelDescription($a_id, $a_description)
Write level description.
static checkUserCertificateForTriggerRefId($a_user_id, $a_ref_id, $a_self_eval=0)
Get trigger completion.
copy()
Copy basic skill.
static updateAllUserSkillLevels()
Look for all skill level that have a trigger and update the user skill level information,...
static lookupLevelDescription($a_id)
Lookup level description.
fixLevelNumbering()
Fix level numbering.
getShortTitleForCertificate()
Get short title for certificate.
getMaxLevelPerType($a_tref_id, $a_type, $a_user_id=0, $a_self_eval=0)
Get max levels per type.
static _lookupCertificate($a_skill_id, $a_skill_level_id)
Checks whether a skill level has a certificate or not.
getLastUpdatePerObject($a_tref_id, $a_object_id, $a_user_id=0, $a_self_eval=0)
Get last update per object.
static lookupLevelTrigger($a_id)
Lookup level trigger.
static _lookupCompletedForObject($a_obj_id, $a_user_ids=null)
Get completed users for object.
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
_hasUntrashedReference($a_obj_id)
checks wether an object has at least one reference that is not in trash
static _lookupType($a_id, $a_reference=false)
lookup object type
static _getMembershipByType($a_usr_id, $a_type, $a_only_member_role=false)
get membership by type Get course or group membership
A node in the skill tree.
static isInTree($a_id)
Is id in tree?
setType($a_type)
Set type.
getOrderNr()
Get order nr.
getSelfEvaluation()
Get self evaluation.
static getUsageInfoGeneric($a_cskill_ids, &$a_usages, $a_usage_type, $a_table, $a_key_field, $a_skill_field="skill_id", $a_tref_field="tref_id")
Get standard usage query.
static now()
Return current timestamp in Y-m-d H:i:s format.
Get info on usages of skills.
$ref_id
Definition: sahs_server.php:39
global $ilDB
global $ilUser
Definition: imgupload.php:15