ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
class.ContainerSkillManager.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
22 namespace ILIAS\Container\Skills;
23 
25 
30 {
31  protected int $cont_obj_id;
32  protected int $cont_ref_id;
39  protected \ilSkillManagementSettings $skmg_settings;
40 
41  public function __construct(
42  int $cont_obj_id,
43  int $cont_ref_id,
44  ContainerSkillDBRepository $cont_skill_repo = null,
45  ContainerMemberSkillDBRepository $cont_member_skill_repo = null,
46  SkillService\SkillTreeService $tree_service = null,
47  SkillService\SkillProfileService $profile_service = null,
48  SkillService\SkillPersonalService $personal_service = null,
49  SkillInternalFactoryService $factory_service = null,
50  \ilSkillManagementSettings $skmg_settings = null
51  ) {
52  global $DIC;
53 
54  $this->cont_obj_id = $cont_obj_id;
55  $this->cont_ref_id = $cont_ref_id;
56  $this->cont_skill_repo = ($cont_skill_repo)
57  ?: $DIC->skills()->internalContainer()->repo()->getContainerSkillRepo();
58  $this->cont_member_skill_repo = ($cont_member_skill_repo)
59  ?: $DIC->skills()->internalContainer()->repo()->getContainerMemberSkillRepo();
60  $this->tree_service = ($tree_service) ?: $DIC->skills()->tree();
61  $this->profile_service = ($profile_service) ?: $DIC->skills()->profile();
62  $this->personal_service = ($personal_service) ?: $DIC->skills()->personal();
63  $this->factory_service = ($factory_service) ?: $DIC->skills()->internalContainer()->factory();
64  $this->skmg_settings = ($skmg_settings) ?: new \ilSkillManagementSettings();
65  }
66 
70 
71  public function addSkillForContainer(int $skill_id, int $tref_id): void
72  {
73  $this->cont_skill_repo->add($this->cont_obj_id, $skill_id, $tref_id);
74  }
75 
76  public function removeSkillFromContainer(int $skill_id, int $tref_id): void
77  {
78  $this->cont_skill_repo->remove($this->cont_obj_id, $skill_id, $tref_id);
79  }
80 
84  public function getSkillsForContainerOrdered(): array
85  {
86  $skills_as_array = [];
87  foreach ($this->getSkillsForContainer() as $skill) {
88  $skills_as_array[$skill->getBaseSkillId() . "-" . $skill->getTrefId()] = [
89  "skill_id" => $skill->getBaseSkillId(),
90  "tref_id" => $skill->getTrefId()
91  ];
92  }
93 
94  $vtree = $this->tree_service->getGlobalVirtualSkillTree();
95  $skills_ordered = $vtree->getOrderedNodeset($skills_as_array, "skill_id", "tref_id");
96 
97  $skills_obj_ordered = [];
98  foreach ($skills_ordered as $s) {
99  $skills_obj_ordered[] = $this->factory_service->containerSkill()->skill(
100  $s["skill_id"],
101  $s["tref_id"],
102  $this->cont_obj_id
103  );
104  }
105 
106  return $skills_obj_ordered;
107  }
108 
112  public function getSkillsForContainer(): array
113  {
114  return $this->cont_skill_repo->getAll($this->cont_obj_id);
115  }
116 
117 
121 
122  public function addMemberSkillForContainer(int $user_id, int $skill_id, int $tref_id, int $level_id): void
123  {
124  $this->cont_member_skill_repo->add($this->cont_obj_id, $user_id, $skill_id, $tref_id, $level_id);
125  }
126 
127  public function removeMemberSkillFromContainer(int $user_id, int $skill_id, int $tref_id): void
128  {
129  $this->cont_member_skill_repo->remove($this->cont_obj_id, $user_id, $skill_id, $tref_id);
130  }
131 
132  public function removeAllMemberSkillsFromContainer(int $user_id): void
133  {
135  $user_id,
136  $this->cont_obj_id,
137  false,
138  (string) $this->cont_obj_id
139  );
140 
141  $this->cont_member_skill_repo->removeAll($this->cont_obj_id, $user_id);
142  }
143 
144  public function publishMemberSkills(int $user_id): bool
145  {
147  $user_id,
148  $this->cont_obj_id,
149  false,
150  (string) $this->cont_obj_id
151  );
152 
153  foreach ($this->getMemberSkillsForContainer($user_id) as $l) {
154  $changed = true;
156  $l->getLevelId(),
157  $user_id,
159  $l->getTrefId(),
161  false,
162  false,
163  (string) $this->cont_obj_id
164  );
165 
166  if ($l->getTrefId() > 0) {
167  $this->personal_service->addPersonalSkill($user_id, $l->getTrefId());
168  } else {
169  $this->personal_service->addPersonalSkill($user_id, $l->getBaseSkillId());
170  }
171  }
172 
173  //write profile completion entries if fulfilment status has changed
174  $this->profile_service->writeCompletionEntryForAllProfiles($user_id);
175 
176  $this->cont_member_skill_repo->publish($this->cont_obj_id, $user_id);
177 
178  return $changed;
179  }
180 
181  public function getPublished(int $user_id): bool
182  {
183  return $this->cont_member_skill_repo->getPublished($this->cont_obj_id, $user_id);
184  }
185 
190  {
191  $skill_levels = array_map(static function (ContainerMemberSkill $a): array {
192  return ["level_id" => $a->getLevelId(), "skill_id" => $a->getBaseSkillId(), "tref_id" => $a->getTrefId(),
193  "published" => $a->getPublished()];
194  }, $this->getMemberSkillsForContainer($user_id));
195 
196  $vtree = $this->tree_service->getGlobalVirtualSkillTree();
197  $skill_levels_ordered = $vtree->getOrderedNodeset($skill_levels, "skill_id", "tref_id");
198 
199  $skill_levels_obj_ordered = [];
200  foreach ($skill_levels_ordered as $s) {
201  $skill_levels_obj_ordered[] = $this->factory_service->containerSkill()->memberSkill(
202  $this->cont_obj_id,
203  $user_id,
204  $s["skill_id"],
205  $s["tref_id"],
206  $s["level_id"],
207  $s["published"]
208  );
209  }
210 
211  return $skill_levels_obj_ordered;
212  }
213 
217  public function getMemberSkillsForContainer(int $user_id): array
218  {
219  return $this->cont_member_skill_repo->getAll($this->cont_obj_id, $user_id);
220  }
221 
222  public function getMemberSkillLevel(int $user_id, int $skill_id, int $tref_id): ?int
223  {
224  return $this->cont_member_skill_repo->getLevel($this->cont_obj_id, $user_id, $skill_id, $tref_id);
225  }
226 
227 
231 
235  public function getSkillsForTableGUI(): array
236  {
237  // Get single and profile skills and DO NOT remove multiple occurrences when merging
238 
239  $skills = array_merge($this->getSingleSkills(), $this->getProfileSkills());
240 
241  $skills_as_array = [];
242  foreach ($skills as $s) {
243  $skills_as_array[] = [
244  "base_skill_id" => $s->getBaseSkillId(),
245  "tref_id" => $s->getTrefId(),
246  "title" => $s->getTitle(),
247  "profile_title" => ($s->getProfile()) ? $s->getProfile()->getTitle() : null
248  ];
249  }
250 
251  // order skills per virtual skill tree
252  $vtree = $this->tree_service->getGlobalVirtualSkillTree();
253  $skills = $vtree->getOrderedNodeset($skills_as_array, "base_skill_id", "tref_id");
254 
255  return $skills;
256  }
257 
261  public function getSkillsForPresentationGUI(): array
262  {
263  // Get single and profile skills and DO remove multiple occurrences when merging
264 
265  $s_skills = [];
266  foreach ($this->getSingleSkills() as $s) {
267  $s_skills[$s->getBaseSkillId() . "-" . $s->getTrefId()] = $s;
268  }
269 
270  $p_skills = [];
271  foreach ($this->getProfileSkills() as $ps) {
272  $p_skills[$ps->getBaseSkillId() . "-" . $ps->getTrefId()] = $ps;
273  }
274 
275  $skills = array_merge($s_skills, $p_skills);
276 
277  return $skills;
278  }
279 
283  protected function getSingleSkills(): array
284  {
285  $s_skills = array_map(function (ContainerSkill $v): ContainerSkill {
286  return $this->factory_service->containerSkill()->skill(
287  $v->getBaseSkillId(),
288  $v->getTrefId(),
291  );
292  }, $this->getSkillsForContainer());
293 
294  return $s_skills;
295  }
296 
300  protected function getProfileSkills(): array
301  {
302  $cont_member_role_id = \ilParticipants::getDefaultMemberRole($this->cont_ref_id);
303  $p_skills = [];
304  // Global skills
305  if ($this->skmg_settings->getLocalAssignmentOfProfiles()) {
306  foreach ($this->profile_service->getGlobalProfilesOfRole($cont_member_role_id) as $gp) {
307  $sklvs = $this->profile_service->getSkillLevels($gp->getId());
308  foreach ($sklvs as $s) {
309  $p_skills[] = $this->factory_service->containerSkill()->skill(
310  $s->getBaseSkillId(),
311  $s->getTrefId(),
313  \ilBasicSkill::_lookupTitle($s->getBaseSkillId(), $s->getTrefId()),
314  $gp
315  );
316  }
317  }
318  }
319 
320  // Local skills
321  if ($this->skmg_settings->getAllowLocalProfiles()) {
322  foreach ($this->profile_service->getLocalProfilesOfRole($cont_member_role_id) as $lp) {
323  $sklvs = $this->profile_service->getSkillLevels($lp->getId());
324  foreach ($sklvs as $s) {
325  $p_skills[] = $this->factory_service->containerSkill()->skill(
326  $s->getBaseSkillId(),
327  $s->getTrefId(),
329  \ilBasicSkill::_lookupTitle($s->getBaseSkillId(), $s->getTrefId()),
330  $lp
331  );
332  }
333  }
334  }
335 
336  return $p_skills;
337  }
338 }
ContainerMemberSkillDBRepository $cont_member_skill_repo
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _lookupTitle(int $a_obj_id, int $a_tref_id=0)
static removeAllUserSkillLevelStatusOfObject(int $a_user_id, int $a_trigger_obj_id, bool $a_self_eval=false, string $a_unique_identifier="")
static getDefaultMemberRole(int $a_ref_id)
removeMemberSkillFromContainer(int $user_id, int $skill_id, int $tref_id)
addMemberSkillForContainer(int $user_id, int $skill_id, int $tref_id, int $level_id)
global $DIC
Definition: shib_login.php:25
static writeUserSkillLevelStatus(int $a_level_id, int $a_user_id, int $a_trigger_ref_id, int $a_tref_id=0, int $a_status=ilBasicSkill::ACHIEVED, bool $a_force=false, bool $a_self_eval=false, string $a_unique_identifier="", float $a_next_level_fulfilment=0.0, string $trigger_user_id="")
getMemberSkillLevel(int $user_id, int $skill_id, int $tref_id)
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
__construct(int $cont_obj_id, int $cont_ref_id, ContainerSkillDBRepository $cont_skill_repo=null, ContainerMemberSkillDBRepository $cont_member_skill_repo=null, SkillService\SkillTreeService $tree_service=null, SkillService\SkillProfileService $profile_service=null, SkillService\SkillPersonalService $personal_service=null, SkillInternalFactoryService $factory_service=null, \ilSkillManagementSettings $skmg_settings=null)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...