ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
class.ilObjSkillTreeGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
31
39{
44 protected ilTabsGUI $tabs;
54 protected UIServices $ui;
59 protected int $requested_node_id = 0;
60 protected int $requested_tref_id = 0;
61 protected int $requested_templates_tree = 0;
62 protected string $requested_skexpand = "";
63 protected bool $requested_tmpmode = false;
64
68 protected array $requested_titles = [];
69
73 protected array $requested_node_ids = [];
74
75 protected string $requested_table_action = "";
76
80 protected array $requested_table_tree_ids = [];
81
88 public function __construct(
89 $a_data,
90 int $a_id,
91 bool $a_call_by_reference = true,
92 bool $a_prepare_output = true
93 ) {
94 global $DIC;
95
96 $this->ctrl = $DIC->ctrl();
97 $this->rbacsystem = $DIC->rbac()->system();
98 $this->error = $DIC["ilErr"];
99 $this->access = $DIC->access();
100 $this->tabs = $DIC->tabs();
101 $this->lng = $DIC->language();
102 $this->settings = $DIC->settings();
103 $this->tpl = $DIC["tpl"];
104 $this->toolbar = $DIC->toolbar();
105 $this->user = $DIC->user();
106 $ilCtrl = $DIC->ctrl();
107 $this->ui = $DIC->ui();
108 $this->main_tpl = $DIC->ui()->mainTemplate();
109 $this->locator = $DIC["ilLocator"];
110 $this->admin_gui_request = $DIC->skills()->internal()->gui()->admin_request();
111 $this->skill_ui_service = $DIC->skills()->ui();
112
113 $this->type = "skee";
114 parent::__construct($a_data, $a_id, $a_call_by_reference, false);
115
116 $this->lng->loadLanguageModule('skmg');
117
118 $this->skill_tree_repo = $DIC->skills()->internal()->repo()->getTreeRepo();
119 $this->skill_tree_factory = $DIC->skills()->internal()->factory()->tree();
120 $this->skill_tree = $this->skill_tree_factory->getTreeById($this->object->getId());
121
122 $ilCtrl->saveParameter($this, "node_id");
123
124 $this->tool_context = $DIC->globalScreen()->tool()->context();
125
126 $this->requested_node_id = $this->admin_gui_request->getNodeId();
127 $this->requested_tref_id = $this->admin_gui_request->getTrefId();
128 $this->requested_templates_tree = $this->admin_gui_request->getTemplatesTree();
129 $this->requested_skexpand = $this->admin_gui_request->getSkillExpand();
130 $this->requested_tmpmode = $this->admin_gui_request->getTemplateMode();
131 $this->requested_titles = $this->admin_gui_request->getTitles();
132 $this->requested_node_ids = $this->admin_gui_request->getNodeIds();
133 $this->requested_table_action = $this->admin_gui_request->getTableTreeAction();
134 $this->requested_table_tree_ids = $this->admin_gui_request->getTableTreeIds();
135 }
136
137 public function init(Service\SkillInternalManagerService $skill_manager): void
138 {
139 $this->skill_tree_manager = $skill_manager->getTreeManager();
140 $this->skill_tree_node_manager = $skill_manager->getTreeNodeManager($this->object->getId());
141 $this->skill_tree_access_manager = $skill_manager->getTreeAccessManager($this->object->getRefId());
142 $this->skill_management_access_manager = $skill_manager->getManagementAccessManager(
143 $this->skill_tree_manager->getSkillManagementRefId()
144 );
145 $this->skill_deletion_manager = $skill_manager->getDeletionManager();
146 $this->skill_usage_manager = $skill_manager->getUsageManager();
147 }
148
149 public function executeCommand(): void
150 {
153 $ilTabs = $this->tabs;
154
155 $next_class = $this->ctrl->getNextClass($this);
156 $cmd = $this->ctrl->getCmd();
157
158 $this->prepareOutput();
159 $this->showLocator();
160
161
162 if (!$this->skill_tree_access_manager->hasReadTreePermission()) {
163 $ilErr->raiseError($this->lng->txt('no_permission'), $ilErr->WARNING);
164 }
165
166 switch ($next_class) {
167 case 'ilskillrootgui':
168 if (!$this->skill_tree_access_manager->hasReadCompetencesPermission()) {
169 return;
170 }
171 $skrt_gui = new ilSkillRootGUI(
172 $this->skill_tree_node_manager,
173 $this->requested_node_id
174 );
175 $skrt_gui->setParentGUI($this);
176 $ret = $this->ctrl->forwardCommand($skrt_gui);
177 break;
178
179 case 'ilskillcategorygui':
180 if (!$this->skill_tree_access_manager->hasReadCompetencesPermission()) {
181 return;
182 }
183 $this->tabs_gui->activateTab("skills");
184 $scat_gui = new ilSkillCategoryGUI(
185 $this->skill_tree_node_manager,
186 $this->requested_node_id
187 );
188 $scat_gui->setParentGUI($this);
189 $this->showTree(false, $scat_gui, "listItems");
190 $ret = $this->ctrl->forwardCommand($scat_gui);
191 break;
192
193 case 'ilbasicskillgui':
194 if (!$this->skill_tree_access_manager->hasReadCompetencesPermission()) {
195 return;
196 }
197 $this->tabs_gui->activateTab("skills");
198 $skill_gui = new ilBasicSkillGUI(
199 $this->skill_tree_node_manager,
200 $this->requested_node_id
201 );
202 $skill_gui->setParentGUI($this);
203 $this->showTree(false, $skill_gui, "edit");
204 $ret = $this->ctrl->forwardCommand($skill_gui);
205 break;
206
207 case 'ilskilltemplatecategorygui':
208 if (!$this->skill_tree_access_manager->hasReadCompetencesPermission()) {
209 return;
210 }
211 $this->tabs_gui->activateTab("skill_templates");
212 $sctp_gui = new ilSkillTemplateCategoryGUI(
213 $this->skill_tree_node_manager,
214 $this->requested_node_id,
215 $this->requested_tref_id
216 );
217 $sctp_gui->setParentGUI($this);
218 $this->showTree(($this->requested_tref_id == 0), $sctp_gui, "listItems");
219 $ret = $this->ctrl->forwardCommand($sctp_gui);
220 break;
221
222 case 'ilbasicskilltemplategui':
223 if (!$this->skill_tree_access_manager->hasReadCompetencesPermission()) {
224 return;
225 }
226 $this->tabs_gui->activateTab("skill_templates");
227 $sktp_gui = new ilBasicSkillTemplateGUI(
228 $this->skill_tree_node_manager,
229 $this->requested_node_id,
230 $this->requested_tref_id
231 );
232 $sktp_gui->setParentGUI($this);
233 $this->showTree(($this->requested_tref_id == 0), $sktp_gui, "edit");
234 $ret = $this->ctrl->forwardCommand($sktp_gui);
235 break;
236
237 case 'ilskilltemplatereferencegui':
238 if (!$this->skill_tree_access_manager->hasReadCompetencesPermission()) {
239 return;
240 }
241 $this->tabs_gui->activateTab("skills");
242 $sktr_gui = new ilSkillTemplateReferenceGUI(
243 $this->skill_tree_node_manager,
244 $this->requested_tref_id
245 );
246 $sktr_gui->setParentGUI($this);
247 $this->showTree(false, $sktr_gui, "listItems");
248 $ret = $this->ctrl->forwardCommand($sktr_gui);
249 break;
250
251 case "ilskillprofilegui":
252 if (!$this->skill_tree_access_manager->hasReadProfilesPermission()) {
253 return;
254 }
255 $ilTabs->activateTab("profiles");
256 $skprof_gui = new ilSkillProfileGUI(
257 $this->skill_tree_access_manager,
258 $this->skill_tree->getTreeId()
259 );
260 $ret = $this->ctrl->forwardCommand($skprof_gui);
261 break;
262
263 case "ilskillprofileuploadhandlergui":
264 $skprof_upl_gui = new ilSkillProfileUploadHandlerGUI();
265 $ret = $this->ctrl->forwardCommand($skprof_upl_gui);
266 break;
267
268 case 'ilpermissiongui':
269 if (!$this->skill_tree_access_manager->hasEditTreePermissionsPermission()) {
270 return;
271 }
272 $this->tabs_gui->activateTab('permissions');
273 $perm_gui = new ilPermissionGUI($this);
274 $ret = $this->ctrl->forwardCommand($perm_gui);
275 break;
276
277 case "ilexportgui":
278 if (!$this->skill_tree_access_manager->hasEditTreeSettingsPermission()) {
279 return;
280 }
281 $this->tabs_gui->activateTab('export');
282 $exp_gui = new ilExportGUI($this);
283 $exp_gui->addFormat("xml");
284 //$exp_gui->addFormat("html", "", $this, "exportHTML");
285 $this->object->setType("skmg");
286 $ret = $this->ctrl->forwardCommand($exp_gui);
287 $this->object->setType("skee");
288 break;
289
290 default:
291 if (!$cmd || $cmd == 'view') {
292 $cmd = "editSkills";
293 }
294
295 if ($cmd == "showTree") {
296 $this->showTree((bool) $this->requested_templates_tree);
297 } else {
298 $this->$cmd();
299 }
300 break;
301 }
302 }
303
304 protected function showLocator(): void
305 {
308
310
312 "ilobjsystemfoldergui",
313 "ref_id",
315 );
316 $locator->addItem(
317 $this->lng->txt("administration"),
318 $this->ctrl->getLinkTargetByClass(array("iladministrationgui", "ilobjsystemfoldergui"), "")
319 );
320 $locator->addItem(
321 $this->lng->txt("obj_skmg"),
322 $this->getSkillManagementLink()
323 );
324
325 /*
326 if ($this->object && ($this->object->getRefId() != SYSTEM_FOLDER_ID && !$a_do_not_add_object)) {
327 $ilLocator->addItem(
328 $this->object->getTitle(),
329 $this->ctrl->getLinkTarget($this, "view")
330 );
331 }*/
332 }
333
334 protected function getSkillManagementLink(): string
335 {
336 $this->ctrl->clearParametersByClass("ilobjskillmanagementgui");
337 $this->ctrl->setParameterByClass(
338 "ilobjskillmanagementgui",
339 "ref_id",
340 $this->skill_tree_manager->getSkillManagementRefId()
341 );
342 return $this->ctrl->getLinkTargetByClass("ilobjskillmanagementgui", "");
343 }
344
345 protected function create(): void
346 {
349 $mtpl = $this->main_tpl;
350 $ui = $this->ui;
351
354 $lng->txt("back"),
355 $this->getSkillManagementLink()
356 );
357
358 $mtpl->setContent($ui->renderer()->render($this->initTreeForm()));
359 }
360
361 protected function edit(): void
362 {
364 $tabs->activateTab("settings");
365 $mtpl = $this->main_tpl;
366 $ui = $this->ui;
367
368 if (!$this->skill_tree_access_manager->hasEditTreeSettingsPermission()) {
369 return;
370 }
371
372 $mtpl->setContent($ui->renderer()->render($this->initTreeForm(true)));
373 }
374
375 public function initTreeForm(bool $edit = false): Form\Standard
376 {
377 $ui = $this->ui;
378 $f = $ui->factory();
381
382 $fields["title"] = $f->input()->field()->text($lng->txt("title"))->withRequired(true);
383 if ($edit) {
384 $fields["title"] = $fields["title"]->withValue($this->object->getTitle());
385 }
386
387 $fields["description"] = $f->input()->field()->textarea($lng->txt("description"));
388 if ($edit) {
389 $fields["description"] = $fields["description"]->withValue($this->object->getDescription());
390 }
391
392 // section
393 $section1 = $f->input()->field()->section($fields, $lng->txt("skmg_add_skill_tree"));
394
395 if ($edit) {
396 $form_action = $ctrl->getLinkTarget($this, "update");
397 } else {
398 $form_action = $ctrl->getLinkTarget($this, "save");
399 }
400 return $f->input()->container()->form()->standard($form_action, ["props" => $section1]);
401 }
402
403 public function save(): void
404 {
406 $form = $this->initTreeForm();
409 $tabs = $this->tabs;
411 $ui = $this->ui;
412
413 if ($request->getMethod() == "POST") {
414 $form = $form->withRequest($request);
415 $data = $form->getData();
416 if (isset($data["props"]) && is_array($data["props"])) {
417 $props = $data["props"];
418 $this->skill_tree_manager->createTree(
419 $props["title"],
420 $props["description"]
421 );
422 $this->main_tpl->setOnScreenMessage('info', $lng->txt("msg_obj_modified"), true);
423 } else {
424 $tpl->setContent($ui->renderer()->render($form));
427 $lng->txt("back"),
428 $this->getSkillManagementLink()
429 );
430 return;
431 }
432 }
433 $ctrl->redirectByClass("ilskillrootgui", "listSkills");
434 }
435
436 public function update(): void
437 {
439 $form = $this->initTreeForm();
442
443 if ($request->getMethod() == "POST") {
444 $form = $form->withRequest($request);
445 $data = $form->getData();
446 if (isset($data["props"]) && is_array($data["props"])) {
447 $props = $data["props"];
449 $obj = $this->object;
450 $this->skill_tree_manager->updateTree(
451 $obj,
452 $props["title"],
453 $props["description"]
454 );
455 $this->main_tpl->setOnScreenMessage('info', $lng->txt("msg_obj_modified"), true);
456 }
457 }
458 $ctrl->redirect($this, "edit");
459 }
460
461 public function delete(): void
462 {
464
465 $node_ids = [];
466 if ($this->requested_table_action === "deleteTrees"
467 && !empty($this->requested_table_tree_ids)
468 && $this->requested_table_tree_ids[0] === "ALL_OBJECTS"
469 ) {
470 $all_trees = $this->skill_tree_manager->getTrees();
471 foreach ($all_trees as $tree_obj) {
472 $tree = $this->skill_tree_factory->getTreeById($tree_obj->getId());
473 $node_ids[] = $tree->readRootId();
474 }
475 } elseif ($this->requested_table_action === "deleteTrees") {
476 $node_ids = array_map("intval", $this->requested_table_tree_ids);
477 }
478
479 $remaining_node_ids = [];
480 foreach ($node_ids as $id) {
481 $tree_id = $this->skill_tree_repo->getTreeIdForNodeId($id);
482 $tree_obj = $this->skill_tree_manager->getTree($tree_id);
483 if (!$this->skill_tree_access_manager->hasDeleteTreePermission($tree_obj->getRefId())) {
484 continue;
485 }
486 $remaining_node_ids[] = $id;
487 }
488
489 if (count($remaining_node_ids) != count($node_ids)) {
490 $this->tpl->setOnScreenMessage(GlobalTemplate::MESSAGE_TYPE_FAILURE, $this->lng->txt("no_permission"), true);
491 $this->ctrl->redirectByClass("ilskilltreeadmingui", "listTrees");
492 return;
493 }
494
495 $this->requested_node_ids = $remaining_node_ids;
496 $this->deleteNodes($this);
497 }
498
499 public function getAdminTabs(): void
500 {
502 $ilAccess = $this->access;
504
505
506 $this->tabs_gui->setBackTarget(
507 $lng->txt("skmg_skill_trees"),
508 $this->getSkillManagementLink()
509 );
510
511 if ($this->skill_tree_access_manager->hasReadTreePermission()) {
512 if ($this->skill_tree_access_manager->hasReadCompetencesPermission()) {
513 $this->tabs_gui->addTab(
514 "skills",
515 $lng->txt("skmg_skills"),
516 $this->ctrl->getLinkTarget($this, "editSkills")
517 );
518 $this->tabs_gui->addTab(
519 "skill_templates",
520 $lng->txt("skmg_skill_templates"),
521 $this->ctrl->getLinkTarget($this, "editSkillTemplates")
522 );
523 }
524
525 if ($this->skill_tree_access_manager->hasReadProfilesPermission()) {
526 $this->tabs_gui->addTab(
527 "profiles",
528 $lng->txt("skmg_skill_profiles"),
529 $this->ctrl->getLinkTargetByClass("ilskillprofilegui")
530 );
531 }
532
533 if ($this->skill_tree_access_manager->hasEditTreeSettingsPermission()) {
534 $this->tabs_gui->addTab(
535 "settings",
536 $lng->txt("settings"),
537 $this->ctrl->getLinkTarget($this, "edit")
538 );
539 }
540
541 if ($this->skill_tree_access_manager->hasEditTreeSettingsPermission()) {
542 $this->tabs_gui->addTab(
543 "export",
544 $lng->txt("export"),
545 $this->ctrl->getLinkTargetByClass("ilexportgui", "")
546 );
547 }
548 }
549
550 if ($this->skill_tree_access_manager->hasEditTreePermissionsPermission()) {
551 $this->tabs_gui->addTab(
552 "permissions",
553 $lng->txt("perm_settings"),
554 $this->ctrl->getLinkTargetByClass('ilpermissiongui', "perm")
555 );
556 }
557 }
558
559 public function editSkills(): void
560 {
562 $ilTabs = $this->tabs;
564 $ilCtrl = $this->ctrl;
565
566 $ilTabs->activateTab("skills");
567
568 $ilCtrl->setParameterByClass(self::class, "node_id", $this->skill_tree->readRootId());
569 $ilCtrl->redirectByClass("ilskillrootgui", "listSkills");
570 }
571
572 public function saveAllTitles(bool $a_succ_mess = true): void
573 {
574 $ilCtrl = $this->ctrl;
576
577 if (!count($this->requested_titles) == 0) {
578 foreach ($this->requested_titles as $id => $title) {
580 if (is_object($node_obj)) {
581 // update title
583 }
584 }
585 if ($a_succ_mess) {
586 $this->main_tpl->setOnScreenMessage('success', $lng->txt("msg_obj_modified"), true);
587 }
588 }
589 $ilCtrl->redirect($this, "editSkills");
590 }
591
592 public function saveAllTemplateTitles(bool $a_succ_mess = true): void
593 {
594 $ilCtrl = $this->ctrl;
596
597 if (!count($this->requested_titles) == 0) {
598 foreach ($this->requested_titles as $id => $title) {
600 if (is_object($node_obj)) {
601 // update title
603 }
604 }
605 if ($a_succ_mess) {
606 $this->main_tpl->setOnScreenMessage('success', $lng->txt("msg_obj_modified"), true);
607 }
608 }
609 $ilCtrl->redirect($this, "editSkillTemplates");
610 }
611
612 public function expandAll(bool $a_redirect = true): void
613 {
614 $this->requested_skexpand = "";
615 $n_id = ($this->requested_node_id > 0)
616 ? $this->requested_node_id
617 : $this->skill_tree->readRootId();
618 $stree = $this->skill_tree->getSubTree($this->skill_tree->getNodeData($n_id));
619 $n_arr = [];
620 foreach ($stree as $n) {
621 $n_arr[] = $n["child"];
622 ilSession::set("skexpand", $n_arr);
623 }
624 $this->saveAllTitles(false);
625 }
626
627 public function collapseAll(bool $a_redirect = true): void
628 {
629 $this->requested_skexpand = "";
630 $n_id = ($this->requested_node_id > 0)
631 ? $this->requested_node_id
632 : $this->skill_tree->readRootId();
633 $stree = $this->skill_tree->getSubTree($this->skill_tree->getNodeData($n_id));
634 $old = ilSession::get("skexpand");
635 foreach ($stree as $n) {
636 if (in_array($n["child"], $old) && $n["child"] != $n_id) {
637 $k = array_search($n["child"], $old);
638 unset($old[$k]);
639 }
640 }
641 ilSession::set("skexpand", $old);
642 $this->saveAllTitles(false);
643 }
644
645 public function deleteNodes(object $a_gui): void
646 {
649 $ilCtrl = $this->ctrl;
650 $ilTabs = $this->tabs;
651
652 if (empty($this->requested_node_ids)) {
653 $tpl->setOnScreenMessage("info", $lng->txt("no_checkbox"), true);
654 $ilCtrl->redirectByClass("ilskilltreeadmingui", "listTrees");
655 }
656
657 $ilTabs->clearTargets();
658
659 // check usages
660 $mode = "";
661 $tree_ids = [];
662 $cskill_ids = [];
663 foreach ($this->requested_node_ids as $id) {
664 if (ilSkillTreeNode::_lookupType($id) == "skrt") {
665 if (!$this->skill_management_access_manager->hasCreateTreePermission()) {
666 return;
667 }
668 $mode = "tree";
669 $tree_node_id = $id;
670 $tree_ids[] = $tree_node_id;
671 }
672 if (in_array(ilSkillTreeNode::_lookupType($id), array("skll", "scat", "sktr"))) {
673 if ($mode == "templates") {
674 $tpl->setOnScreenMessage("failure", "Skill Deletion - type mismatch.", true);
675 $ilCtrl->redirectByClass("ilskilltreeadmingui", "listTrees");
676 }
677 $mode = "basic";
678 $skill_id = $id;
679 $tref_id = 0;
680 if (ilSkillTreeNode::_lookupType($id) == "sktr") {
682 $tref_id = $id;
683 }
684 $cskill_ids[] = array("skill_id" => $skill_id, "tref_id" => $tref_id);
685 }
686 if (in_array(ilSkillTreeNode::_lookupType($id), array("sktp", "sctp"))) {
687 if ($mode == "basic") {
688 $tpl->setOnScreenMessage("failure", "Skill Deletion - type mismatch.", true);
689 $ilCtrl->redirectByClass("ilskilltreeadmingui", "listTrees");
690 }
691 $mode = "templates";
692
694 $cskill_ids[] = array("skill_id" => $id, "tref_id" => $tref_id);
695 }
696 }
697 // for cats, skills and template references, get "real" usages
698 // for skill and category templates check usage in references
699 }
700
701 $usages = [];
702 if ($mode == "tree") {
703 $usages = $this->skill_usage_manager->getAllUsagesInfoOfTrees($tree_ids);
704 } elseif ($mode == "basic" || $mode == "templates") {
705 $usages = $this->skill_usage_manager->getAllUsagesInfoOfSubtrees($cskill_ids);
706 } else {
707 $tpl->setOnScreenMessage("failure", "Skill Deletion - type mismatch.", true);
708 $ilCtrl->redirectByClass("ilskilltreeadmingui", "listTrees");
709 }
710
711 $usage_html = "";
712 if (count($usages) > 0) {
713 foreach ($usages as $k => $usage) {
714 $usages_ui = $this->skill_ui_service->getUsagesUI($k, $usage, $mode);
715 $usage_html .= $usages_ui->render() . "<br/><br/>";
716 }
717 $ilCtrl->saveParameter($a_gui, "tmpmode");
718 }
719
720 // SAVE POST VALUES
721 ilSession::set("saved_post", $this->requested_node_ids);
722
723 $confirmation_gui = new ilConfirmationGUI();
724
725 $ilCtrl->setParameter($a_gui, "tmpmode", (int) $this->requested_tmpmode);
726 $a_form_action = $this->ctrl->getFormAction($a_gui);
727 $confirmation_gui->setFormAction($a_form_action);
728 if (count($usages) > 0) {
729 $confirmation_text = $this->lng->txt("skmg_delete_warning");
730 } else {
731 $confirmation_text = $this->lng->txt("info_delete_sure");
732 }
733 $confirmation_gui->setHeaderText($confirmation_text);
734
735 // Add items to delete
736 foreach ($this->requested_node_ids as $id) {
739 if ($mode == "tree") {
740 $tree_id = $this->skill_tree_repo->getTreeIdForNodeId($id);
741 $tree_obj = $this->skill_tree_manager->getTree($tree_id);
742 $obj_title = $tree_obj->getTitle();
743 } else {
744 $obj_title = (!in_array($node_obj->getType(), ["sktp", "sctp"]))
745 ? $node_obj->getTitle()
746 : $node_obj->getTitle() .
747 " (" .
748 $this->lng->txt("skmg_count_references") . " " .
750 ")";
751 }
752 $confirmation_gui->addItem(
753 "id[]",
754 (string) $node_obj->getId(),
755 $obj_title,
756 ilUtil::getImagePath("standard/icon_" . $node_obj->getType() . ".svg")
757 );
758 }
759 }
760
761 $confirmation_gui->setCancel($lng->txt("cancel"), "cancelDelete");
762 if ($mode == "tree") {
763 $confirmation_gui->setConfirm($lng->txt("confirm"), "confirmedDeleteTrees");
764 } else {
765 $confirmation_gui->setConfirm($lng->txt("confirm"), "confirmedDelete");
766 }
767
768 $tpl->setContent($confirmation_gui->getHTML() . $usage_html);
769 }
770
771 public function cancelDelete(): void
772 {
773 $this->ctrl->redirectByClass("ilobjskillmanagementgui", "");
774 }
775
776 public function confirmedDeleteTrees(): void
777 {
779
780 // delete all selected trees
781 foreach ($this->requested_node_ids as $id) {
782 $this->skill_deletion_manager->deleteTree($id);
783 }
784
785 // feedback
786 $this->main_tpl->setOnScreenMessage('info', $this->lng->txt("info_deleted"), true);
787 $ctrl->redirectByClass("ilobjskillmanagementgui", "");
788 }
789
790 public function confirmedDelete(): void
791 {
792 // delete all selected objects
793 foreach ($this->requested_node_ids as $id) {
794 $this->skill_deletion_manager->deleteNode($id, $this->skill_tree);
795 }
796 $this->skill_deletion_manager->updateProfileCompletions($this->skill_tree);
797
798 // feedback
799 $this->main_tpl->setOnScreenMessage('info', $this->lng->txt("info_deleted"), true);
800 }
801
802 //
803 // Skill Templates
804 //
805
806 public function editSkillTemplates(): void
807 {
809 $ilTabs = $this->tabs;
811 $ilCtrl = $this->ctrl;
812
813 $ilTabs->activateTab("skill_templates");
814 $ilCtrl->setParameter($this, "node_id", $this->skill_tree->readRootId());
815 $ilCtrl->redirectByClass("ilskillrootgui", "listTemplates");
816 }
817
818 //
819 // Tree
820 //
821
822 public function showTree(bool $a_templates, $a_gui = "", $a_gui_cmd = ""): void
823 {
824 $ilUser = $this->user;
826 $ilCtrl = $this->ctrl;
828
829 if ($a_templates) {
830 if ($this->requested_node_id == 0 || $this->requested_node_id == $this->skill_tree->readRootId()) {
831 return;
832 }
833
834 if ($this->requested_node_id != $this->skill_tree->readRootId()) {
835 $path = $this->skill_tree->getPathId($this->requested_node_id);
836 if (ilSkillTreeNode::_lookupType($path[1]) == "sktp") {
837 return;
838 }
839 }
840 }
841
842 $ilCtrl->setParameter($this, "templates_tree", (int) $a_templates);
843
844 if ($a_templates) {
845 $this->tool_context->current()->addAdditionalData(ilSkillGSToolProvider::SHOW_TEMPLATE_TREE, true);
846 $this->tool_context->current()->addAdditionalData(ilSkillGSToolProvider::SKILL_TREE_ID, $this->object->getId());
847 $exp = new ilSkillTemplateTreeExplorerGUI($this, "showTree", $this->object->getId());
848 } else {
849 $this->tool_context->current()->addAdditionalData(ilSkillGSToolProvider::SHOW_SKILL_TREE, true);
850 $this->tool_context->current()->addAdditionalData(ilSkillGSToolProvider::SKILL_TREE_ID, $this->object->getId());
851 $exp = new ilSkillTreeExplorerGUI($this, "showTree", $this->object->getId());
852 }
853 if (!$exp->handleCommand()) {
854 $tpl->setLeftNavContent($exp->getHTML());
855 }
856 }
857}
Provides fluid interface to RBAC services.
Definition: UIServices.php:25
renderer()
Get a renderer for UI components.
Definition: UIServices.php:44
factory()
Get the factory that crafts UI components.
Definition: UIServices.php:36
Request wrapper for guis in skill administration.
error(string $a_errmsg)
Basic skill GUI class.
Basic skill template GUI class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
redirectByClass( $a_class, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false)
@inheritDoc
getLinkTarget(object $a_gui_obj, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false, bool $has_xml_style=false)
@inheritDoc
setParameter(object $a_gui_obj, string $a_parameter, $a_value)
@inheritDoc
redirect(object $a_gui_obj, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false)
@inheritDoc
setParameterByClass(string $a_class, string $a_parameter, $a_value)
@inheritDoc
Error Handling & global info handling.
Export User Interface Class.
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Skill tree gui class.
Tree SkillTreeFactory $skill_tree_factory
Usage SkillUsageManager $skill_usage_manager
saveAllTitles(bool $a_succ_mess=true)
init(Service\SkillInternalManagerService $skill_manager)
initTreeForm(bool $edit=false)
expandAll(bool $a_redirect=true)
ScreenContext ContextServices $tool_context
Tree SkillTreeManager $skill_tree_manager
getAdminTabs()
administration tabs show only permissions and trash folder
ilGlobalTemplateInterface $main_tpl
Node SkillTreeNodeManager $skill_tree_node_manager
collapseAll(bool $a_redirect=true)
__construct( $a_data, int $a_id, bool $a_call_by_reference=true, bool $a_prepare_output=true)
ilSkillTreeRepository $skill_tree_repo
showTree(bool $a_templates, $a_gui="", $a_gui_cmd="")
Access SkillManagementAccess $skill_management_access_manager
saveAllTemplateTitles(bool $a_succ_mess=true)
Access SkillTreeAccess $skill_tree_access_manager
Service SkillAdminGUIRequest $admin_gui_request
Node SkillDeletionManager $skill_deletion_manager
Service SkillUIService $skill_ui_service
Class ilObjectGUI Basic methods of all Output classes.
ilAccessHandler $access
ilGlobalTemplateInterface $tpl
prepareOutput(bool $show_sub_objects=true)
ServerRequestInterface $request
ilLanguage $lng
Class ilObject Basic functions for all objects.
class ilRbacSystem system function like checkAccess, addActiveRole ... Supporting system functions ar...
static get(string $a_var)
static set(string $a_var, $a_val)
Set a value.
Skill category GUI class.
Skill profile GUI class.
Class ilSkillProfileUploadHandlerGUI.
Skill root GUI class.
Skill template category GUI class.
Skill template reference GUI class.
static _lookupTrefIdsForTopTemplateId(int $a_template_id)
Explorer class that works on tree objects (Services/Tree)
Explorer class that works on tree objects (Services/Tree)
static _writeTitle(int $a_obj_id, string $a_title)
static _lookupType(int $a_obj_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setBackTarget(string $a_title, string $a_target, string $a_frame="")
clearTargets()
clear all targets
activateTab(string $a_id)
const POS_FIRST_NODE
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
const SYSTEM_FOLDER_ID
Definition: constants.php:35
setLeftNavContent(string $a_content)
Sets content of left navigation column.
setOnScreenMessage(string $type, string $a_txt, bool $a_keep=false)
Set a message to be displayed to the user.
setContent(string $a_html)
Sets content for standard template.
This describes commonalities between all forms.
Definition: Form.php:34
Interface ilSkillTreeRepository.
$path
Definition: ltiservices.php:30
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Factory.php:21
$ilErr
Definition: raiseError.php:33
global $DIC
Definition: shib_login.php:26