ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilObjPortfolioGUI.php
Go to the documentation of this file.
1<?php
2
22
30{
31 protected \ILIAS\Notes\GUIService $notes_gui;
35 protected \ILIAS\Skill\Service\SkillPersonalService $skill_personal_service;
36
37 public function __construct(int $a_id = 0)
38 {
39 global $DIC;
40
41 $this->lng = $DIC->language();
42 $this->help = $DIC["ilHelp"];
43 $this->settings = $DIC->settings();
44 $this->access = $DIC->access();
45 $this->user = $DIC->user();
46 $this->ctrl = $DIC->ctrl();
47 $this->ui = $DIC->ui();
48
49 $this->tool_context = $DIC->globalScreen()->tool()->context();
50
51 parent::__construct($a_id, self::PORTFOLIO_OBJECT_ID, 0);
52 $this->declaration_authorship = new ilPortfolioDeclarationOfAuthorship();
53
54 $this->ctrl->saveParameter($this, "exc_back_ref_id");
55 $this->notes_gui = $DIC->notes()->gui();
56 $this->skill_personal_service = $DIC->skills()->personal();
57 }
58
59 public function getType(): string
60 {
61 return "prtf";
62 }
63
64 protected function checkPermissionBool(
65 string $perm,
66 string $cmd = "",
67 string $type = "",
68 ?int $node_id = null
69 ): bool {
70 if ($perm === "create") {
71 return true;
72 }
73 if (!$node_id) {
75 }
76 return $this->access_handler->checkAccess($perm, "", $node_id);
77 }
78
79 public function executeCommand(): void
80 {
81 $this->checkPermission("read");
82 $this->setTitleAndDescription();
83
84 $next_class = $this->ctrl->getNextClass($this);
85 $cmd = $this->ctrl->getCmd("view");
86
87 // trigger assignment tool
88 $this->triggerAssignmentTool();
89 switch ($next_class) {
90 case "ilworkspaceaccessgui":
91 if ($this->checkPermissionBool("write")) {
92 $this->setTabs();
93 $this->tabs_gui->activateTab("share");
94
95 $this->tpl->setPermanentLink("prtf", $this->object->getId());
96
97 $wspacc = new ilWorkspaceAccessGUI($this->object->getId(), $this->access_handler, true);
98 $wspacc->setBlockingMessage($this->getOfflineMessage());
99 $this->ctrl->forwardCommand($wspacc);
100 }
101 break;
102
103 case 'ilportfoliopagegui':
104 if ($this->determinePageCall()) {
105 // only in edit mode
106 $this->addLocator();
107 }
108 $this->handlePageCall($cmd);
109 break;
110
111 case "ilcommentgui":
112 $this->preview();
113 break;
114
115 case "ilcommonactiondispatchergui":
116 //$this->prepareOutput();
118 $this->ctrl->forwardCommand($gui);
119 break;
120
121 case "ilobjectcontentstylesettingsgui":
122 $this->checkPermission("write");
123 $this->addLocator();
124 $this->setTabs();
125 $this->tabs_gui->activateTab("settings");
126 $this->setSettingsSubTabs("style");
127 $settings_gui = $this->content_style_gui
128 ->objectSettingsGUIForObjId(
129 null,
130 $this->object->getId()
131 );
132 $this->ctrl->forwardCommand($settings_gui);
133 break;
134
135 case "ilportfolioexercisegui":
136 $this->ctrl->setReturn($this, "view");
137 $gui = new ilPortfolioExerciseGUI($this->user_id, $this->object->getId());
138 $this->ctrl->forwardCommand($gui);
139 break;
140
141 case strtolower(SettingsGUI::class):
142 $this->checkPermission("write");
143 $this->addLocator();
144 $this->setTabs();
145 $this->tabs_gui->activateTab("settings");
146 $this->setSettingsSubTabs("properties");
147 $gui = $this->gui->settings()->settingsGUI(
148 $this->object->getId(),
149 false
150 );
151 $this->ctrl->forwardCommand($gui);
152 break;
153
154 default:
155
156 if ($cmd !== "preview") {
157 $this->addLocator();
158 $this->setTabs();
159 }
160 $this->$cmd();
161 break;
162 }
163 }
164
165 public function edit(): void
166 {
167 $this->ctrl->redirectByClass(SettingsGUI::class);
168 }
169
170 protected function triggerAssignmentTool(): void
171 {
172 if (!is_object($this->object) || $this->object->getId() <= 0) {
173 return;
174 }
175 $pe = new ilPortfolioExercise($this->user_id, $this->object->getId());
176 $pe_gui = new ilPortfolioExerciseGUI($this->user_id, $this->object->getId());
177 $assignments = $pe->getAssignmentsOfPortfolio();
178 if (count($assignments) > 0) {
179 $ass_ids = array_map(static function ($i) {
180 return $i["ass_id"];
181 }, $assignments);
182 $this->tool_context->current()->addAdditionalData(ilExerciseGSToolProvider::SHOW_EXC_ASSIGNMENT_INFO, true);
183 $this->tool_context->current()->addAdditionalData(ilExerciseGSToolProvider::EXC_ASS_IDS, $ass_ids);
184 $this->tool_context->current()->addAdditionalData(ilExerciseGSToolProvider::EXC_ASS_BUTTONS, $pe_gui->getActionButtons());
185 }
186 }
187
188 protected function setTabs(): void
189 {
190 $ilHelp = $this->help;
191
192 $ilHelp->setScreenIdComponent("prtf");
193
194 if ($this->checkPermissionBool("write")) {
195 $this->tabs_gui->addTab(
196 "pages",
197 $this->lng->txt("content"),
198 $this->ctrl->getLinkTarget($this, "view")
199 );
200
201 $this->tabs_gui->addTab(
202 "settings",
203 $this->lng->txt("settings"),
204 $this->ctrl->getLinkTargetByClass(SettingsGUI::class)
205 );
206
207 $this->tabs_gui->addNonTabbedLink(
208 "preview",
209 $this->lng->txt("preview"),
210 $this->ctrl->getLinkTarget($this, "preview")
211 );
212
213 $this->lng->loadLanguageModule("wsp");
214 $this->tabs_gui->addTab(
215 "share",
216 $this->lng->txt("wsp_permissions"),
217 $this->ctrl->getLinkTargetByClass("ilworkspaceaccessgui", "share")
218 );
219 }
220 }
221
222 protected function addLocator(): void
223 {
224 if (!$this->creation_mode) {
225 $this->ctrl->setParameter($this, "prt_id", $this->object->getId());
226 }
227
228 $this->addLocatorItems();
229
230 $this->tpl->setLocator();
231 }
232
233 protected function setTitleAndDescription(): void
234 {
235 // parent::setTitleAndDescription();
236
237 $title = $this->lng->txt("portfolio");
238 if ($this->object) {
239 $title .= ": " . $this->object->getTitle();
240 }
241 $this->tpl->setTitle($title);
242 $this->tpl->setTitleIcon(
243 ilUtil::getImagePath("standard/icon_prtf.svg"),
244 $this->lng->txt("portfolio")
245 );
246
247 if ($this->object &&
248 !$this->object->isOnline()) {
249 $this->tpl->setAlertProperties(array(
250 array("alert" => true,
251 "property" => $this->lng->txt("status"),
252 "value" => $this->lng->txt("offline"))
253 ));
254 }
255 }
256
257
258 //
259 // CREATE/EDIT
260 //
261
262 public function create(): void
263 {
264 $tpl = $this->tpl;
265 $ilErr = $this->error;
266
267 $new_type = $this->port_request->getNewType();
268
269 // add new object to custom parent container
270 $this->ctrl->saveParameter($this, "crtptrefid");
271 // use forced callback after object creation
272 $this->ctrl->saveParameter($this, "crtcb");
273
274 if (!$this->checkPermissionBool("create", "", $new_type)) {
275 $ilErr->raiseError($this->lng->txt("permission_denied"), $ilErr->MESSAGE);
276 } else {
277 $this->lng->loadLanguageModule($new_type);
278 $this->ctrl->setParameter($this, "new_type", $new_type);
279
280 $form = $this->getCreationForm();
281
282 $tpl->setContent($form->render());
283 }
284 }
285
286 public function createFromTemplate(): void
287 {
288 $tpl = $this->tpl;
289 $ilErr = $this->error;
290
291 $new_type = $this->port_request->getNewType();
292
293 // add new object to custom parent container
294 $this->ctrl->saveParameter($this, "crtptrefid");
295 // use forced callback after object creation
296 $this->ctrl->saveParameter($this, "crtcb");
297
298 if (!$this->checkPermissionBool("create", "", $new_type)) {
299 $ilErr->raiseError($this->lng->txt("permission_denied"), $ilErr->MESSAGE);
300 } else {
301 $this->lng->loadLanguageModule($new_type);
302 $this->ctrl->setParameter($this, "new_type", $new_type);
303 $form = $this->initCreateFromTemplateForm();
304 $tpl->setContent($form->getHTML());
305 }
306 }
307
308 protected function getCreateInfoMessage(): string
309 {
310 global $DIC;
311
312 $ui = $DIC->ui();
313 $ilSetting = $DIC->settings();
314
315 $message = "";
316 return $message;
317 }
318
319 protected function getCreationForm(): FormAdapterGUI
320 {
321 $ilSetting = $this->settings;
322 $this->ctrl->setParameter($this, "new_type", $this->getType());
323
324 return $this->gui->form([static::class], "save")
325 ->section("prop", $this->lng->txt("prtf_create_portfolio"))
326 ->addStdTitle(
327 0,
328 "prtf"
329 );
330 }
331
333 {
334 $ilSetting = $this->settings;
335
336 $this->ctrl->setParameter($this, "new_type", $this->getType());
337
338 $form = new ilPropertyFormGUI();
339 $form->setFormAction($this->ctrl->getFormAction($this));
340
341 // title
342 $ti = new ilTextInputGUI($this->lng->txt("title"), "title");
343 $ti->setSize(min(40, ilObject::TITLE_LENGTH));
344 $ti->setMaxLength(ilObject::TITLE_LENGTH);
345 $ti->setRequired(true);
346 $form->addItem($ti);
347
348 // portfolio templates
350 if (count($templates)) {
351 $tmpl = new ilSelectInputGUI($this->lng->txt("obj_prtt"), "prtt");
352 $tmpl->setRequired(true);
353 $tmpl->setOptions(array("" => $this->lng->txt("please_select")) + $templates);
354 $form->addItem($tmpl);
355
356 // incoming from repository
357 $template_id = $this->port_request->getPortfolioTemplateId();
358 if ($template_id > 0) {
359 $tmpl->setValue($template_id);
360 }
361 }
362
363 $form->setTitle($this->lng->txt("prtf_add_portfolio_from_template"));
364 $form->addCommandButton("saveFromTemplate", $this->lng->txt("create"));
365 $form->addCommandButton("toRepository", $this->lng->txt("cancel"));
366
367 return $form;
368 }
369
370 public function save(): void
371 {
372 $form = $this->getCreationForm();
373 if ($form->isValid()) {
374 $port = new ilObjPortfolio();
375 $port->setTitle($form->getData("title"));
376 $port->create();
377 $this->ctrl->setParameter($this, "prt_id", $port->getId());
378 $this->ctrl->redirect($this, "view");
379 }
380 $this->tpl->setContent($form->render());
381 }
382
383 public function saveFromTemplate(): void
384 {
385 $form = $this->initCreateFromTemplateForm();
386 // trigger portfolio template "import" process
387 if ($form->checkInput()) {
388 $this->createFromTemplateDirect(
389 $form->getInput("title"),
390 $this->port_request->getPortfolioTemplate()
391 );
392 return;
393 } else {
394 $form->setValuesByPost();
395 $this->tpl->setContent($form->getHTML());
396 }
397 }
398
399 protected function afterSave(ilObject $new_object): void
400 {
401 $this->tpl->setOnScreenMessage('success', $this->lng->txt("prtf_portfolio_created"), true);
402 $this->ctrl->setParameter($this, "prt_id", $new_object->getId());
403 $this->ctrl->redirect($this, "view");
404 }
405
406 protected function toRepository(): void
407 {
408 $ilAccess = $this->access;
409
410 // return to exercise (portfolio assignment)
411 $exc_ref_id = $this->port_request->getExerciseRefId();
412 if ($exc_ref_id &&
413 $ilAccess->checkAccess("read", "", $exc_ref_id)) {
414 ilUtil::redirect(ilLink::_getLink($exc_ref_id, "exc"));
415 }
416
417 $this->ctrl->redirectByClass("ilportfoliorepositorygui", "show");
418 }
419
420 protected function initEditForm(): ilPropertyFormGUI
421 {
422 $form = new ilPropertyFormGUI();
423 $form->setFormAction($this->ctrl->getFormAction($this));
424
425 // title
426 $ti = new ilTextInputGUI($this->lng->txt("title"), "title");
427 $ti->setSize(min(40, ilObject::TITLE_LENGTH));
428 $ti->setMaxLength(ilObject::TITLE_LENGTH);
429 $ti->setRequired(true);
430 $ti->setValue($this->object->getTitle());
431 $form->addItem($ti);
432
433 // :TODO: online
434 $online = new ilCheckboxInputGUI($this->lng->txt("online"), "online");
435 $online->setChecked($this->object->isOnline());
436 $form->addItem($online);
437
438 $this->initEditCustomForm($form);
439
440 $form->setTitle($this->lng->txt("prtf_edit_portfolio"));
441 $form->addCommandButton("update", $this->lng->txt("save"));
442 $form->addCommandButton("view", $this->lng->txt("cancel"));
443
444 return $form;
445 }
446
447 protected function getEditFormCustomValues(array &$a_values): void
448 {
449 $a_values["online"] = $this->object->isOnline();
450
451 parent::getEditFormCustomValues($a_values);
452 }
453
454 protected function updateCustom(ilPropertyFormGUI $form): void
455 {
456 $this->object->setOnline($form->getInput("online"));
457
458 // if portfolio is not online, it cannot be default
459 if (!$form->getInput("online")) {
460 ilObjPortfolio::setUserDefault($this->user_id, 0);
461 }
462
463 parent::updateCustom($form);
464 }
465
466
467 //
468 // PAGES
469 //
470
474 protected function getPageInstance(
475 ?int $a_page_id = null,
476 ?int $a_portfolio_id = null
477 ): ilPortfolioPage {
478 // #11531
479 if (!$a_portfolio_id && $this->object) {
480 $a_portfolio_id = $this->object->getId();
481 }
482 $page = new ilPortfolioPage((int) $a_page_id);
483 $page->setPortfolioId($a_portfolio_id);
484 return $page;
485 }
486
490 protected function getPageGUIInstance(
491 int $a_page_id
493 $page_gui = new ilPortfolioPageGUI(
494 $this->object->getId(),
495 $a_page_id,
496 0,
497 $this->object->hasPublicComments()
498 );
499 $page_gui->setStyleId($this->content_style_domain->getEffectiveStyleId());
500 $page_gui->setAdditional($this->getAdditional());
501 return $page_gui;
502 }
503
504 public function getPageGUIClassName(): string
505 {
506 return "ilportfoliopagegui";
507 }
508
509 protected function initCopyPageFormOptions(ilPropertyFormGUI $a_form): void
510 {
511 $a_tgt = new ilRadioGroupInputGUI($this->lng->txt("target"), "target");
512 $a_tgt->setRequired(true);
513 $a_form->addItem($a_tgt);
514
515 $old = new ilRadioOption($this->lng->txt("prtf_existing_portfolio"), "old");
516 $a_tgt->addOption($old);
517
518 $options = array();
519 $all = ilObjPortfolio::getPortfoliosOfUser($this->user_id);
520 foreach ($all as $item) {
521 $options[$item["id"]] = $item["title"];
522 }
523 $prtf = new ilSelectInputGUI($this->lng->txt("portfolio"), "prtf");
524 $prtf->setRequired(true);
525 $prtf->setOptions($options);
526 $old->addSubItem($prtf);
527
528 $new = new ilRadioOption($this->lng->txt("prtf_new_portfolio"), "new");
529 $a_tgt->addOption($new);
530
531 $tf = new ilTextInputGUI($this->lng->txt("title"), "title");
532 $tf->setMaxLength(128);
533 $tf->setSize(40);
534 $tf->setRequired(true);
535 $new->addSubItem($tf);
536 }
537
538
539 //
540 // CREATE FROM TEMPLATE
541 //
542
543 protected function createPortfolioFromTemplate(
544 ?ilPropertyFormGUI $a_form = null
545 ): void {
546 $title = $this->port_request->getPortfolioTitle();
547 $prtt_id = $this->port_request->getPortfolioTemplate();
548
549 // valid template?
551 if (!count($templates) || !in_array($prtt_id, $templates)) {
552 $this->toRepository();
553 }
554 unset($templates);
555
556 $this->ctrl->setParameter($this, "prtt", $prtt_id);
557
558 if (!$a_form) {
559 $a_form = $this->initCreatePortfolioFromTemplateForm($prtt_id, $title);
560 }
561 if ($a_form) {
562 $this->tpl->setContent($a_form->getHTML());
563 } else {
564 $this->createPortfolioFromTemplateProcess(false);
565 }
566 }
567
569 int $a_prtt_id,
570 string $a_title
572 $ilSetting = $this->settings;
573 $ilUser = $this->user;
574
575 $exc_id = $this->port_request->getExerciseRefId();
576 $ass_id = $this->port_request->getExcAssId();
577 if ($exc_id > 0) {
578 $this->ctrl->setParameter($this, "exc_id", $exc_id);
579 $this->ctrl->setParameter($this, "ass_id", $ass_id);
580 }
581
582 $form = new ilPropertyFormGUI();
583 $form->setFormAction($this->ctrl->getFormAction($this));
584
585 $tmpl = new ilNonEditableValueGUI($this->lng->txt("obj_prtt"));
586 $tmpl->setValue(ilObject::_lookupTitle($a_prtt_id));
587 $form->addItem($tmpl);
588
589 $title = new ilNonEditableValueGUI($this->lng->txt("title"), "pt");
590 $title->setValue($a_title);
591 $form->addItem($title);
592
593 $has_form_content = false;
594
595 $pskills = array_keys($this->skill_personal_service->getSelectedUserSkills($ilUser->getId()));
596 $skill_ids = array();
597
598 foreach (ilPortfolioTemplatePage::getAllPortfolioPages($a_prtt_id) as $page) {
599 switch ($page["type"]) {
601 // skills
602 $source_page = new ilPortfolioTemplatePage($page["id"]);
603 $source_page->buildDom(true);
604 $skill_ids = $this->getSkillsToPortfolioAssignment($pskills, $skill_ids, $source_page);
605
606 if (count($skill_ids)) {
607 $has_form_content = true;
608 }
609 break;
610 }
611 }
612
613 if ($skill_ids) {
614 $skills = new ilCheckboxGroupInputGUI($this->lng->txt("skills"), "skill_ids");
615 $skills->setInfo($this->lng->txt("prtf_template_import_new_skills"));
616 $skills->setValue($skill_ids);
617 foreach ($skill_ids as $skill_id) {
618 $skills->addOption(new ilCheckboxOption(ilSkillTreeNode::_lookupTitle($skill_id), $skill_id));
619 }
620 $form->addItem($skills);
621 }
622 // no dialog needed, go ahead
623 if (!$has_form_content) {
624 return null;
625 }
626
627 $form->setTitle($this->lng->txt("prtf_creation_mode") . ": " . $this->lng->txt("prtf_creation_mode_template"));
628 $form->addCommandButton("createPortfolioFromTemplateProcess", $this->lng->txt("continue"));
629 $form->addCommandButton("toRepository", $this->lng->txt("cancel"));
630
631 return $form;
632 }
633
635 bool $a_process_form = true
636 ): void {
637 $ilSetting = $this->settings;
638
639 $title = $this->port_request->getPortfolioTitle();
640 $prtt_id = $this->port_request->getPortfolioTemplate();
641
642 // valid template?
644 if (!count($templates) || !in_array($prtt_id, $templates)) {
645 $this->toRepository();
646 }
647 unset($templates);
648
649 // build page recipe (aka import form values)
650 $recipe = null;
651 if ($a_process_form) {
652 $this->ctrl->setParameter($this, "prtt", $prtt_id);
653
654 $form = $this->initCreatePortfolioFromTemplateForm($prtt_id, $title);
655 if ($form->checkInput()) {
656
657 $recipe["skills"] = (array) $form->getInput("skill_ids");
658 } else {
659 $form->setValuesByPost();
660 $this->createPortfolioFromTemplate($form);
661 return;
662 }
663 }
664
665 $source = new ilObjPortfolioTemplate($prtt_id, false);
666
667 // create portfolio
668 $target = new ilObjPortfolio();
669 $target->setTitle($title);
670 $target->create();
671 $target_id = $target->getId();
672
673 ilObjPortfolioTemplate::clonePagesAndSettings($source, $target, $recipe);
674
675 // link portfolio to exercise assignment
676 $this->linkPortfolioToAssignment($target_id);
677
678 $this->tpl->setOnScreenMessage('success', $this->lng->txt("prtf_portfolio_created_from_template"), true);
679 $this->ctrl->setParameter($this, "prt_id", $target_id);
680 $this->ctrl->redirect($this, "preview");
681 }
682
686 protected function createFromTemplateDirect(
687 string $title = "",
688 int $prtt_id = 0
689 ): void {
690 if ($prtt_id === 0) {
691 $prtt_id = $this->port_request->getPortfolioTemplateId();
692 }
693 if ($title === "") {
694 $title = ilObject::_lookupTitle($prtt_id);
695 }
696
697 // valid template?
699 if (!count($templates) || !in_array($prtt_id, $templates)) {
700 $this->toRepository();
701 }
702 unset($templates);
703
704 $source = new ilObjPortfolioTemplate($prtt_id, false);
705
706 // create portfolio
707 $target = new ilObjPortfolio();
708 $target->setTitle($title);
709 $target->create();
710 $target_id = $target->getId();
711
712 ilObjPortfolioTemplate::clonePagesAndSettings($source, $target, null, true);
713
714 // link portfolio to exercise assignment
715 //$this->linkPortfolioToAssignment($target_id);
716
717 $this->tpl->setOnScreenMessage('success', $this->lng->txt("prtf_portfolio_created_from_template"), true);
718 $this->ctrl->setParameter($this, "prt_id", $target_id);
719 $this->ctrl->redirect($this, "preview");
720 }
721
722
723 public static function _goto(string $a_target): void
724 {
725 global $DIC;
726
727 $ctrl = $DIC->ctrl();
728
729 $id = explode("_", $a_target);
730
731 $ctrl->setParameterByClass("ilobjportfoliogui", "prt_id", $id[0]);
732 if (count($id) === 2) {
733 $ctrl->setParameterByClass("ilobjportfoliogui", "user_page", $id[1]);
734 }
735 $ctrl->redirectByClass(["ilsharedresourceGUI", "ilobjportfoliogui"], "preview");
736 }
737
738 public function createPortfolioFromAssignment(): void
739 {
740 $ilUser = $this->user;
741 $ilSetting = $this->settings;
742
743 $recipe = [];
744
745 $title = $this->port_request->getPortfolioTitle();
746 $prtt_id = $this->port_request->getPortfolioTemplate();
747
748 // get assignment template
749 $ass_template_id = 0;
750 $ass_id = $this->port_request->getExcAssId();
751 if ($ass_id > 0) {
752 $ass = new ilExAssignment($ass_id);
753 $ass_template_id = ilObject::_lookupObjectId($ass->getPortfolioTemplateId());
754 }
755
756 if ($prtt_id > 0) {
758 if (!count($templates) || !in_array($prtt_id, $templates)) {
759 if ($ass_template_id !== $prtt_id) {
760 $this->toRepository();
761 }
762 }
763
764 //skills manipulation
765 $pskills = array_keys($this->skill_personal_service->getSelectedUserSkills($ilUser->getId()));
766 $skill_ids = array();
767
768 $recipe = array();
769 foreach (ilPortfolioTemplatePage::getAllPortfolioPages($prtt_id) as $page) {
770 switch ($page["type"]) {
772 $source_page = new ilPortfolioTemplatePage($page["id"]);
773 $source_page->buildDom(true);
774 $skill_ids = $this->getSkillsToPortfolioAssignment($pskills, $skill_ids, $source_page);
775 break;
776 }
777 }
778
779 if ($skill_ids) {
780 $recipe["skills"] = $skill_ids;
781 }
782 }
783
784 // create portfolio
785 $target = new ilObjPortfolio();
786 $target->setTitle($title);
787 $target->create();
788 $target_id = $target->getId();
789
790 if ($prtt_id) {
791 $source = new ilObjPortfolioTemplate($prtt_id, false);
792 ilObjPortfolioTemplate::clonePagesAndSettings($source, $target, $recipe);
793 }
794
795 // link portfolio to exercise assignment
796 $this->linkPortfolioToAssignment($target_id);
797
798 $this->ctrl->setParameter($this, "prt_id", $target_id);
799 if ($prtt_id) {
800 $this->tpl->setOnScreenMessage('success', $this->lng->txt("prtf_portfolio_created_from_template"), true);
801 $this->ctrl->redirect($this, "preview");
802 } else {
803 $this->tpl->setOnScreenMessage('success', $this->lng->txt("prtf_portfolio_created"), true);
804 $this->ctrl->redirect($this, "view");
805 }
806 }
807
808 public function linkPortfolioToAssignment(int $a_target_id): void
809 {
810 $ilAccess = $this->access;
811 $ilUser = $this->user;
812
813 $exc_ref_id = $this->port_request->getExerciseRefId();
814 $ass_id = $this->port_request->getExcAssId();
815
816 if ($exc_ref_id &&
817 $ass_id &&
818 $ilAccess->checkAccess("read", "", $exc_ref_id)) {
819 $exc = new ilObjExercise($exc_ref_id);
820 $ass = new ilExAssignment($ass_id);
821 if ($ass->getExerciseId() === $exc->getId() &&
822 $ass->getType() === ilExAssignment::TYPE_PORTFOLIO) {
823 // #16205
824 $sub = new ilExSubmission($ass, $ilUser->getId());
825 $sub->addResourceObject($a_target_id);
826 }
827 }
828 }
829
831 array $a_pskills,
832 array $a_skill_ids,
833 ilPortfolioTemplatePage $a_source_page
834 ): array {
835 $dom = $a_source_page->getDomDoc();
836 $xpath = new DOMXPath($dom);
837 $nodes = $xpath->query("//PageContent/Skills");
838 foreach ($nodes as $node) {
839 $skill_id = $node->getAttribute("Id");
840 if (!in_array($skill_id, $a_pskills)) {
841 $a_skill_ids[] = $skill_id;
842 }
843 }
844 unset($nodes, $xpath, $dom);
845
846 return $a_skill_ids;
847 }
848
852 public function printSelection(): void
853 {
854 $view = $this->getPrintView();
855 $view->sendForm();
856 }
857
862 public function showPrintView(
863 ): void {
864 $printview = $this->getPrintView();
865 $printview->sendPrintView();
866 }
867
871 protected function getOfflineMessage(): string
872 {
873 $ui = $this->ui;
875 $ctrl = $this->ctrl;
876
877 if (!$this->object->isOnline()) {
878 $f = $ui->factory();
879 $renderer = $ui->renderer();
880
881 $buttons = [$f->button()->standard(
882 $lng->txt("prtf_set_online"),
883 $ctrl->getLinkTarget($this, "setOnlineAndShare")
884 )];
885
886 return $renderer->render($f->messageBox()->info($lng->txt("prtf_no_offline_share_info"))
887 ->withButtons($buttons));
888 }
889 return "";
890 }
891
895 protected function setOnlineAndShare(): void
896 {
897 $ilCtrl = $this->ctrl;
899
900 if (ilObjPortfolio::_lookupOwner($this->object->getId()) === $this->user_id) {
901 $this->object->setOnline(true);
902 $this->object->update();
903 $this->tpl->setOnScreenMessage('success', $lng->txt("prtf_has_been_set_online"), true);
904 }
905 $ilCtrl->redirectByClass("ilworkspaceaccessgui", "");
906 }
907}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
$renderer
This class represents a property in a property form.
This class represents a checkbox property in a property form.
This class represents an option in a checkbox group.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
Exercise assignment.
Exercise submission //TODO: This class has many static methods related to delivered "files".
This class represents a non editable value in a property form.
Class ilObjExercise.
Portfolio view gui base class.
static clonePagesAndSettings(ilObjPortfolioBase $a_source, ilObjPortfolioBase $a_target, ?array $a_recipe=null, bool $copy_all=false)
Build template from portfolio and vice versa.
@ilCtrl_Calls ilObjPortfolioGUI: ilPortfolioPageGUI, ilPageObjectGUI @ilCtrl_Calls ilObjPortfolioGUI:...
getPageInstance(?int $a_page_id=null, ?int $a_portfolio_id=null)
Get portfolio template page instance.
setOnlineAndShare()
Set online and switch to share screen.
linkPortfolioToAssignment(int $a_target_id)
getType()
Functions that must be overwritten.
initCreatePortfolioFromTemplateForm(int $a_prtt_id, string $a_title)
getOfflineMessage()
Get offline message for sharing tab.
getPageGUIInstance(int $a_page_id)
Get portfolio template page gui instance.
updateCustom(ilPropertyFormGUI $form)
Insert custom update form values into object.
executeCommand()
execute command
ilPortfolioDeclarationOfAuthorship $declaration_authorship
ILIAS Notes GUIService $notes_gui
getSkillsToPortfolioAssignment(array $a_pskills, array $a_skill_ids, ilPortfolioTemplatePage $a_source_page)
ILIAS Skill Service SkillPersonalService $skill_personal_service
ContextServices $tool_context
getEditFormCustomValues(array &$a_values)
Add values to custom edit fields.
afterSave(ilObject $new_object)
Post (successful) object creation hook.
createPortfolioFromTemplateProcess(bool $a_process_form=true)
static _goto(string $a_target)
createPortfolioFromTemplate(?ilPropertyFormGUI $a_form=null)
initCopyPageFormOptions(ilPropertyFormGUI $a_form)
createFromTemplateDirect(string $title="", int $prtt_id=0)
Create portfolio template direct.
setTabs()
create tabs (repository/workspace switch)
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $node_id=null)
ilWorkspaceAccessHandler $ws_access
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getAvailablePortfolioTemplates(string $a_permission="read")
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getPortfoliosOfUser(int $a_user_id)
Get portfolios of user.
Class ilObject Basic functions for all objects.
static _lookupObjectId(int $ref_id)
const TITLE_LENGTH
static _lookupOwner(int $obj_id)
Lookup owner user ID for object ID.
static _lookupTitle(int $obj_id)
setStyleId(int $a_styleid)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilPortfolioExerciseGUI.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Portfolio page gui class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getAllPortfolioPages(int $a_portfolio_id)
Get pages of portfolio.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This class represents a property form user interface.
getInput(string $a_post_var, bool $ensureValidation=true)
Returns the input of an item, if item provides getInput method and as fallback the value of the HTTP-...
This class represents a property in a property form.
This class represents an option in a radio group.
This class represents a selection list property in a property form.
static _lookupTitle(int $a_obj_id, int $a_tref_id=0)
This class represents a text property in a property form.
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 redirect(string $a_script)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $lng
Definition: privfeed.php:31
global $ilSetting
Definition: privfeed.php:31
$ilErr
Definition: raiseError.php:33
if(!file_exists('../ilias.ini.php'))
global $DIC
Definition: shib_login.php:26
$message
Definition: xapiexit.php:31