ILIAS  release_8 Revision v8.23
class.ilObjPortfolioTemplateGUI.php
Go to the documentation of this file.
1 <?php
2 
31 {
33  protected ilHelpGUI $help;
34  protected ilTabsGUI $tabs;
35 
36  public function __construct(
37  int $a_id = 0,
38  int $a_id_type = self::REPOSITORY_NODE_ID,
39  int $a_parent_node_id = 0
40  ) {
41  parent::__construct($a_id, $a_id_type, $a_parent_node_id);
42  global $DIC;
43 
44  $this->nav_history = $DIC["ilNavigationHistory"];
45  $this->help = $DIC["ilHelp"];
46  $this->tabs = $DIC->tabs();
47  $this->toolbar = $DIC->toolbar();
48  $this->user = $DIC->user();
49  }
50 
51  public function getType(): string
52  {
53  return "prtt";
54  }
55 
56  public function executeCommand(): void
57  {
58  $ilNavigationHistory = $this->nav_history;
59 
60  // add entry to navigation history
61  if (!$this->getCreationMode() &&
62  $this->getAccessHandler()->checkAccess("read", "", $this->node_id)) {
63  $link = $this->ctrl->getLinkTarget($this, "view");
64  $ilNavigationHistory->addItem($this->node_id, $link, "prtt");
65  }
66 
67  $next_class = $this->ctrl->getNextClass($this);
68  $cmd = $this->ctrl->getCmd("view");
69  switch ($next_class) {
70  case 'ilportfoliotemplatepagegui':
71  $this->determinePageCall(); // has to be done before locator!
72  $this->prepareOutput();
73  $this->handlePageCall($cmd);
74  break;
75 
76  case "ilnotegui":
77  $this->preview();
78  break;
79 
80  case "ilinfoscreengui":
81  $this->prepareOutput();
82  $this->addHeaderAction();
83  $this->infoScreenForward();
84  break;
85 
86  case "ilcommonactiondispatchergui":
88  $this->prepareOutput();
89  $this->ctrl->forwardCommand($gui);
90  break;
91 
92  case "ilpermissiongui":
93  $this->prepareOutput();
94  $this->tabs_gui->activateTab("id_permissions");
95  $perm_gui = new ilPermissionGUI($this);
96  $this->ctrl->forwardCommand($perm_gui);
97  break;
98 
99  case "ilobjectcopygui":
100  $this->prepareOutput();
101  $cp = new ilObjectCopyGUI($this);
102  $cp->setType("prtt");
103  $this->ctrl->forwardCommand($cp);
104  break;
105 
106  case 'ilexportgui':
107  $this->prepareOutput();
108  $this->tabs_gui->activateTab("export");
109  $exp_gui = new ilExportGUI($this);
110  $exp_gui->addFormat("xml");
111  $this->ctrl->forwardCommand($exp_gui);
112  break;
113 
114  case "ilobjectcontentstylesettingsgui":
115  $this->checkPermission("write");
116  $this->prepareOutput();
117  $this->addHeaderAction();
118  $this->tabs_gui->activateTab("settings");
119  $this->setSettingsSubTabs("style");
120  $settings_gui = $this->content_style_gui
121  ->objectSettingsGUIForRefId(
122  null,
123  $this->object->getRefId()
124  );
125  $this->ctrl->forwardCommand($settings_gui);
126  break;
127 
128  case "ilobjectmetadatagui":
129  $this->checkPermission("write");
130  $this->prepareOutput();
131  $this->addHeaderAction();
132  $this->tabs_gui->activateTab("advmd");
133  $md_gui = new ilObjectMetaDataGUI($this->object, "pfpg");
134  $this->ctrl->forwardCommand($md_gui);
135  break;
136 
137  default:
138  $this->addHeaderAction();
140  }
141  }
142 
143  protected function setTabs(): void
144  {
145  $ilHelp = $this->help;
146 
147  $ilHelp->setScreenIdComponent("prtt");
148 
149  if ($this->checkPermissionBool("write")) {
150  $this->tabs_gui->addTab(
151  "pages",
152  $this->lng->txt("content"),
153  $this->ctrl->getLinkTarget($this, "view")
154  );
155  }
156 
157  if ($this->checkPermissionBool("read")) {
158  $this->tabs_gui->addTab(
159  "id_info",
160  $this->lng->txt("info_short"),
161  $this->ctrl->getLinkTargetByClass(array("ilobjportfoliotemplategui", "ilinfoscreengui"), "showSummary")
162  );
163  }
164 
165  if ($this->checkPermissionBool("write")) {
166  $this->tabs_gui->addTab(
167  "settings",
168  $this->lng->txt("settings"),
169  $this->ctrl->getLinkTarget($this, "edit")
170  );
171 
172  $mdgui = new ilObjectMetaDataGUI($this->object, "pfpg");
173  $mdtab = $mdgui->getTab();
174  if ($mdtab) {
175  $this->tabs_gui->addTab(
176  "advmd",
177  $this->lng->txt("meta_data"),
178  $mdtab
179  );
180  }
181 
182  $this->tabs_gui->addTab(
183  "export",
184  $this->lng->txt("export"),
185  $this->ctrl->getLinkTargetByClass("ilexportgui", "")
186  );
187  }
188 
189  if ($this->checkPermissionBool("read")) {
190  $this->tabs_gui->addNonTabbedLink(
191  "preview",
192  $this->lng->txt("preview"),
193  $this->ctrl->getLinkTarget($this, "preview")
194  );
195  }
196 
197  // will add permissions if needed
199  }
200 
204  public function infoScreen(): void
205  {
206  $this->ctrl->setCmd("showSummary");
207  $this->ctrl->setCmdClass("ilinfoscreengui");
208  $this->infoScreenForward();
209  }
210 
211  public function infoScreenForward(): void
212  {
213  $ilTabs = $this->tabs;
214  $ilToolbar = $this->toolbar;
215 
216  $ilTabs->activateTab("id_info");
217 
218  $this->checkPermission("visible");
219 
220  if ($this->checkPermissionBool("read")) {
221  $this->lng->loadLanguageModule("cntr");
222 
223  $button = ilLinkButton::getInstance();
224  $button->setPrimary(true);
225  $button->setCaption("prtf_create_portfolio_from_template");
226  $button->setUrl($this->ctrl->getLinkTarget($this, "createfromtemplate"));
227  $ilToolbar->addButtonInstance($button);
228  }
229 
230  $info = new ilInfoScreenGUI($this);
231 
232  $info->enablePrivateNotes();
233 
234  if ($this->checkPermissionBool("read")) {
235  $info->enableNews();
236  }
237 
238  // no news editing for files, just notifications
239  $info->enableNewsEditing(false);
240  if ($this->checkPermissionBool("write")) {
241  $news_set = new ilSetting("news");
242  $enable_internal_rss = $news_set->get("enable_rss_for_internal");
243 
244  if ($enable_internal_rss) {
245  $info->setBlockProperty("news", "settings", true);
246  $info->setBlockProperty("news", "public_notifications_option", true);
247  }
248  }
249 
250  // standard meta data
251  $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType());
252 
253  $this->ctrl->forwardCommand($info);
254  }
255 
256 
257  //
258  // CREATE/EDIT
259  //
260 
262  {
264 
266  if (count($all)) {
267  $opts = array("" => $this->lng->txt("please_select"));
268  foreach ($all as $item) {
269  $opts[$item["id"]] = $item["title"];
270  }
271  $prtf = new ilSelectInputGUI($this->lng->txt("prtf_create_template_from_portfolio"), "prtf");
272  $prtf->setInfo($this->lng->txt("prtf_create_template_from_portfolio_info"));
273  $prtf->setOptions($opts);
274  $form->addItem($prtf);
275  }
276 
277  return $form;
278  }
279 
280  protected function afterSave(ilObject $new_object): void
281  {
282  if ($this->port_request->getPortfolioId() > 0) {
283  $source = new ilObjPortfolio($this->port_request->getPortfolioId(), false);
284 
286  $obj = $new_object;
288  }
289 
290  $this->tpl->setOnScreenMessage('success', $this->lng->txt("prtt_portfolio_created"), true);
291  $this->ctrl->setParameter($this, "prt_id", $new_object->getId());
292  $this->ctrl->redirect($this, "view");
293  }
294 
295  protected function initEditCustomForm(ilPropertyFormGUI $a_form): void
296  {
297  $obj_service = $this->object_service;
298  // activation/availability
299 
300  $this->lng->loadLanguageModule('rep');
301 
302  $section = new ilFormSectionHeaderGUI();
303  $section->setTitle($this->lng->txt('rep_activation_availability'));
304  $a_form->addItem($section);
305 
306  // additional info only with multiple references
307  $act_obj_info = $act_ref_info = "";
308  if (count(ilObject::_getAllReferences($this->object->getId())) > 1) {
309  $act_obj_info = ' ' . $this->lng->txt('rep_activation_online_object_info');
310  $act_ref_info = $this->lng->txt('rep_activation_access_ref_info');
311  }
312 
313  $online = new ilCheckboxInputGUI($this->lng->txt('rep_activation_online'), 'online');
314  $online->setInfo($this->lng->txt('prtt_activation_online_info') . $act_obj_info);
315  $a_form->addItem($online);
316 
317  $dur = new ilDateDurationInputGUI($this->lng->txt("rep_visibility_until"), "access_period");
318  $dur->setShowTime(true);
319  $dur->setEndText($this->lng->txt('rep_activation_limited_end'));
320  $a_form->addItem($dur);
321 
322  $visible = new ilCheckboxInputGUI($this->lng->txt('rep_activation_limited_visibility'), 'access_visiblity');
323  $visible->setInfo($this->lng->txt('prtt_activation_limited_visibility_info'));
324  $dur->addSubItem($visible);
325 
326  $section = new ilFormSectionHeaderGUI();
327  $section->setTitle($this->lng->txt('obj_presentation'));
328  $a_form->addItem($section);
329 
330  // tile image
331  $obj_service->commonSettings()->legacyForm($a_form, $this->object)->addTileImage();
332 
333 
334  parent::initEditCustomForm($a_form);
335 
337  $this->object->getId(),
338  $a_form,
339  array(
341  )
342  );
343 
344  $tit = $a_form->getItemByPostVar("title");
345  $tit->setInfo($this->lng->txt('prtt_title_info'));
346  }
347 
348  protected function getEditFormCustomValues(array &$a_values): void
349  {
350  $a_values["online"] = $this->object->isOnline();
351  $a_values["access_period"]["start"] = $this->object->getActivationStartDate()
352  ? new ilDateTime($this->object->getActivationStartDate(), IL_CAL_UNIX)
353  : null;
354  $a_values["access_period"]["end"] = $this->object->getActivationEndDate()
355  ? new ilDateTime($this->object->getActivationEndDate(), IL_CAL_UNIX)
356  : null;
357  $a_values["access_visiblity"] = $this->object->getActivationVisibility();
358 
359  $a_values['cont_custom_md'] = ilContainer::_lookupContainerSetting(
360  $this->object->getId(),
362  false
363  );
364 
365  parent::getEditFormCustomValues($a_values);
366  }
367 
368  protected function updateCustom(ilPropertyFormGUI $form): void
369  {
370  $obj_service = $this->object_service;
371 
372  $this->object->setOnline($form->getInput("online"));
373 
374  // activation
375  $period = $form->getItemByPostVar("access_period");
376  if ($period->getStart() && $period->getEnd()) {
377  $this->object->setActivationLimited(true);
378  $this->object->setActivationVisibility($form->getInput("access_visiblity"));
379  $this->object->setActivationStartDate($period->getStart()->get(IL_CAL_UNIX));
380  $this->object->setActivationEndDate($period->getEnd()->get(IL_CAL_UNIX));
381  } else {
382  $this->object->setActivationLimited(false);
383  }
384 
385  parent::updateCustom($form);
386 
387  $obj_service->commonSettings()->legacyForm($form, $this->object)->saveTileImage();
388 
390  $this->object->getId(),
391  $form,
392  array(
394  )
395  );
396  }
397 
398 
399  //
400  // PAGES
401  //
402 
406  protected function getPageInstance(
407  ?int $a_page_id = null,
408  ?int $a_portfolio_id = null
410  if (!$a_portfolio_id && $this->object) {
411  $a_portfolio_id = $this->object->getId();
412  }
413  $page = new ilPortfolioTemplatePage((int) $a_page_id);
414  $page->setPortfolioId($a_portfolio_id);
415  return $page;
416  }
417 
421  protected function getPageGUIInstance(
422  int $a_page_id
424  $page_gui = new ilPortfolioTemplatePageGUI(
425  $this->object->getId(),
426  $a_page_id,
427  0,
428  $this->object->hasPublicComments()
429  );
430  $page_gui->setAdditional($this->getAdditional());
431  return $page_gui;
432  }
433 
434  public function getPageGUIClassName(): string
435  {
436  return "ilportfoliotemplatepagegui";
437  }
438 
439  protected function initCopyPageFormOptions(ilPropertyFormGUI $a_form): void
440  {
441  // always existing prtft
442  $hi = new ilHiddenInputGUI("target");
443  $hi->setValue("old");
444  $a_form->addItem($hi);
445 
446  $options = array();
448  foreach ($all as $id => $title) {
449  $options[$id] = $title;
450  }
451  $prtf = new ilSelectInputGUI($this->lng->txt("obj_prtt"), "prtf");
452  $prtf->setRequired(true);
453  $prtf->setOptions($options);
454  $a_form->addItem($prtf);
455  }
456 
457 
458  //
459  // BLOG
460  //
461 
465  protected function initBlogForm(): ilPropertyFormGUI
466  {
467  $form = new ilPropertyFormGUI();
468  $form->setFormAction($this->ctrl->getFormAction($this));
469 
470  $obj = new ilTextInputGUI($this->lng->txt("title"), "blog");
471  $obj->setRequired(true);
472  $form->addItem($obj);
473 
474  // save and cancel commands
475  $form->setTitle($this->lng->txt("prtf_add_blog") . ": " .
476  $this->object->getTitle());
477  $form->addCommandButton("saveBlog", $this->lng->txt("save"));
478  $form->addCommandButton("view", $this->lng->txt("cancel"));
479 
480  return $form;
481  }
482 
483  protected function saveBlog(): void
484  {
485  $form = $this->initBlogForm();
486  if ($form->checkInput() && $this->checkPermissionBool("write")) {
487  $page = $this->getPageInstance();
489  $page->setTitle($form->getInput("blog"));
490  $page->create(false);
491 
492  $this->tpl->setOnScreenMessage('success', $this->lng->txt("prtf_blog_page_created"), true);
493  $this->ctrl->redirect($this, "view");
494  }
495 
496  $this->tabs_gui->clearTargets();
497  $this->tabs_gui->setBackTarget(
498  $this->lng->txt("back"),
499  $this->ctrl->getLinkTarget($this, "view")
500  );
501 
502  $form->setValuesByPost();
503  $this->tpl->setContent($form->getHTML());
504  }
505 
506 
507  //
508  // TRANSMOGRIFIER
509  //
510 
511  public function preview(
512  bool $a_return = false,
513  $a_content = false,
514  bool $a_show_notes = true
515  ): string {
516  if (!$this->checkPermissionBool("write") &&
517  $this->checkPermissionBool("read")) {
518  $this->lng->loadLanguageModule("cntr");
519 
520  $button = ilLinkButton::getInstance();
521  $button->setPrimary(true);
522  $button->setCaption("prtf_create_portfolio_from_template");
523  $button->setUrl($this->ctrl->getLinkTarget($this, "createfromtemplate"));
524  $this->tpl->setHeaderActionMenu($button->render());
525  }
526 
527  return parent::preview($a_return, $a_content, $a_show_notes);
528  }
529 
530  public function createFromTemplateOld(): void
531  {
532  $this->ctrl->setParameterByClass("ilobjportfoliogui", "prtt_pre", $this->object->getId());
533  $this->ctrl->redirectByClass(array("ilDashboardGUI", "ilportfoliorepositorygui", "ilobjportfoliogui"), "create");
534  }
535 
536  public function createFromTemplate(): void
537  {
538  $this->ctrl->setParameterByClass("ilobjportfoliogui", "prtt_pre", $this->object->getId());
539  $this->ctrl->redirectByClass(array("ilDashboardGUI", "ilportfoliorepositorygui", "ilobjportfoliogui"), "createFromTemplateDirect");
540  }
541 
542  public static function _goto(string $a_target): void
543  {
545  global $DIC;
546 
547  $access = $DIC->access();
548  $ctrl = $DIC->ctrl();
549 
550  $id = explode("_", $a_target);
551  $ref_id = $id[0];
552 
553  $ctrl->setParameterByClass("ilRepositoryGUI", "ref_id", $ref_id);
554  if ($access->checkAccess("read", "", $ref_id)) {
555  $ctrl->redirectByClass("ilRepositoryGUI", "preview");
556  } else {
557  $ctrl->redirectByClass("ilRepositoryGUI", "infoScreen");
558  }
559  }
560 }
checkPermission(string $perm, string $cmd="", string $type="", int $ref_id=null)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilInfoScreenGUI.
redirectByClass( $a_class, string $a_cmd=null, string $a_anchor=null, bool $is_async=false)
executeCommand()
execute command
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
GUI class for the workflow of copying objects.
getItemByPostVar(string $a_post_var)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
checkAccess(string $a_permission, string $a_cmd, int $a_ref_id, string $a_type="", ?int $a_obj_id=null, ?int $a_tree_id=null)
check access for an object (provide $a_type and $a_obj_id if available for better performance) ...
static _getAllReferences(int $id)
get all reference ids for object ID
Help GUI class.
initBlogForm()
Init blog template page form.
This class represents a checkbox property in a property form.
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...
prepareOutput(bool $show_sub_objects=true)
static updateServiceSettingsForm(int $obj_id, ilPropertyFormGUI $form, array $services)
__construct(int $a_id=0, int $a_id_type=self::REPOSITORY_NODE_ID, int $a_parent_node_id=0)
const IL_CAL_UNIX
getPageGUIInstance(int $a_page_id)
Get portfolio template page gui instance.
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-...
static getAvailablePortfolioTemplates(string $a_permission="read")
static _lookupContainerSetting(int $a_id, string $a_keyword, string $a_default_value=null)
global $DIC
Definition: feed.php:28
ilToolbarGUI $toolbar
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 file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static clonePagesAndSettings(ilObjPortfolioBase $a_source, ilObjPortfolioBase $a_target, ?array $a_recipe=null, bool $copy_all=false)
Build template from portfolio and vice versa.
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $node_id=null)
initEditCustomForm(ilPropertyFormGUI $a_form)
setScreenIdComponent(string $a_comp)
static getPortfoliosOfUser(int $a_user_id)
Get portfolios of user.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
afterSave(ilObject $new_object)
Post (successful) object creation hook.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static initServiceSettingsForm(int $obj_id, ilPropertyFormGUI $form, array $services)
Navigation History of Repository Items.
initDidacticTemplate(ilPropertyFormGUI $form)
Portfolio view gui base class.
setTabs()
create tabs (repository/workspace switch)
preview(bool $a_return=false, $a_content=false, bool $a_show_notes=true)
ilObjectService $object_service
initCopyPageFormOptions(ilPropertyFormGUI $a_form)
infoScreen()
this one is called from the info button in the repository
__construct(Container $dic, ilPlugin $plugin)
$ilUser
Definition: imgupload.php:34
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
getPageInstance(?int $a_page_id=null, ?int $a_portfolio_id=null)
Get portfolio template page instance.
addHeaderAction()
Add header action menu.
$source
Definition: metadata.php:93
setAdditional(array $a_additional)
Set Additonal Information.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
ilAccessHandler $access