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 
5 include_once("./Services/Skill/classes/class.ilSkillTreeNode.php");
6 include_once("./Services/Skill/interfaces/interface.ilSkillUsageInfo.php");
7 
17 {
18  const ACHIEVED = 1;
19  const NOT_ACHIEVED = 0;
20 
21  const EVAL_BY_OTHERS_= 0;
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  {
219 die("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  {
283 die("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 
338  function fixLevelNumbering()
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;
366 die("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;
416 die("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;
445 die("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;
823 die("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;
919 die("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;
968 die("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;
990 die("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;
1033 die("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  {
1072 die("ilBasicSkill::getLevelTitleForCertificate is deprecated.");
1073  return ilBasicSkill::lookupLevelTitle($a_level_id);
1074  }
1075 
1082  function getTriggerTitleForCertificate($a_level_id)
1083  {
1084 die("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 ?>
Get info on usages of skills.
getShortTitleForCertificate()
Get short title for certificate.
static updateSkillLevelsByTriggerRef($a_user_id, $a_ref_id)
Look for all skill level that have a trigger and update the user skill level information, if it has changed.
setType($a_type)
Set type.
copy()
Copy basic skill.
create()
Create skill.
getLevelData($a_id=0)
Get level data.
static lookupLevelTitle($a_id)
Lookup level title.
getLastLevelPerObject($a_tref_id, $a_object_id, $a_user_id=0, $a_self_eval=0)
Get last level set per object.
getSkillForLevelId($a_level_id)
Get skill for level id.
static lookupLevelTrigger($a_id)
Lookup level trigger.
static getTriggerOfAllCertificates($a_user_id, $a_self_eval=0)
Get trigger completion.
static _getMembershipByType($a_usr_id, $a_type, $a_only_member_role=false)
get membership by type Get course or group membership
getTriggerTitleForCertificate($a_level_id)
Get trigger title for certificate.
getMaxLevelNr()
Get maximum level nr.
static _lookupTitle($a_id)
lookup object title
static updateAllUserSkillLevels()
Look for all skill level that have a trigger and update the user skill level information, if it has changed.
getSelfEvaluation()
Get self evaluation.
static now()
Return current timestamp in Y-m-d H:i:s format.
lookupLevelsForTriggerRefId($a_ref_id)
Lookup levels for trigger.
deleteLevel($a_id)
Delete level.
getOrderNr()
Get order nr.
addLevel($a_title, $a_description)
Add new level.
getLevelTitleForCertificate($a_level_id)
Get title for certificate.
static getUsageInfo($a_cskill_ids, &$a_usages)
Get usage info.
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.
static writeLevelProperty($a_id, $a_prop, $a_value, $a_type)
Write level property.
static writeLevelDescription($a_id, $a_description)
Write level description.
fixLevelNumbering()
Fix level numbering.
static isInTree($a_id)
Is id in tree?
lookupLevelAchievementDate($a_user_id, $a_level_id, $a_self_eval=0)
Lookup level achievement date.
read()
Read data from database.
static _lookupObjId($a_id)
static checkUserCertificateForTriggerRefId($a_user_id, $a_ref_id, $a_self_eval=0)
Get trigger completion.
static writeLevelTitle($a_id, $a_title)
Write level title.
getMaxLevelPerType($a_tref_id, $a_type, $a_user_id=0, $a_self_eval=0)
Get max levels per type.
static lookupLevelProperty($a_id, $a_prop)
Lookup level property.
static _lookupType($a_id, $a_reference=false)
lookup object type
static lookupLevelDescription($a_id)
Lookup level description.
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 writeLevelTrigger($a_id, $a_trigger_ref_id)
Write trigger.
static _lookupCertificate($a_skill_id, $a_skill_level_id)
Checks whether a skill level has a certificate or not.
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.
updateLevelOrder($order)
Update level order.
_hasUntrashedReference($a_obj_id)
checks wether an object has at least one reference that is not in trash
static getSkillLevelsForTrigger($a_ref_id)
Get assigned skill levels for trigger.
global $ilUser
Definition: imgupload.php:15
global $l
Definition: afr.php:30
$ref_id
Definition: sahs_server.php:39
A node in the skill tree.
global $ilDB
getAllHistoricLevelEntriesOfUser($a_tref_id, $a_user_id=0, $a_eval_by=0)
Get all historic level entries.
static _lookupCompletedForObject($a_obj_id, $a_user_ids=null)
Get completed users for object.
static lookupLevelSkillId($a_id)
Lookup level skill id.
__construct($a_id=0)
Constructor public.
Basic Skill.
static getCompletionDateForTriggerRefId($a_user_id, $a_ref_id=null, $a_self_eval=0)
Get trigger completion.
getLastUpdatePerObject($a_tref_id, $a_object_id, $a_user_id=0, $a_self_eval=0)
Get last update per object.
getAllLevelEntriesOfUser($a_tref_id, $a_user_id=0, $a_self_eval=0)
Get all level entries.