ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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::__construct($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, $a_import_id = "")
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 "import_id" => array("text", $a_import_id),
122 "creation_date" => array("timestamp", ilUtil::now())
123 ));
124
125 }
126
132 function getMaxLevelNr()
133 {
134 global $ilDB;
135
136 $set = $ilDB->query("SELECT MAX(nr) mnr FROM skl_level WHERE ".
137 " skill_id = ".$ilDB->quote($this->getId(), "integer")
138 );
139 $rec = $ilDB->fetchAssoc($set);
140 return (int) $rec["mnr"];
141 }
142
148 function getLevelData($a_id = 0)
149 {
150 global $ilDB;
151
152 if ($a_id > 0)
153 {
154 $and = " AND id = ".$ilDB->quote($a_id, "integer");
155 }
156
157 $set = $ilDB->query("SELECT * FROM skl_level WHERE ".
158 " skill_id = ".$ilDB->quote($this->getId(), "integer").
159 $and.
160 " ORDER BY nr"
161 );
162 $levels = array();
163 while ($rec = $ilDB->fetchAssoc($set))
164 {
165 if ($a_id > 0)
166 {
167 return $rec;
168 }
169 $levels[] = $rec;
170 }
171 return $levels;
172 }
173
180 protected static function lookupLevelProperty($a_id, $a_prop)
181 {
182 global $ilDB;
183
184 $set = $ilDB->query("SELECT $a_prop FROM skl_level WHERE ".
185 " id = ".$ilDB->quote($a_id, "integer")
186 );
187 $rec = $ilDB->fetchAssoc($set);
188 return $rec[$a_prop];
189 }
190
197 static function lookupLevelTitle($a_id)
198 {
199 return ilBasicSkill::lookupLevelProperty($a_id, "title");
200 }
201
208 static function lookupLevelDescription($a_id)
209 {
210 return ilBasicSkill::lookupLevelProperty($a_id, "description");
211 }
212
219 static function lookupLevelSkillId($a_id)
220 {
221 return ilBasicSkill::lookupLevelProperty($a_id, "skill_id");
222 }
223
230 static protected function writeLevelProperty($a_id, $a_prop, $a_value, $a_type)
231 {
232 global $ilDB;
233
234 $ilDB->update("skl_level", array(
235 $a_prop => array($a_type, $a_value),
236 ), array(
237 "id" => array("integer", $a_id),
238 ));
239 }
240
247 static function writeLevelTitle($a_id, $a_title)
248 {
249 ilBasicSkill::writeLevelProperty($a_id, "title", $a_title, "text");
250 }
251
258 static function writeLevelDescription($a_id, $a_description)
259 {
260 ilBasicSkill::writeLevelProperty($a_id, "description", $a_description, "clob");
261 }
262
269 function updateLevelOrder($order)
270 {
271 global $ilDB;
272
273 asort($order);
274
275 $cnt = 1;
276 foreach ($order as $id => $o)
277 {
278 $ilDB->manipulate("UPDATE skl_level SET ".
279 " nr = ".$ilDB->quote($cnt, "integer").
280 " WHERE id = ".$ilDB->quote($id, "integer")
281 );
282 $cnt++;
283 }
284 }
285
292 function deleteLevel($a_id)
293 {
294 global $ilDB;
295
296 $ilDB->manipulate("DELETE FROM skl_level WHERE "
297 ." id = ".$ilDB->quote($a_id, "integer")
298 );
299
300 }
301
309 {
310 global $ilDB;
311
312 $set = $ilDB->query("SELECT id, nr FROM skl_level WHERE ".
313 " skill_id = ".$ilDB->quote($this->getId(), "integer").
314 " ORDER BY nr ASC"
315 );
316 $cnt = 1;
317 while ($rec = $ilDB->fetchAssoc($set))
318 {
319 $ilDB->manipulate("UPDATE skl_level SET ".
320 " nr = ".$ilDB->quote($cnt, "integer").
321 " WHERE id = ".$ilDB->quote($rec["id"], "integer")
322 );
323 $cnt++;
324 }
325 }
326
333 function getSkillForLevelId($a_level_id)
334 {
335 global $ilDB;
336
337 $set = $ilDB->query("SELECT * FROM skl_level WHERE ".
338 " id = ".$ilDB->quote($a_level_id, "integer")
339 );
340 $skill = null;
341 if ($rec = $ilDB->fetchAssoc($set))
342 {
343 if (ilSkillTreeNode::isInTree($rec["skill_id"]))
344 {
345 $skill = new ilBasicSkill($rec["skill_id"]);
346 }
347 }
348 return $skill;
349 }
350
351 //
352 //
353 // User skill (level) related methods
354 //
355 //
356
357
370 static function resetUserSkillLevelStatus($a_user_id, $a_skill_id, $a_tref_id = 0, $a_trigger_ref_id = 0, $a_self_eval = false)
371 {
372 global $DIC;
373
374 $db = $DIC->database();
375
376 if (!$a_self_eval)
377 {
378 include_once("./Services/Skill/exceptions/class.ilSkillException.php");
379 throw new ilSkillException("resetUserSkillLevelStatus currently only provided for self evaluations.");
380 }
381
382 $trigger_obj_id = ($a_trigger_ref_id > 0)
383 ? ilObject::_lookupObjId($a_trigger_ref_id)
384 : 0;
385
386 $update = false;
387 $status_date = self::hasRecentSelfEvaluation($a_user_id, $a_skill_id, $a_tref_id, $a_trigger_ref_id);
388 if ($status_date != "")
389 {
390 $update = true;
391 }
392
393 if ($update)
394 {
395 // this will only be set in self eval case, means this will always have a $rec
396 $now = ilUtil::now();
397 $db->manipulate("UPDATE skl_user_skill_level SET ".
398 " level_id = ".$db->quote(0, "integer").",".
399 " status_date = ".$db->quote($now, "timestamp").
400 " WHERE user_id = ".$db->quote($a_user_id, "integer").
401 " AND status_date = ".$db->quote($status_date, "timestamp").
402 " AND skill_id = ".$db->quote($a_skill_id, "integer").
403 " AND status = ".$db->quote(self::ACHIEVED, "integer").
404 " AND trigger_obj_id = ".$db->quote($trigger_obj_id, "integer").
405 " AND tref_id = ".$db->quote((int) $a_tref_id, "integer").
406 " AND self_eval = ".$db->quote($a_self_eval, "integer")
407 );
408 }
409 else
410 {
411 $now = ilUtil::now();
412 $db->manipulate("INSERT INTO skl_user_skill_level ".
413 "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id,".
414 "trigger_obj_id, trigger_obj_type, trigger_title, self_eval, unique_identifier) VALUES (".
415 $db->quote(0, "integer").",".
416 $db->quote($a_user_id, "integer").",".
417 $db->quote((int) $a_tref_id, "integer").",".
418 $db->quote($now, "timestamp").",".
419 $db->quote($a_skill_id, "integer").",".
420 $db->quote(self::ACHIEVED, "integer").",".
421 $db->quote(1, "integer").",".
422 $db->quote($a_trigger_ref_id, "integer").",".
423 $db->quote($trigger_obj_id, "integer").",".
424 $db->quote("", "text").",".
425 $db->quote("", "text").",".
426 $db->quote($a_self_eval, "integer").",".
427 $db->quote("", "text").
428 ")");
429 }
430
431 $db->manipulate("DELETE FROM skl_user_has_level WHERE "
432 ." user_id = ".$db->quote($a_user_id, "integer")
433 ." AND skill_id = ".$db->quote($a_skill_id, "integer")
434 ." AND tref_id = ".$db->quote((int) $a_tref_id, "integer")
435 ." AND trigger_obj_id = ".$db->quote($trigger_obj_id, "integer")
436 ." AND self_eval = ".$db->quote($a_self_eval, "integer")
437 );
438
439 }
440
448 protected static function hasRecentSelfEvaluation($a_user_id, $a_skill_id, $a_tref_id = 0, $a_trigger_ref_id = 0)
449 {
450 global $DIC;
451
452 $db = $DIC->database();
453
454 $trigger_obj_id = ($a_trigger_ref_id > 0)
455 ? ilObject::_lookupObjId($a_trigger_ref_id)
456 : 0;
457
458 $recent = "";
459
460 $db->setLimit(1);
461 $set = $db->query("SELECT * FROM skl_user_skill_level WHERE ".
462 "skill_id = ".$db->quote($a_skill_id, "integer")." AND ".
463 "user_id = ".$db->quote($a_user_id, "integer")." AND ".
464 "tref_id = ".$db->quote((int) $a_tref_id, "integer")." AND ".
465 "trigger_obj_id = ".$db->quote($trigger_obj_id, "integer")." AND ".
466 "self_eval = ".$db->quote(1, "integer").
467 " ORDER BY status_date DESC"
468 );
469 $rec = $db->fetchAssoc($set);
470 $status_day = substr($rec["status_date"], 0, 10);
471 $today = substr(ilUtil::now(), 0, 10);
472 if ($rec["valid"] && $rec["status"] == ilBasicSkill::ACHIEVED && $status_day == $today)
473 {
474 $recent = $rec["status_date"];
475 }
476
477 return $recent;
478 }
479
480
493 static function writeUserSkillLevelStatus($a_level_id, $a_user_id,
494 $a_trigger_ref_id, $a_tref_id = 0, $a_status = ilBasicSkill::ACHIEVED, $a_force = false,
495 $a_self_eval = false, $a_unique_identifier = "")
496 {
497 global $ilDB;
498
499 $skill_id = ilBasicSkill::lookupLevelSkillId($a_level_id);
500 $trigger_ref_id = $a_trigger_ref_id;
501 $trigger_obj_id = ilObject::_lookupObjId($trigger_ref_id);
502 $trigger_title = ilObject::_lookupTitle($trigger_obj_id);
503 $trigger_type = ilObject::_lookupType($trigger_obj_id);
504
505 $update = false;
506
507 // self evaluations will update, if the last self evaluation is on the same day
508 if ($a_self_eval && self::hasRecentSelfEvaluation($a_user_id, $skill_id, $a_tref_id, $trigger_ref_id))
509 {
510 $status_date = self::hasRecentSelfEvaluation($a_user_id, $skill_id, $a_tref_id, $trigger_ref_id);
511 if ($status_date != "")
512 {
513 $update = true;
514 }
515 }
516
517 if ($update)
518 {
519 // this will only be set in self eval case, means this will always have a $rec
520 $now = ilUtil::now();
521 $ilDB->manipulate("UPDATE skl_user_skill_level SET ".
522 " level_id = ".$ilDB->quote($a_level_id, "integer").",".
523 " status_date = ".$ilDB->quote($now, "timestamp").
524 " WHERE user_id = ".$ilDB->quote($a_user_id, "integer").
525 " AND status_date = ".$ilDB->quote($status_date, "timestamp").
526 " AND skill_id = ".$ilDB->quote($skill_id, "integer").
527 " AND status = ".$ilDB->quote($a_status, "integer").
528 " AND trigger_obj_id = ".$ilDB->quote($trigger_obj_id, "integer").
529 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
530 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer")
531 );
532 }
533 else
534 {
535 if ($a_unique_identifier != "")
536 {
537 $ilDB->manipulate("DELETE FROM skl_user_skill_level WHERE ".
538 " user_id = ".$ilDB->quote($a_user_id, "integer").
539 " AND tref_id = ".$ilDB->quote($a_tref_id, "integer").
540 " AND skill_id = ".$ilDB->quote($skill_id, "integer").
541 " AND trigger_ref_id = ".$ilDB->quote($trigger_ref_id, "integer").
542 " AND trigger_obj_id = ".$ilDB->quote($trigger_obj_id, "integer").
543 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer").
544 " AND unique_identifier = ".$ilDB->quote($a_unique_identifier, "text")
545 );
546 }
547
548 $now = ilUtil::now();
549 $ilDB->manipulate("INSERT INTO skl_user_skill_level ".
550 "(level_id, user_id, tref_id, status_date, skill_id, status, valid, trigger_ref_id,".
551 "trigger_obj_id, trigger_obj_type, trigger_title, self_eval, unique_identifier) VALUES (".
552 $ilDB->quote($a_level_id, "integer").",".
553 $ilDB->quote($a_user_id, "integer").",".
554 $ilDB->quote((int) $a_tref_id, "integer").",".
555 $ilDB->quote($now, "timestamp").",".
556 $ilDB->quote($skill_id, "integer").",".
557 $ilDB->quote($a_status, "integer").",".
558 $ilDB->quote(1, "integer").",".
559 $ilDB->quote($trigger_ref_id, "integer").",".
560 $ilDB->quote($trigger_obj_id, "integer").",".
561 $ilDB->quote($trigger_type, "text").",".
562 $ilDB->quote($trigger_title, "text").",".
563 $ilDB->quote($a_self_eval, "integer").",".
564 $ilDB->quote($a_unique_identifier, "text").
565 ")");
566 }
567
568 // fix (removed level_id and added skill id, since table should hold only
569 // one entry per skill)
570 $ilDB->manipulate("DELETE FROM skl_user_has_level WHERE "
571 ." user_id = ".$ilDB->quote($a_user_id, "integer")
572 ." AND skill_id = ".$ilDB->quote($skill_id, "integer")
573 ." AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer")
574 ." AND trigger_obj_id = ".$ilDB->quote($trigger_obj_id, "integer")
575 ." AND self_eval = ".$ilDB->quote($a_self_eval, "integer")
576 );
577
578 if ($a_status == ilBasicSkill::ACHIEVED)
579 {
580 $ilDB->manipulate("INSERT INTO skl_user_has_level ".
581 "(level_id, user_id, tref_id, status_date, skill_id, trigger_ref_id, trigger_obj_id, trigger_obj_type, trigger_title, self_eval) VALUES (".
582 $ilDB->quote($a_level_id, "integer").",".
583 $ilDB->quote($a_user_id, "integer").",".
584 $ilDB->quote($a_tref_id, "integer").",".
585 $ilDB->quote($now, "timestamp").",".
586 $ilDB->quote($skill_id, "integer").",".
587 $ilDB->quote($trigger_ref_id, "integer").",".
588 $ilDB->quote($trigger_obj_id, "integer").",".
589 $ilDB->quote($trigger_type, "text").",".
590 $ilDB->quote($trigger_title, "text").",".
591 $ilDB->quote($a_self_eval, "integer").
592 ")");
593 }
594 }
595
602 function getMaxLevelPerType($a_tref_id, $a_type, $a_user_id = 0, $a_self_eval = 0)
603 {
604 global $ilDB, $ilUser;
605
606 if ($a_user_id == 0)
607 {
608 $a_user_id = $ilUser->getId();
609 }
610
611 $set = $ilDB->query($q = "SELECT level_id FROM skl_user_has_level ".
612 " WHERE trigger_obj_type = ".$ilDB->quote($a_type, "text").
613 " AND skill_id = ".$ilDB->quote($this->getId(), "integer").
614 " AND tref_id = ".$ilDB->quote((int) $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 );
618
619 $has_level = array();
620 while ($rec = $ilDB->fetchAssoc($set))
621 {
622 $has_level[$rec["level_id"]] = true;
623 }
624 $max_level = 0;
625 foreach ($this->getLevelData() as $l)
626 {
627 if (isset($has_level[$l["id"]]))
628 {
629 $max_level = $l["id"];
630 }
631 }
632 return $max_level;
633 }
634
641 function getAllLevelEntriesOfUser($a_tref_id, $a_user_id = 0, $a_self_eval = 0)
642 {
643 global $ilDB, $ilUser;
644
645 if ($a_user_id == 0)
646 {
647 $a_user_id = $ilUser->getId();
648 }
649
650 $set = $ilDB->query($q = "SELECT * FROM skl_user_has_level ".
651 " WHERE skill_id = ".$ilDB->quote($this->getId(), "integer").
652 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
653 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
654 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer").
655 " ORDER BY status_date DESC"
656 );
657
658 $levels = array();
659 while ($rec = $ilDB->fetchAssoc($set))
660 {
661 $levels[] = $rec;
662 }
663 return $levels;
664 }
665
672 function getAllHistoricLevelEntriesOfUser($a_tref_id, $a_user_id = 0, $a_eval_by = 0)
673 {
674 global $ilDB, $ilUser;
675
676 if ($a_user_id == 0)
677 {
678 $a_user_id = $ilUser->getId();
679 }
680
681 $by = ($a_eval_by != self::EVAL_BY_ALL)
682 ? " AND self_eval = ".$ilDB->quote($a_self_eval, "integer")
683 : "";
684
685 $set = $ilDB->query($q = "SELECT * FROM skl_user_skill_level ".
686 " WHERE skill_id = ".$ilDB->quote($this->getId(), "integer").
687 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
688 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
689 $by.
690 " ORDER BY status_date DESC"
691 );
692 $levels = array();
693 while ($rec = $ilDB->fetchAssoc($set))
694 {
695 $levels[] = $rec;
696 }
697 return $levels;
698 }
699
700
707 function getMaxLevelPerObject($a_tref_id, $a_object_id, $a_user_id = 0, $a_self_eval = 0)
708 {
709 global $ilDB, $ilUser;
710
711 if ($a_user_id == 0)
712 {
713 $a_user_id = $ilUser->getId();
714 }
715
716 $set = $ilDB->query($q = "SELECT level_id FROM skl_user_has_level ".
717 " WHERE trigger_obj_id = ".$ilDB->quote($a_object_id, "integer").
718 " AND skill_id = ".$ilDB->quote($this->getId(), "integer").
719 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
720 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
721 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer")
722 );
723
724 $has_level = array();
725 while ($rec = $ilDB->fetchAssoc($set))
726 {
727 $has_level[$rec["level_id"]] = true;
728 }
729 $max_level = 0;
730 foreach ($this->getLevelData() as $l)
731 {
732 if (isset($has_level[$l["id"]]))
733 {
734 $max_level = $l["id"];
735 }
736 }
737 return $max_level;
738 }
739
746 function getLastLevelPerObject($a_tref_id, $a_object_id, $a_user_id = 0, $a_self_eval = 0)
747 {
748 global $ilDB, $ilUser;
749
750 if ($a_user_id == 0)
751 {
752 $a_user_id = $ilUser->getId();
753 }
754
755 $ilDB->setLimit(1);
756 $set = $ilDB->query($q = "SELECT level_id FROM skl_user_has_level ".
757 " WHERE trigger_obj_id = ".$ilDB->quote($a_object_id, "integer").
758 " AND skill_id = ".$ilDB->quote($this->getId(), "integer").
759 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
760 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
761 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer").
762 " ORDER BY status_date DESC"
763 );
764
765 $rec = $ilDB->fetchAssoc($set);
766
767 return $rec["level_id"];
768 }
769
776 function getLastUpdatePerObject($a_tref_id, $a_object_id, $a_user_id = 0, $a_self_eval = 0)
777 {
778 global $ilDB, $ilUser;
779
780 if ($a_user_id == 0)
781 {
782 $a_user_id = $ilUser->getId();
783 }
784
785 $ilDB->setLimit(1);
786 $set = $ilDB->query($q = "SELECT status_date FROM skl_user_has_level ".
787 " WHERE trigger_obj_id = ".$ilDB->quote($a_object_id, "integer").
788 " AND skill_id = ".$ilDB->quote($this->getId(), "integer").
789 " AND tref_id = ".$ilDB->quote((int) $a_tref_id, "integer").
790 " AND user_id = ".$ilDB->quote($a_user_id, "integer").
791 " AND self_eval = ".$ilDB->quote($a_self_eval, "integer").
792 " ORDER BY status_date DESC"
793 );
794
795 $rec = $ilDB->fetchAssoc($set);
796
797 return $rec["status_date"];
798 }
799
800 //
801 //
802 // Certificate related methods
803 //
804 //
805
813 {
814 return $this->getTitle();
815 }
816
824 {
825 return "Skill";
826 }
827
834 public static function _lookupCertificate($a_skill_id, $a_skill_level_id)
835 {
836 $certificatefile = CLIENT_WEB_DIR."/certificates/skill/".
837 ((int)$a_skill_id)."/".((int) $a_skill_level_id)."/certificate.xml";
838 if (@file_exists($certificatefile))
839 {
840 return true;
841 }
842 else
843 {
844 return false;
845 }
846 }
847
854 static public function getUsageInfo($a_cskill_ids, &$a_usages)
855 {
856 global $ilDB;
857
858 include_once("./Services/Skill/classes/class.ilSkillUsage.php");
860 "skl_user_skill_level", "user_id");
861 }
862
871 static function getCommonSkillIdForImportId($a_source_inst_id, $a_skill_import_id, $a_tref_import_id = 0)
872 {
873 global $ilDB;
874
875 include_once("./Services/Skill/classes/class.ilSkillTree.php");
876 include_once("./Services/Skill/classes/class.ilSkillTemplateReference.php");
877 $tree = new ilSkillTree();
878
879 if ($a_source_inst_id == 0)
880 {
881 return array();
882 }
883
884 $template_ids = array();
885 if ($a_tref_import_id > 0)
886 {
887 $skill_node_type = "sktp";
888
889 // get all matching tref nodes
890 $set = $ilDB->query("SELECT * FROM skl_tree_node n JOIN skl_tree t ON (n.obj_id = t.child) ".
891 " WHERE n.import_id = ".$ilDB->quote("il_".((int)$a_source_inst_id)."_sktr_".$a_tref_import_id, "text").
892 " ORDER BY n.creation_date DESC ");
893 while ($rec = $ilDB->fetchAssoc($set))
894 {
895 if (($t = ilSkillTemplateReference::_lookupTemplateId($rec["obj_id"])) > 0)
896 {
897 $template_ids[$t] = $rec["obj_id"];
898 }
899 }
900 }
901 else
902 {
903 $skill_node_type = "skll";
904 }
905 $set = $ilDB->query("SELECT * FROM skl_tree_node n JOIN skl_tree t ON (n.obj_id = t.child) ".
906 " WHERE n.import_id = ".$ilDB->quote("il_".((int)$a_source_inst_id)."_".$skill_node_type."_".$a_skill_import_id, "text").
907 " ORDER BY n.creation_date DESC ");
908 $results = array();
909 while ($rec = $ilDB->fetchAssoc($set))
910 {
911 $matching_trefs = array();
912 if ($a_tref_import_id > 0)
913 {
914 $skill_template_id = $tree->getTopParentNodeId($rec["obj_id"]);
915
916 // check of skill is in template
917 foreach ($template_ids as $templ => $tref)
918 {
919 if ($skill_template_id == $templ)
920 {
921 $matching_trefs[] = $tref;
922 }
923 }
924 }
925 else
926 {
927 $matching_trefs = array(0);
928 }
929
930 foreach ($matching_trefs as $t)
931 {
932 $results[] = array("skill_id" => $rec["obj_id"], "tref_id" => $t, "creation_date" => $rec["creation_date"]);
933 }
934 }
935 return $results;
936 }
937
945 static function getLevelIdForImportId($a_source_inst_id, $a_level_import_id)
946 {
947 global $ilDB;
948
949 $set = $ilDB->query("SELECT * FROM skl_level l JOIN skl_tree t ON (l.skill_id = t.child) " .
950 " WHERE l.import_id = " . $ilDB->quote("il_" . ((int)$a_source_inst_id) . "_sklv_" . $a_level_import_id, "text") .
951 " ORDER BY l.creation_date DESC ");
952 $results = array();
953 while ($rec = $ilDB->fetchAssoc($set))
954 {
955 $results[] = array("level_id" => $rec["id"], "creation_date" => $rec["creation_date"]);
956 }
957 return $results;
958 }
959
966 static function getLevelIdForImportIdMatchSkill($a_source_inst_id, $a_level_import_id, $a_skill_import_id, $a_tref_import_id = 0)
967 {
968 $level_id_data = self::getLevelIdForImportId($a_source_inst_id, $a_level_import_id);
969 $skill_data = self::getCommonSkillIdForImportId($a_source_inst_id, $a_skill_import_id, $a_tref_import_id);
970 $matches = array();
971 foreach($level_id_data as $l)
972 {
973 reset($skill_data);
974 foreach ($skill_data as $s)
975 {
976 if (ilBasicSkill::lookupLevelSkillId($l["level_id"]) == $s["skill_id"])
977 {
978 $matches[] = array(
979 "level_id" => $l["level_id"],
980 "creation_date" => $l["creation_date"],
981 "skill_id" => $s["skill_id"],
982 "tref_id" => $s["tref_id"]
983 );
984 }
985 }
986 }
987 return $matches;
988 }
989
990}
991?>
global $l
Definition: afr.php:30
An exception for terminatinating execution or to throw for unit testing.
static getCommonSkillIdForImportId($a_source_inst_id, $a_skill_import_id, $a_tref_import_id=0)
Get common skill ids for import IDs (newest first)
addLevel($a_title, $a_description, $a_import_id="")
Add new level.
static lookupLevelProperty($a_id, $a_prop)
Lookup level property.
__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 writeLevelTitle($a_id, $a_title)
Write level title.
getAllLevelEntriesOfUser($a_tref_id, $a_user_id=0, $a_self_eval=0)
Get all level entries.
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=false, $a_unique_identifier="")
Write skill level status.
deleteLevel($a_id)
Delete level.
read()
Read data from database.
static lookupLevelTitle($a_id)
Lookup level title.
getTitleForCertificate()
Get title for certificate.
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.
create()
Create skill.
getLevelData($a_id=0)
Get level data.
static getLevelIdForImportId($a_source_inst_id, $a_level_import_id)
Get level ids for import IDs (newest first)
static writeLevelProperty($a_id, $a_prop, $a_value, $a_type)
Write level property.
static writeLevelDescription($a_id, $a_description)
Write level description.
static getLevelIdForImportIdMatchSkill($a_source_inst_id, $a_level_import_id, $a_skill_import_id, $a_tref_import_id=0)
Get level ids for import Ids matching common skills.
copy()
Copy basic skill.
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 resetUserSkillLevelStatus($a_user_id, $a_skill_id, $a_tref_id=0, $a_trigger_ref_id=0, $a_self_eval=false)
Reset skill level status.
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 hasRecentSelfEvaluation($a_user_id, $a_skill_id, $a_tref_id=0, $a_trigger_ref_id=0)
Has recent self evaluation.
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
static _lookupType($a_id, $a_reference=false)
lookup object type
Skill exception class.
static _lookupTemplateId($a_obj_id)
Lookup template ID.
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.
$results
global $ilDB
global $DIC
$ilUser
Definition: imgupload.php:18
$a_type
Definition: workflow.php:93