ILIAS  trunk Revision v11.0_alpha-1713-gd8962da2f67
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
class.SkillDeletionManager.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 namespace ILIAS\Skill\Node;
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(
50  ?SkillTreeManager $tree_manager = null,
51  ?PersonalSkillManager $personal_manager = null,
52  ?AssignedMaterialManager $material_manager = null,
53  ?SkillProfileManager $profile_manager = null,
54  ?SkillProfileCompletionManager $profile_completion_manager = null,
55  ?SkillResourcesManager $resources_manager = null,
56  ?SkillUsageManager $usage_manager = null,
57  ?\ilSkillTreeRepository $tree_repo = null,
58  ?\ilSkillLevelRepository $level_repo = null,
59  ?\ilSkillUserLevelRepository $user_level_repo = null,
60  ?\ilAppEventHandler $event_handler = null,
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  }
101  $obj = \ilSkillTreeNodeFactory::getInstance($node_id);
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 }
Global event handler.
getChildsByTypeFilter($a_node_id, $a_types, $a_order="", $a_direction="ASC")
Skill tree.
Interface ilSkillLevelRepository.
Interface ilSkillUserLevelRepository.
deleteSkillCategory(int $scat_id, \ilSkillTree $tree)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
const POS_FIRST_NODE
deleteSkillRoot(int $skrt_id, \ilSkillTree $tree)
static _lookupTrefIdsForTopTemplateId(int $a_template_id)
deleteNode(int $node_id, ?\ilSkillTree $tree=null)
deleteSkillCategoryTemplate(int $sctp_id, \ilSkillTree $tree)
SkillProfileCompletionManager $profile_completion_manager
global $DIC
Definition: shib_login.php:22
__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,)