ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
class.SkillProfileManager.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
22 namespace ILIAS\Skill\Profile;
23 
25 
30 {
35  protected \ilRbacReview $rbac_review;
36  protected \ilLanguage $lng;
37 
38  public function __construct(
39  SkillProfileDBRepository $profile_repo = null,
40  SkillProfileLevelsDBRepository $profile_levels_repo = null,
41  SkillProfileUserDBRepository $profile_user_repo = null,
42  SkillProfileRoleDBRepository $profile_role_repo = null
43  ) {
44  global $DIC;
45 
46  $this->profile_repo = ($profile_repo) ?: $DIC->skills()->internal()->repo()->getProfileRepo();
47  $this->profile_levels_repo = ($profile_levels_repo) ?: $DIC->skills()->internal()->repo()->getProfileLevelsRepo();
48  $this->profile_user_repo = ($profile_user_repo) ?: $DIC->skills()->internal()->repo()->getProfileUserRepo();
49  $this->profile_role_repo = ($profile_role_repo) ?: $DIC->skills()->internal()->repo()->getProfileRoleRepo();
50  $this->rbac_review = $DIC->rbac()->review();
51  $this->lng = $DIC->language();
52  }
53 
57  public function getProfile(int $profile_id): SkillProfile
58  {
59  return $this->profile_repo->get($profile_id);
60  }
61 
62  public function createProfile(SkillProfile $profile): SkillProfile
63  {
64  // profile
65  $new_profile = $this->profile_repo->createProfile($profile);
66 
67  return $new_profile;
68  }
69 
70  public function updateProfile(SkillProfile $profile): SkillProfile
71  {
72  // profile
73  $updated_profile = $this->profile_repo->updateProfile($profile);
74 
75  return $updated_profile;
76  }
77 
78  public function delete(int $profile_id): void
79  {
80  $this->deleteProfile($profile_id);
81  $this->deleteProfileLevels($profile_id);
82  $this->deleteProfileUsers($profile_id);
83  $this->deleteProfileRoles($profile_id);
84  }
85 
86  protected function deleteProfile(int $profile_id): void
87  {
88  $this->profile_repo->deleteProfile($profile_id);
89  }
90 
91  protected function deleteProfileLevels(int $profile_id): void
92  {
93  $this->profile_levels_repo->deleteAllForProfile($profile_id);
94  }
95 
96  public function deleteProfileLevelsForSkill(int $skill_node_id, bool $is_reference = false): void
97  {
98  $this->profile_levels_repo->deleteAllForSkill($skill_node_id, $is_reference);
99  }
100 
101  protected function deleteProfileUsers(int $profile_id): void
102  {
103  $this->profile_user_repo->deleteProfileUsers($profile_id);
104  }
105 
106  protected function deleteProfileRoles(int $profile_id): void
107  {
108  $this->profile_role_repo->deleteProfileRoles($profile_id);
109  }
110 
111  public function deleteProfilesFromObject(int $ref_id): void
112  {
113  $this->profile_repo->deleteProfilesFromObject($ref_id);
114  }
115 
119  public function getSkillLevels(int $profile_id): array
120  {
121  $levels = $this->profile_levels_repo->getAll($profile_id);
122  usort($levels, static function (SkillProfileLevel $level_a, SkillProfileLevel $level_b): int {
123  return $level_a->getOrderNr() <=> $level_b->getOrderNr();
124  });
125 
126  return $levels;
127  }
128 
129  public function getSkillLevel(int $profile_id, int $base_skill_id, int $tref_id): SkillProfileLevel
130  {
131  $level = $this->profile_levels_repo->get($profile_id, $base_skill_id, $tref_id);
132  return $level;
133  }
134 
135  public function addSkillLevel(SkillProfileLevel $skill_level_obj): void
136  {
137  $this->profile_levels_repo->createOrUpdate($skill_level_obj);
138  }
139 
140  public function updateSkillLevel(SkillProfileLevel $skill_level_obj): void
141  {
142  $this->profile_levels_repo->createOrUpdate($skill_level_obj);
143  }
144 
145  public function removeSkillLevel(SkillProfileLevel $skill_level_obj): void
146  {
147  $this->profile_levels_repo->delete($skill_level_obj);
148  }
149 
150  public function updateSkillOrder(int $profile_id, array $order): void
151  {
152  asort($order);
153 
154  $this->profile_levels_repo->updateSkillOrder($profile_id, $order);
155  }
156 
157  public function fixSkillOrderNumbering(int $profile_id): void
158  {
159  $this->profile_levels_repo->fixSkillOrderNumbering($profile_id);
160  }
161 
162  public function getMaxLevelOrderNr(int $profile_id): int
163  {
164  $max = $this->profile_levels_repo->getMaxOrderNr($profile_id);
165  return $max;
166  }
167 
171  public function getProfilesForAllSkillTrees(): array
172  {
173  $profiles = $this->profile_repo->getProfilesForAllSkillTrees();
174  return $profiles;
175  }
176 
180  public function getProfilesForSkillTree(int $skill_tree_id): array
181  {
182  $profiles = $this->profile_repo->getProfilesForSkillTree($skill_tree_id);
183  return $profiles;
184  }
185 
189  public function getAllGlobalProfiles(): array
190  {
191  $profiles = $this->profile_repo->getAllGlobalProfiles();
192  return $profiles;
193  }
194 
198  public function getLocalProfilesForObject(int $ref_id): array
199  {
200  $profiles = $this->profile_repo->getLocalProfilesForObject($ref_id);
201  return $profiles;
202  }
203 
204  public function lookupTitle(int $profile_id): string
205  {
206  $title = $this->profile_repo->lookup($profile_id, "title");
207  return $title;
208  }
209 
210  public function lookupRefId(int $profile_id): int
211  {
212  $ref_id = $this->profile_repo->lookup($profile_id, "ref_id");
213  return (int) $ref_id;
214  }
215 
219  public function updateRefIdAfterImport(int $profile_id, int $new_ref_id): void
220  {
221  $this->profile_repo->updateRefIdAfterImport($profile_id, $new_ref_id);
222  }
223 
224  public function getTreeId(int $profile_id): int
225  {
226  $tree_id = $this->profile_repo->getTreeId($profile_id);
227  return $tree_id;
228  }
229 
233 
238  public function getAssignments(int $profile_id): array
239  {
240  $assignments = [];
241 
242  $users = $this->getUserAssignments($profile_id);
243  $roles = $this->getRoleAssignments($profile_id);
244  $assignments = array_merge($users, $roles);
245 
246  return $assignments;
247  }
248 
252  public function getUserAssignments(int $profile_id): array
253  {
254  $lng = $this->lng;
255 
256  $users = $this->profile_user_repo->get($profile_id);
258  $users_as_obj = [];
259  foreach ($users as $u) {
260  $u["user_id"] = (int) $u["user_id"];
261  $u["profile_id"] = (int) $u["profile_id"];
262  $name = \ilUserUtil::getNamePresentation($u["user_id"]);
263 
264  $user_restructured = [
265  "name" => $name,
266  "id" => $u["user_id"]
267  ];
268 
269  $users_as_obj[] = $this->profile_user_repo->getFromRecord($user_restructured);
270  }
271 
272  return $users_as_obj;
273  }
274 
278  public function getAssignedUsersForRole(int $role_id): array
279  {
280  return $this->rbac_review->assignedUsers($role_id);
281  }
282 
286  public function getAssignedUserIdsIncludingRoleAssignments(int $profile_id): array
287  {
288  $all = [];
289  $users = $this->getUserAssignments($profile_id);
290  foreach ($users as $user) {
291  $all[] = $user->getId();
292  }
293 
294  $roles = $this->getRoleAssignments($profile_id);
295  foreach ($roles as $role) {
296  $role_users = $this->rbac_review->assignedUsers($role->getId());
297  foreach ($role_users as $user_id) {
298  if (!in_array($user_id, $all)) {
299  $all[] = $user_id;
300  }
301  }
302  }
303 
304  return $all;
305  }
306 
307  public function addUserToProfile(int $profile_id, int $user_id): void
308  {
309  $this->profile_user_repo->addUserToProfile($profile_id, $user_id);
310  }
311 
312  public function removeUserFromProfile(int $profile_id, int $user_id): void
313  {
314  $this->profile_user_repo->removeUserFromProfile($profile_id, $user_id);
315  }
316 
317  public function removeUserFromAllProfiles(int $user_id): void
318  {
319  $this->profile_user_repo->removeUserFromAllProfiles($user_id);
320  }
321 
325  public function getProfilesOfUser(int $user_id): array
326  {
327  $all_profiles = [];
328 
329  // competence profiles coming from user assignments
330  $user_profiles = $this->profile_user_repo->getProfilesOfUser($user_id);
331 
332  // competence profiles coming from role assignments
333  $role_profiles = [];
334  $user_roles = $this->rbac_review->assignedRoles($user_id);
335  foreach ($user_roles as $role) {
336  $profiles = $this->getGlobalProfilesOfRole($role);
337  foreach ($profiles as $profile) {
338  $role_profiles[] = $profile;
339  }
340  }
341 
342  // merge competence profiles and remove multiple occurrences
343 
345  $all_profiles = array_merge($user_profiles, $role_profiles);
347  $temp_profiles = [];
348  foreach ($all_profiles as $v) {
349  if (!isset($temp_profiles[$v->getId()])) {
350  $temp_profiles[$v->getId()] = $v;
351  }
352  }
353  $all_profiles = array_values($temp_profiles);
354  return $all_profiles;
355  }
356 
357  public function countUsers(int $profile_id): int
358  {
359  $count = $this->profile_user_repo->countUsers($profile_id);
360  return $count;
361  }
362 
366  public function getRoleAssignments(int $profile_id, bool $with_objects_in_trash = false): array
367  {
368  $lng = $this->lng;
369  $review = $this->rbac_review;
370 
371  $roles = $this->profile_role_repo->get($profile_id);
373  $roles_as_obj_without_trash = [];
375  $roles_as_obj_with_trash = [];
376  foreach ($roles as $r) {
377  $r["role_id"] = (int) $r["role_id"];
378  $r["profile_id"] = (int) $r["profile_id"];
379  $name = \ilObjRole::_getTranslation(\ilObjRole::_lookupTitle($r["role_id"]));
380  // get object of role
381  $obj_id = \ilObject::_lookupObjectId($review->getObjectReferenceOfRole($r["role_id"]));
382  $obj_title = \ilObject::_lookupTitle($obj_id);
383  $obj_type = \ilObject::_lookupType($obj_id);
384 
385  $role_restructured = [
386  "name" => $name,
387  "id" => $r["role_id"],
388  "object_title" => $obj_title,
389  "object_type" => $obj_type,
390  "object_id" => $obj_id
391  ];
392 
393  if (!$with_objects_in_trash && \ilObject::_hasUntrashedReference($obj_id)) {
394  $roles_as_obj_without_trash[] = $this->profile_role_repo->getRoleAssignmentFromRecord($role_restructured);
395  }
396  $roles_as_obj_with_trash[] = $this->profile_role_repo->getRoleAssignmentFromRecord($role_restructured);
397  }
398 
399  if ($with_objects_in_trash) {
400  return $roles_as_obj_with_trash;
401  }
402  return $roles_as_obj_without_trash;
403  }
404 
405  public function addRoleToProfile(int $profile_id, int $role_id): void
406  {
407  $this->profile_role_repo->addRoleToProfile($profile_id, $role_id);
408  }
409 
410  public function removeRoleFromProfile(int $profile_id, int $role_id): void
411  {
412  $this->profile_role_repo->removeRoleFromProfile($profile_id, $role_id);
413  }
414 
415  public function removeRoleFromAllProfiles(int $role_id): void
416  {
417  $this->profile_role_repo->removeRoleFromAllProfiles($role_id);
418  }
419 
424  public function getAllProfilesOfRole(int $role_id): array
425  {
426  $profiles = $this->profile_role_repo->getAllProfilesOfRole($role_id);
427  return $profiles;
428  }
429 
433  public function getGlobalProfilesOfRole(int $role_id): array
434  {
435  $profiles = $this->profile_role_repo->getGlobalProfilesOfRole($role_id);
436  return $profiles;
437  }
438 
442  public function getLocalProfilesOfRole(int $role_id): array
443  {
444  $profiles = $this->profile_role_repo->getLocalProfilesOfRole($role_id);
445  return $profiles;
446  }
447 
448  public function countRoles(int $profile_id): int
449  {
450  $count = $this->profile_role_repo->countRoles($profile_id);
451  return $count;
452  }
453 
457  public static function getUsageInfo(array $a_cskill_ids): array
458  {
459  global $DIC;
460 
461  $usage_manager = $DIC->skills()->internal()->manager()->getUsageManager();
462 
463  return $usage_manager->getUsageInfoGeneric(
464  $a_cskill_ids,
466  "skl_profile_level",
467  "profile_id",
468  "base_skill_id"
469  );
470  }
471 }
addSkillLevel(SkillProfileLevel $skill_level_obj)
updateRefIdAfterImport(int $profile_id, int $new_ref_id)
Update the old ref id with the new ref id after import.
static _hasUntrashedReference(int $obj_id)
checks whether an object has at least one reference that is not in trash
SkillProfileLevelsDBRepository $profile_levels_repo
$ref_id
Definition: ltiauth.php:66
static getNamePresentation( $a_user_id, bool $a_user_image=false, bool $a_profile_link=false, string $a_profile_back_link='', bool $a_force_first_lastname=false, bool $a_omit_login=false, bool $a_sortable=true, bool $a_return_data_array=false, $a_ctrl_path='ilpublicuserprofilegui')
Default behaviour is:
static _lookupTitle(int $obj_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getTranslation(string $a_role_title)
updateSkillLevel(SkillProfileLevel $skill_level_obj)
global $DIC
Definition: shib_login.php:25
static _lookupObjectId(int $ref_id)
removeRoleFromProfile(int $profile_id, int $role_id)
getAssignments(int $profile_id)
Get all assignments (users and roles)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
removeUserFromProfile(int $profile_id, int $user_id)
getAllProfilesOfRole(int $role_id)
Get global and local profiles of a role.
__construct(SkillProfileDBRepository $profile_repo=null, SkillProfileLevelsDBRepository $profile_levels_repo=null, SkillProfileUserDBRepository $profile_user_repo=null, SkillProfileRoleDBRepository $profile_role_repo=null)
removeSkillLevel(SkillProfileLevel $skill_level_obj)
getSkillLevel(int $profile_id, int $base_skill_id, int $tref_id)
static _lookupType(int $id, bool $reference=false)
Get info on usages of skills.
deleteProfileLevelsForSkill(int $skill_node_id, bool $is_reference=false)
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...
$r