ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
class.SkillDeletionManager.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
22 namespace ILIAS\Skill\Node;
23 
31 
37 {
45  protected \ilSkillTreeRepository $tree_repo;
46  protected \ilSkillLevelRepository $level_repo;
47  protected \ilSkillUserLevelRepository $user_level_repo;
48  protected \ilAppEventHandler $event_handler;
49 
50  public function __construct(
51  SkillTreeManager $tree_manager = null,
52  PersonalSkillManager $personal_manager = null,
53  AssignedMaterialManager $material_manager = null,
54  SkillProfileManager $profile_manager = null,
55  SkillProfileCompletionManager $profile_completion_manager = null,
56  SkillResourcesManager $resources_manager = null,
57  SkillUsageManager $usage_manager = null,
58  \ilSkillTreeRepository $tree_repo = null,
59  \ilSkillLevelRepository $level_repo = null,
60  \ilSkillUserLevelRepository $user_level_repo = null,
61  \ilAppEventHandler $event_handler = null,
62  ) {
63  global $DIC;
64 
65  $this->tree_manager = ($tree_manager) ?: $DIC->skills()->internal()->manager()->getTreeManager();
66  $this->personal_manager = ($personal_manager) ?: $DIC->skills()->internal()->manager()->getPersonalSkillManager();
67  $this->material_manager = ($material_manager) ?: $DIC->skills()->internal()->manager()->getAssignedMaterialManager();
68  $this->profile_manager = ($profile_manager) ?: $DIC->skills()->internal()->manager()->getProfileManager();
69  $this->profile_completion_manager = ($profile_completion_manager) ?: $DIC->skills()->internal()->manager()->getProfileCompletionManager();
70  $this->resources_manager = ($resources_manager) ?: $DIC->skills()->internal()->manager()->getResourceManager();
71  $this->usage_manager = ($usage_manager) ?: $DIC->skills()->internal()->manager()->getUsageManager();
72  $this->tree_repo = ($tree_repo) ?: $DIC->skills()->internal()->repo()->getTreeRepo();
73  $this->level_repo = ($level_repo) ?: $DIC->skills()->internal()->repo()->getLevelRepo();
74  $this->user_level_repo = ($user_level_repo) ?: $DIC->skills()->internal()->repo()->getUserLevelRepo();
75  $this->event_handler = ($event_handler) ?: $DIC->event();
76  }
77 
78  public function deleteTree(int $node_id): void
79  {
80  if ($node_id != \ilTree::POS_FIRST_NODE) {
81  $tree = $this->tree_repo->getTreeForNodeId($node_id);
82  $tree_obj = $this->tree_manager->getTree($tree->getTreeId());
83 
84  // delete competence profiles of tree
85  $tree_profiles = $this->profile_manager->getProfilesForSkillTree($tree->getTreeId());
86  foreach ($tree_profiles as $profile) {
87  $this->profile_manager->delete($profile->getId());
88  $this->profile_completion_manager->deleteEntriesForProfile($profile->getId());
89  }
90 
91  $this->deleteNode($node_id, $tree);
92  $this->tree_manager->deleteTree($tree_obj);
93  }
94  }
95 
96  public function deleteNode(int $node_id, \ilSkillTree $tree = null): void
97  {
98  if ($node_id != \ilTree::POS_FIRST_NODE || $node_id !== 0) {
99  if (!$tree) {
100  $tree = $this->tree_repo->getTreeForNodeId($node_id);
101  }
102  $obj = \ilSkillTreeNodeFactory::getInstance($node_id);
103  $node_data = $tree->getNodeData($node_id);
104  if (is_object($obj)) {
105  $obj_type = $obj->getType();
106  switch ($obj_type) {
107  case "skrt":
108  $this->deleteSkillRoot($obj->getId(), $tree);
109  break;
110  case "skll":
111  $this->deleteSkill($obj->getId());
112  break;
113  case "scat":
114  $this->deleteSkillCategory($obj->getId(), $tree);
115  break;
116  case "sktr":
117  $this->deleteSkillTemplateReference($obj->getId());
118  break;
119  case "sktp":
120  $this->deleteSkillTemplate($obj->getId());
121  break;
122  case "sctp":
123  $this->deleteSkillCategoryTemplate($obj->getId(), $tree);
124  break;
125  }
126  $obj->delete();
127  }
128  if ($tree->isInTree($node_id)) {
129  $tree->deleteTree($node_data);
130  }
131  }
132  }
133 
134  protected function deleteSkillRoot(int $skrt_id, \ilSkillTree $tree): void
135  {
136  $childs = $tree->getChildsByTypeFilter(
137  $skrt_id,
138  ["skll", "scat", "sktp", "sctp", "sktr"]
139  );
140  foreach ($childs as $node) {
141  $this->deleteNode((int) $node["obj_id"], $tree);
142  }
143  }
144 
145  protected function deleteSkill(int $skll_id): void
146  {
147  $this->level_repo->deleteLevelsOfSkill($skll_id);
148  $this->user_level_repo->deleteUserLevelsOfSkill($skll_id);
149  $this->usage_manager->removeUsagesForSkill($skll_id);
150  $this->personal_manager->removePersonalSkillsForSkill($skll_id);
151  $this->material_manager->removeAssignedMaterialsForSkill($skll_id);
152  $this->profile_manager->deleteProfileLevelsForSkill($skll_id);
153  $this->resources_manager->removeResourcesForSkill($skll_id);
154  $this->event_handler->raise("components/ILIAS/Skill", "deleteSkill", ["node_id" => $skll_id, "is_reference" => false]);
155  }
156 
157  protected function deleteSkillCategory(int $scat_id, \ilSkillTree $tree): void
158  {
159  $childs = $tree->getChildsByTypeFilter(
160  $scat_id,
161  ["skll", "scat", "sktr"]
162  );
163  foreach ($childs as $node) {
164  $this->deleteNode((int) $node["obj_id"], $tree);
165  }
166 
167  $this->personal_manager->removePersonalSkillsForSkill($scat_id);
168  }
169 
170  protected function deleteSkillTemplateReference(int $sktr_id): void
171  {
172  $this->user_level_repo->deleteUserLevelsOfSkill($sktr_id, true);
173  $this->usage_manager->removeUsagesForSkill($sktr_id, true);
174  $this->personal_manager->removePersonalSkillsForSkill($sktr_id);
175  $this->material_manager->removeAssignedMaterialsForSkill($sktr_id, true);
176  $this->profile_manager->deleteProfileLevelsForSkill($sktr_id, true);
177  $this->resources_manager->removeResourcesForSkill($sktr_id, true);
178  $this->event_handler->raise("components/ILIAS/Skill", "deleteSkill", ["node_id" => $sktr_id, "is_reference" => true]);
179  }
180 
181  protected function deleteSkillTemplate(int $sktp_id): void
182  {
183  $this->level_repo->deleteLevelsOfSkill($sktp_id);
184  $this->user_level_repo->deleteUserLevelsOfSkill($sktp_id);
185  $this->usage_manager->removeUsagesForSkill($sktp_id);
186  $this->material_manager->removeAssignedMaterialsForSkill($sktp_id);
187  $this->profile_manager->deleteProfileLevelsForSkill($sktp_id);
188  $this->resources_manager->removeResourcesForSkill($sktp_id);
189  $this->event_handler->raise("components/ILIAS/Skill", "deleteSkill", ["node_id" => $sktp_id, "is_reference" => false]);
190 
191  foreach (\ilSkillTemplateReference::_lookupTrefIdsForTopTemplateId($sktp_id) as $tref_id) {
192  $this->deleteNode($tref_id);
193  }
194  }
195 
196  protected function deleteSkillCategoryTemplate(int $sctp_id, \ilSkillTree $tree): void
197  {
198  $childs = $tree->getChildsByTypeFilter(
199  $sctp_id,
200  ["sktp", "sctp"]
201  );
202  foreach ($childs as $node) {
203  $this->deleteNode((int) $node["obj_id"], $tree);
204  }
205 
206  foreach (\ilSkillTemplateReference::_lookupTrefIdsForTopTemplateId($sctp_id) as $tref_id) {
207  $this->deleteNode($tref_id);
208  }
209  }
210 
211  public function updateProfileCompletions(\ilSkillTree $tree): void
212  {
213  $tree_profiles = $this->profile_manager->getProfilesForSkillTree($tree->getTreeId());
214  foreach ($tree_profiles as $profile) {
215  $this->profile_completion_manager->writeCompletionEntryForAllAssignedUsersOfProfile($profile->getId());
216  }
217  }
218 }
Global event handler.
getChildsByTypeFilter($a_node_id, $a_types, $a_order="", $a_direction="ASC")
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...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(SkillTreeManager $tree_manager=null, PersonalSkillManager $personal_manager=null, AssignedMaterialManager $material_manager=null, SkillProfileManager $profile_manager=null, SkillProfileCompletionManager $profile_completion_manager=null, SkillResourcesManager $resources_manager=null, SkillUsageManager $usage_manager=null, \ilSkillTreeRepository $tree_repo=null, \ilSkillLevelRepository $level_repo=null, \ilSkillUserLevelRepository $user_level_repo=null, \ilAppEventHandler $event_handler=null,)
deleteSkillCategory(int $scat_id, \ilSkillTree $tree)
const POS_FIRST_NODE
deleteSkillRoot(int $skrt_id, \ilSkillTree $tree)
static _lookupTrefIdsForTopTemplateId(int $a_template_id)
deleteSkillCategoryTemplate(int $sctp_id, \ilSkillTree $tree)
SkillProfileCompletionManager $profile_completion_manager
global $DIC
Definition: shib_login.php:25
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
deleteNode(int $node_id, \ilSkillTree $tree=null)