54 protected array
$classes = [ilBasicSkill::class, ilPersonalSkill::class, SkillProfile::class,
55 ilSkillResources::class, ilSkillUsage::class];
65 $this->tree_repo = $DIC->skills()->internal()->repo()->getTreeRepo();
66 $this->tree_factory = $DIC->skills()->internal()->factory();
67 $this->profile_manager = $DIC->skills()->internal()->manager()->getProfileManager();
70 public static function setUsage(
int $a_obj_id,
int $a_skill_id,
int $a_tref_id,
bool $a_use =
true): void
74 $ilDB = $DIC->database();
80 "obj_id" => array(
"integer", $a_obj_id),
81 "skill_id" => array(
"integer", $a_skill_id),
82 "tref_id" => array(
"integer", $a_tref_id)
88 $q =
"DELETE FROM skl_usage WHERE " .
89 " obj_id = " .
$ilDB->quote($a_obj_id,
"integer") .
90 " AND skill_id = " .
$ilDB->quote($a_skill_id,
"integer") .
91 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer")
100 $ilDB = $DIC->database();
103 $q =
"DELETE FROM skl_usage WHERE " .
104 " obj_id = " .
$ilDB->quote($a_obj_id,
"integer")
111 public static function getUsages(
int $a_skill_id,
int $a_tref_id): array
115 $ilDB = $DIC->database();
118 "SELECT obj_id FROM skl_usage " .
119 " WHERE skill_id = " .
$ilDB->quote($a_skill_id,
"integer") .
120 " AND tref_id = " .
$ilDB->quote($a_tref_id,
"integer")
123 while ($rec =
$ilDB->fetchAssoc($set)) {
124 $obj_ids[] = (
int) $rec[
"obj_id"];
137 return self::getUsageInfoGeneric(
153 string $a_usage_type,
156 string $a_skill_field =
"skill_id",
157 string $a_tref_field =
"tref_id" 163 $ilDB = $DIC->database();
165 if (count($a_cskill_ids) == 0) {
170 $q =
"SELECT " . $a_key_field .
", " . $a_skill_field .
", " . $a_tref_field .
" FROM " . $a_table .
" ";
171 foreach ($a_cskill_ids as $sk) {
172 $q .= $w .
" (" . $a_skill_field .
" = " .
$ilDB->quote($sk[
"skill_id"],
"integer") .
173 " AND " . $a_tref_field .
" = " .
$ilDB->quote($sk[
"tref_id"],
"integer") .
") ";
176 $q .=
" GROUP BY " . $a_key_field .
", " . $a_skill_field .
", " . $a_tref_field;
178 $set =
$ilDB->query($q);
179 while ($rec =
$ilDB->fetchAssoc($set)) {
180 $a_usages[$rec[$a_skill_field] .
":" . $rec[$a_tref_field]][$a_usage_type][] =
181 array(
"key" => $rec[$a_key_field]);
196 foreach ($classes as $class) {
197 $usages = array_merge_recursive($usages, $class::getUsageInfo($a_cskill_ids));
211 foreach ($a_tree_ids as $t) {
212 $vtree = $this->tree_factory->tree()->getGlobalVirtualTree();
213 $nodes = $vtree->getSubTreeForTreeId($t);
214 foreach ($nodes as $n) {
228 $vtree = $this->tree_repo->getVirtualTreeForNodeId($a_skill_id);
229 $nodes = $vtree->getSubTreeForCSkillId($a_skill_id .
":" . $a_tref_id);
242 foreach ($a_cskill_ids as $s) {
243 $vtree = $this->tree_repo->getVirtualTreeForNodeId($s[
"skill_id"]);
244 $nodes = $vtree->getSubTreeForCSkillId($s[
"skill_id"] .
":" . $s[
"tref_id"]);
245 foreach ($nodes as $n) {
259 $skill_logger->debug(
"ilSkillUsage: getAllUsagesOfTemplate(" . $a_template_id .
")");
266 foreach ($trefs as $tref) {
267 $cskill_ids[] = array(
"skill_id" => $a_template_id,
"tref_id" => $tref);
268 $skill_logger->debug(
"ilSkillUsage: ... skill_id: " . $a_template_id .
", tref_id: " . $tref .
".");
271 $skill_logger->debug(
"ilSkillUsage: ... count cskill_ids: " . count($cskill_ids) .
".");
280 $lng = $DIC->language();
282 return $lng->txt(
"skmg_usage_type_info_" . $a_type);
289 $lng = $DIC->language();
292 case self::TYPE_GENERAL:
294 return $lng->txt(
"skmg_usage_obj_objects");
296 case self::USER_ASSIGNED:
297 case self::PERSONAL_SKILL:
298 case self::USER_MATERIAL:
299 case self::SELF_EVAL:
300 return $lng->txt(
"skmg_usage_obj_users");
303 return $lng->txt(
"skmg_usage_obj_profiles");
306 return $lng->txt(
"skmg_usage_type_info_" . $a_type);
316 $objects = self::getUsages($a_skill_id, $a_tref_id);
327 $obj_usages = array_column($usages,
"gen");
329 return array_column(current(array_reverse($obj_usages)) ?: [],
'key');
337 $profile = $this->profile_manager->getById($a_profile_id);
338 $skills = $profile->getSkillLevels();
342 foreach ($skills as $skill) {
343 $obj_usages = self::getUsages($skill[
"base_skill_id"], $skill[
"tref_id"]);
344 foreach ($obj_usages as
$id) {
345 if (!in_array($id, $objects)) {
352 $roles = $this->profile_manager->getAssignedRoles($profile->getId());
353 foreach ($roles as $role) {
354 if (($role[
"object_type"] ==
"crs" || $role[
"object_type"] ==
"grp")
355 && !in_array($role[
"object_id"], $objects)) {
356 $objects[] = $role[
"object_id"];
Get info on usages of skills.
getAllUsagesInfoOfSubtrees(array $a_cskill_ids)
getAssignedObjectsForSkill(int $a_skill_id, int $a_tref_id)
static getLogger(string $a_component_id)
Get component logger.
static removeUsagesFromObject(int $a_obj_id)
getAllUsagesInfo(array $a_cskill_ids)
SkillProfileManager $profile_manager
static setUsage(int $a_obj_id, int $a_skill_id, int $a_tref_id, bool $a_use=true)
static _lookupTrefIdsForTemplateId(int $a_tid)
getAllUsagesOfTemplate(int $a_template_id)
getAssignedObjectsForSkillTemplate(int $a_template_id)
SkillInternalFactoryService $tree_factory
static getObjTypeString(string $a_type)
getAllUsagesInfoOfSubtree(int $a_skill_id, int $a_tref_id=0)
Skill internal factory service.
static getUsages(int $a_skill_id, int $a_tref_id)
static getUsageInfoGeneric(array $a_cskill_ids, string $a_usage_type, string $a_table, string $a_key_field, string $a_skill_field="skill_id", string $a_tref_field="tref_id")
Get standard usage query.
ilSkillTreeRepository $tree_repo
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
getAssignedObjectsForSkillProfile(int $a_profile_id)
static getUsageInfo(array $a_cskill_ids)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getAllUsagesInfoOfTrees(array $a_tree_ids)
static getTypeInfoString(string $a_type)