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