ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.SkillResourcesManager.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
22 namespace ILIAS\Skill\Resource;
23 
25 
38 {
40  protected \ilSkillLevelRepository $level_repo;
41 
42  public function __construct(
43  SkillResourceDBRepository $skill_res_repo = null,
44  \ilSkillLevelRepository $level_repo = null
45  ) {
46  global $DIC;
47 
48  $this->skill_res_repo = ($skill_res_repo)
49  ?: $DIC->skills()->internal()->repo()->getResourceRepo();
50  $this->level_repo = ($level_repo)
51  ?: $DIC->skills()->internal()->repo()->getLevelRepo();
52  }
53 
57  public function getResources(int $skill_id, int $tref_id): array
58  {
59  return $this->skill_res_repo->getAll($skill_id, $tref_id);
60  }
61 
65  public function getResourcesOfLevel(int $skill_id, int $tref_id, int $level_id): array
66  {
67  $all_resources = $this->skill_res_repo->getAll($skill_id, $tref_id);
68  $resources_of_level = [];
69  foreach ($all_resources as $lid => $level) {
70  foreach ($level as $resource) {
71  if ($lid == $level_id) {
72  $resources_of_level[] = $resource;
73  }
74  }
75  }
76 
77  return $resources_of_level;
78  }
79 
80  public function setResource(
81  int $skill_id,
82  int $tref_id,
83  int $level_id,
84  int $rep_ref_id,
85  bool $imparting,
86  bool $trigger
87  ): void {
88  $this->skill_res_repo->addOrUpdate($skill_id, $tref_id, $level_id, $rep_ref_id, $imparting, $trigger);
89  }
90 
91  public function setResourceAsSuggested(
92  int $skill_id,
93  int $tref_id,
94  int $level_id,
95  int $rep_ref_id
96  ): void {
97  $this->skill_res_repo->updateImparting($skill_id, $tref_id, $level_id, $rep_ref_id, true);
98  }
99 
100  public function setResourceAsNotSuggested(
101  int $skill_id,
102  int $tref_id,
103  int $level_id,
104  int $rep_ref_id
105  ): void {
106  $this->skill_res_repo->updateImparting($skill_id, $tref_id, $level_id, $rep_ref_id, false);
107  }
108 
109  public function setResourceAsTrigger(
110  int $skill_id,
111  int $tref_id,
112  int $level_id,
113  int $rep_ref_id
114  ): void {
115  $obj_id = \ilObject::_lookupObjId($rep_ref_id);
116  $obj_type = \ilObject::_lookupType($obj_id);
117  if (!\ilObjectLP::isSupportedObjectType($obj_type)) {
118  return;
119  }
120  $this->skill_res_repo->updateTrigger($skill_id, $tref_id, $level_id, $rep_ref_id, true);
121  }
122 
123  public function setResourceAsNoTrigger(
124  int $skill_id,
125  int $tref_id,
126  int $level_id,
127  int $rep_ref_id
128  ): void {
129  $this->skill_res_repo->updateTrigger($skill_id, $tref_id, $level_id, $rep_ref_id, false);
130  }
131 
132  public function removeResource(
133  int $skill_id,
134  int $tref_id,
135  int $level_id,
136  int $rep_ref_id
137  ): void {
138  $this->skill_res_repo->remove($skill_id, $tref_id, $level_id, $rep_ref_id);
139  }
140 
141  public function removeResourcesForSkill(int $skill_node_id, bool $is_reference = false): void
142  {
143  $this->skill_res_repo->removeForSkill($skill_node_id, $is_reference);
144  }
145 
146  public function isLevelTooLow(int $tref_id, array $skill_levels, array $profile_levels, array $actual_levels): bool
147  {
148  $too_low = true;
149 
150  foreach ($skill_levels as $v) {
151  $v["id"] = (int) $v["id"];
152  $v["skill_id"] = (int) $v["skill_id"];
153  foreach ($profile_levels as $pl) {
154  if ($pl->getLevelId() === $v["id"] &&
155  $pl->getBaseSkillId() === $v["skill_id"]) {
156  $too_low = true;
157  }
158  }
159 
160  if ($actual_levels[$v["skill_id"]][$tref_id] == $v["id"]) {
161  $too_low = false;
162  }
163  }
164  return $too_low;
165  }
166 
170  public function determineCurrentTargetLevel(array $skill_levels, array $profile_levels): int
171  {
172  $target_level = 0;
173  foreach ($skill_levels as $l) {
174  $l["id"] = (int) $l["id"];
175  $l["skill_id"] = (int) $l["skill_id"];
176  foreach ($profile_levels as $pl) {
177  if ($pl->getLevelId() === $l["id"] &&
178  $pl->getBaseSkillId() === $l["skill_id"]) {
179  $target_level = $l["id"];
180  }
181  }
182  }
183 
184  return $target_level;
185  }
186 
191  public function getSuggestedResources(int $skill_id, int $tref_id, array $skill_levels, array $profile_levels): array
192  {
193  $target_level = $this->determineCurrentTargetLevel($skill_levels, $profile_levels);
194  $target_level_order_nr = $this->level_repo->lookupLevelNumber($target_level);
195  $resources = $this->getResources($skill_id, $tref_id);
196  $imp_resources = [];
197  foreach ($resources as $level) {
198  foreach ($level as $r) {
199  $res_level_order_nr = $this->level_repo->lookupLevelNumber($r->getLevelId());
200  if ($r->getImparting() &&
201  $target_level_order_nr >= $res_level_order_nr) {
202  $imp_resources[$res_level_order_nr . "_" . $r->getLevelId()][] = $r;
203  }
204  }
205  }
206 
207  ksort($imp_resources);
208  return $imp_resources;
209  }
210 
214  public function getTriggerLevelsForRefId(int $rep_ref_id): array
215  {
216  return $this->skill_res_repo->getTriggerLevelsForRefId($rep_ref_id);
217  }
218 
222  public static function getUsageInfo(array $a_cskill_ids): array
223  {
224  global $DIC;
225 
226  $usage_manager = $DIC->skills()->internal()->manager()->getUsageManager();
227 
228  return $usage_manager->getUsageInfoGeneric(
229  $a_cskill_ids,
231  "skl_skill_resource",
232  "rep_ref_id",
233  "base_skill_id"
234  );
235  }
236 }
determineCurrentTargetLevel(array $skill_levels, array $profile_levels)
$resources
Definition: ltiservices.php:68
setResourceAsNoTrigger(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id)
static isSupportedObjectType(string $type)
getSuggestedResources(int $skill_id, int $tref_id, array $skill_levels, array $profile_levels)
setResourceAsNotSuggested(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
removeResourcesForSkill(int $skill_node_id, bool $is_reference=false)
getResourcesOfLevel(int $skill_id, int $tref_id, int $level_id)
static _lookupObjId(int $ref_id)
global $DIC
Definition: feed.php:28
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getUsageInfo(array $a_cskill_ids)
Get title of an assigned item.int, tref_id: int}[] $a_cskill_ids array of common skill idsarray<strin...
setResourceAsSuggested(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(SkillResourceDBRepository $skill_res_repo=null, \ilSkillLevelRepository $level_repo=null)
isLevelTooLow(int $tref_id, array $skill_levels, array $profile_levels, array $actual_levels)
removeResource(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id)
setResource(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id, bool $imparting, bool $trigger)
static _lookupType(int $id, bool $reference=false)
Get info on usages of skills.
setResourceAsTrigger(int $skill_id, int $tref_id, int $level_id, int $rep_ref_id)
$r