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