ILIAS  trunk Revision v11.0_alpha-1723-g8e69f309bab
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
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;
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;
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  {
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  {
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()) {
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
492  ): ilPortfolioPageGUI {
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 {
565  }
566  }
567 
569  int $a_prtt_id,
570  string $a_title
571  ): ?ilPropertyFormGUI {
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 {
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;
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;
874  $lng = $this->lng;
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;
898  $lng = $this->lng;
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 }
static getAllPortfolioPages(int $a_portfolio_id)
Get pages of portfolio.
This class represents an option in a radio group.
$renderer
initCopyPageFormOptions(ilPropertyFormGUI $a_form)
Exercise assignment.
addResourceObject(string $a_wsp_id, ?string $a_text=null)
Add personal resource or repository object (ref_id) to assigment.
updateCustom(ilPropertyFormGUI $form)
ilErrorHandling $error
getSkillsToPortfolioAssignment(array $a_pskills, array $a_skill_ids, ilPortfolioTemplatePage $a_source_page)
This class represents an option in a checkbox group.
ILIAS Portfolio InternalGUIService $gui
This class represents a selection list property in a property form.
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...
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $node_id=null)
const TITLE_LENGTH
ilPortfolioDeclarationOfAuthorship $declaration_authorship
createPortfolioFromTemplateProcess(bool $a_process_form=true)
getLinkTarget(object $a_gui_obj, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false, bool $has_xml_style=false)
static _lookupTitle(int $a_obj_id, int $a_tref_id=0)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setContent(string $a_html)
Sets content for standard template.
setParameterByClass(string $a_class, string $a_parameter, $a_value)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getOfflineMessage()
Get offline message for sharing tab.
static _lookupOwner(int $obj_id)
Lookup owner user ID for object ID.
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...
getDomDoc()
Get dom doc (DOMDocument)
getEditFormCustomValues(array &$a_values)
setStyleId(int $a_styleid)
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-...
redirectByClass( $a_class, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false)
Class ilPortfolioExerciseGUI.
static getAvailablePortfolioTemplates(string $a_permission="read")
$ilErr
Definition: raiseError.php:33
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
preview()
description: > Example for rendering a Preview Glyph.
Definition: preview.php:41
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
linkPortfolioToAssignment(int $a_target_id)
static _goto(string $a_target)
static clonePagesAndSettings(ilObjPortfolioBase $a_source, ilObjPortfolioBase $a_target, ?array $a_recipe=null, bool $copy_all=false)
Build template from portfolio and vice versa.
ilObjPortfolioGUI: ilPortfolioPageGUI, ilPageObjectGUI ilObjPortfolioGUI: ilWorkspaceAccessGUI, ilCommentGUI, ilCommonActionDispatcherGUI ilObjPortfolioGUI: ilObjectContentStyleSettingsGUI, ilPortfolioExerciseGUI ilObjPortfolioGUI: ILIAS
Class ilObjExercise.
This class represents a property in a property form.
static _lookupTitle(int $obj_id)
setScreenIdComponent(string $a_comp)
static getPortfoliosOfUser(int $a_user_id)
Get portfolios of user.
global $DIC
Definition: shib_login.php:22
ILIAS Skill Service SkillPersonalService $skill_personal_service
createFromTemplateDirect(string $title="", int $prtt_id=0)
Create portfolio template direct.
ilGlobalTemplateInterface $tpl
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 _lookupObjectId(int $ref_id)
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 class represents a property in a property form.
getPageInstance(?int $a_page_id=null, ?int $a_portfolio_id=null)
Get portfolio template page instance.
setRequired(bool $a_required)
afterSave(ilObject $new_object)
Portfolio view gui base class.
checkPermission(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
ACL access handler GUI.
static redirect(string $a_script)
createPortfolioFromTemplate(?ilPropertyFormGUI $a_form=null)
setOnlineAndShare()
Set online and switch to share screen.
global $ilSetting
Definition: privfeed.php:31
__construct(Container $dic, ilPlugin $plugin)
ContextServices $tool_context
Exercise submission //TODO: This class has many static methods related to delivered "files"...
$message
Definition: xapiexit.php:31
initEditCustomForm(ilPropertyFormGUI $a_form)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
ilWorkspaceAccessHandler $ws_access
ilSetting $settings
ILIAS Notes GUIService $notes_gui
addStdTitle(int $obj_id, string $type)
getPageGUIInstance(int $a_page_id)
Get portfolio template page gui instance.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
ilAccessHandler $access
initCreatePortfolioFromTemplateForm(int $a_prtt_id, string $a_title)