ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilObjContentPageGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
30 
47 {
49  private readonly \ILIAS\Style\Content\GUIService $content_style_gui;
50  private readonly ilNavigationHistory $navHistory;
51  private readonly Container $dic;
52  private bool $infoScreenEnabled = false;
54  private readonly ilHelpGUI $help;
55  private readonly \ILIAS\DI\UIServices $uiServices;
56  private readonly bool $in_page_editor_style_context;
57  private readonly LOMServices $lom_services;
58  private readonly Translations $translation;
59 
60  public function __construct(int $a_id = 0, int $a_id_type = self::REPOSITORY_NODE_ID, int $a_parent_node_id = 0)
61  {
62  global $DIC;
63 
64  parent::__construct($a_id, $a_id_type, $a_parent_node_id);
65 
66  $this->dic = $DIC;
67  $this->settings = $this->dic->settings();
68  $this->navHistory = $this->dic['ilNavigationHistory'];
69  $this->help = $DIC['ilHelp'];
70  $this->uiServices = $DIC->ui();
71  $this->lom_services = $DIC->learningObjectMetadata();
72 
73  $this->lng->loadLanguageModule('copa');
74  $this->lng->loadLanguageModule('style');
75  $this->lng->loadLanguageModule('content');
76  $this->lng->loadLanguageModule('rep');
77 
78  if ($this->object instanceof ilObjContentPage) {
79  $this->infoScreenEnabled = (bool) ilContainer::_lookupContainerSetting(
80  $this->object->getId(),
82  '1'
83  );
84  }
85 
86  $this->pageMetricsService = new PageMetricsService(
87  new PageMetricsRepositoryImp($DIC->database()),
88  $DIC->refinery()
89  );
90  $cs = $DIC->contentStyle();
91  $this->content_style_gui = $cs->gui();
92  if (is_object($this->object)) {
93  $this->content_style_domain = $cs->domain()->styleForRefId($this->object->getRefId());
94  $this->translation = $this->object->getObjectProperties()->getPropertyTranslations();
95  }
96 
97  $this->in_page_editor_style_context = $this->http->wrapper()->query()->has(
98  self::HTTP_PARAM_PAGE_EDITOR_STYLE_CONTEXT
99  );
100  $this->ctrl->saveParameterByClass(
101  ilObjectContentStyleSettingsGUI::class,
102  self::HTTP_PARAM_PAGE_EDITOR_STYLE_CONTEXT
103  );
104  }
105 
106  public static function _goto(string $target): void
107  {
108  global $DIC;
109  $main_tpl = $DIC->ui()->mainTemplate();
110 
111  $targetAttributes = explode('_', $target);
112  $refId = (int) $targetAttributes[0];
113 
114  if ($refId <= 0) {
115  $DIC['ilErr']->raiseError($DIC->language()->txt('msg_no_perm_read'), $DIC['ilErr']->FATAL);
116  }
117 
118  if ($DIC->access()->checkAccess('read', '', $refId)) {
119  $DIC->ctrl()->setTargetScript('ilias.php');
120  $DIC->ctrl()->setParameterByClass(self::class, 'ref_id', $refId);
121  $DIC->ctrl()->redirectByClass([
122  ilRepositoryGUI::class,
123  self::class,
124  ], self::UI_CMD_VIEW);
125  } elseif ($DIC->access()->checkAccess('visible', '', $refId)) {
127  } elseif ($DIC->access()->checkAccess('read', '', ROOT_FOLDER_ID)) {
128  $main_tpl->setOnScreenMessage(
129  'info',
130  sprintf(
131  $DIC->language()->txt('msg_no_perm_read_item'),
133  ),
134  true
135  );
136 
137  $DIC->ctrl()->setTargetScript('ilias.php');
138  $DIC->ctrl()->setParameterByClass(ilRepositoryGUI::class, 'ref_id', ROOT_FOLDER_ID);
139  $DIC->ctrl()->redirectByClass(ilRepositoryGUI::class);
140  }
141 
142  $DIC['ilErr']->raiseError($DIC->language()->txt('msg_no_perm_read'), $DIC['ilErr']->FATAL);
143  }
144 
145  public function getType(): string
146  {
147  return self::OBJ_TYPE;
148  }
149 
150  protected function setTabs(): void
151  {
152  if ($this->in_page_editor_style_context) {
153  return;
154  }
155 
156  $this->help->setScreenIdComponent($this->object->getType());
157 
158  if ($this->checkPermissionBool('read')) {
159  $this->tabs_gui->addTab(
160  self::UI_TAB_ID_CONTENT,
161  $this->lng->txt('content'),
162  $this->ctrl->getLinkTarget($this, self::UI_CMD_VIEW)
163  );
164  }
165 
166  if ($this->infoScreenEnabled && ($this->checkPermissionBool('visible') || $this->checkPermissionBool('read'))) {
167  $this->tabs_gui->addTab(
168  self::UI_TAB_ID_INFO,
169  $this->lng->txt('info_short'),
170  $this->ctrl->getLinkTargetByClass(ilInfoScreenGUI::class, 'showSummary')
171  );
172  }
173 
174  if ($this->checkPermissionBool('write')) {
175  $this->tabs_gui->addTab(
176  self::UI_TAB_ID_SETTINGS,
177  $this->lng->txt('settings'),
178  $this->ctrl->getLinkTarget($this, self::UI_CMD_EDIT)
179  );
180  }
181 
182  if (ilLearningProgressAccess::checkAccess($this->object->getRefId())) {
183  $this->tabs_gui->addTab(
184  self::UI_TAB_ID_LP,
185  $this->lng->txt('learning_progress'),
186  $this->ctrl->getLinkTargetByClass(ilLearningProgressGUI::class)
187  );
188  }
189 
190  if ($this->checkPermissionBool('write')) {
191  $this->tabs_gui->addTab(
192  self::UI_TAB_ID_MD,
193  $this->lng->txt('meta_data'),
194  $this->ctrl->getLinkTargetByClass(ilMDEditorGUI::class)
195  );
196  }
197 
198  if ($this->checkPermissionBool('write')) {
199  $this->tabs_gui->addTab(
200  self::UI_TAB_ID_EXPORT,
201  $this->lng->txt('export'),
202  $this->ctrl->getLinkTargetByClass(ilExportGUI::class)
203  );
204  }
205 
206  if ($this->checkPermissionBool('edit_permission')) {
207  $this->tabs_gui->addTab(
208  self::UI_TAB_ID_PERMISSIONS,
209  $this->lng->txt('perm_settings'),
210  $this->ctrl->getLinkTargetByClass(ilPermissionGUI::class, 'perm')
211  );
212  }
213  }
214 
215  public function executeCommand(): void
216  {
217  $nextClass = $this->ctrl->getNextClass($this) ?? '';
218  $cmd = $this->ctrl->getCmd(self::UI_CMD_VIEW) ?? '';
219 
220  $this->addToNavigationHistory();
221 
222  if (!$this->in_page_editor_style_context &&
223  strtolower($nextClass) !== strtolower(ilObjectContentStyleSettingsGUI::class) &&
224  (strtolower($cmd) !== strtolower(self::UI_CMD_EDIT) || strtolower($nextClass) !== strtolower(
225  ilContentPagePageGUI::class
226  ))) {
227  $this->renderHeaderActions();
228  }
229 
230  switch (strtolower($nextClass)) {
231  case strtolower(TranslationGUI::class):
232  $this->checkPermission('write');
233 
234  $this->prepareOutput();
235  $this->tabs_gui->activateTab(self::UI_TAB_ID_SETTINGS);
236  $this->setSettingsSubTabs(self::UI_TAB_ID_I18N);
237 
238  $transgui = new TranslationGUI(
239  $this->getObject(),
240  $this->lng,
241  $this->access,
242  $this->user,
243  $this->ctrl,
244  $this->tpl,
245  $this->ui_factory,
246  $this->ui_renderer,
247  $this->http,
248  $this->refinery,
249  $this->toolbar
250  );
251  $this->ctrl->forwardCommand($transgui);
252  break;
253 
254  case strtolower(ilObjectContentStyleSettingsGUI::class):
255  $this->checkPermission('write');
256  $this->prepareOutput();
257 
258  if ($this->in_page_editor_style_context) {
259  $this->tabs_gui->setBackTarget(
260  $this->lng->txt('back'),
261  $this->ctrl->getLinkTarget(new ilContentPagePageGUI($this->object->getId()), 'edit')
262  );
263  } else {
264  $this->tabs_gui->activateTab(self::UI_TAB_ID_SETTINGS);
265  $this->setSettingsSubTabs(self::UI_TAB_ID_STYLE);
266  }
267 
268  $settings_gui = $this->content_style_gui
269  ->objectSettingsGUIForRefId(
270  null,
271  $this->object->getRefId()
272  );
273  $this->ctrl->forwardCommand($settings_gui);
274  break;
275 
276  case strtolower(ilContentPagePageGUI::class):
277  $isMediaRequest = in_array(
278  strtolower($cmd),
279  array_map('strtolower', [
280  self::UI_CMD_COPAGE_DOWNLOAD_FILE,
281  self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN,
282  self::UI_CMD_COPAGE_DISPLAY_MEDIA,
283  self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH,
284  ]),
285  true
286  );
287  if ($isMediaRequest) {
288  if (!$this->checkPermissionBool('read')) {
289  $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->MESSAGE);
290  }
291  } elseif (!$this->checkPermissionBool('write') || $this->user->isAnonymous()) {
292  $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->MESSAGE);
293  }
294 
295  $this->prepareOutput();
296 
297  $this->content_style_gui->addCss($this->tpl, $this->object->getRefId());
298  $this->tpl->setCurrentBlock('SyntaxStyle');
299  $this->tpl->setVariable('LOCATION_SYNTAX_STYLESHEET', ilObjStyleSheet::getSyntaxStylePath());
300  $this->tpl->parseCurrentBlock();
301 
303  $obj = $this->object;
304  $forwarder = new ilContentPagePageCommandForwarder(
305  $this->http,
306  $this->ctrl,
307  $this->tabs_gui,
308  $this->lng,
309  $obj,
310  $this->translation,
311  $this->user,
312  $this->refinery,
313  $this->content_style_domain
314  );
315  $forwarder->setIsMediaRequest($isMediaRequest);
316 
317  $forwarder->addUpdateListener(function (PageUpdatedEvent $event): void {
318  $this->pageMetricsService->store(
320  $this->object->getId(),
321  $event->page()->getLanguage()
322  )
323  );
324  });
325 
326  $pageContent = $forwarder->forward();
327  if ($pageContent !== '') {
328  $this->tpl->setContent($pageContent);
329  }
330  break;
331 
332  case strtolower(ilInfoScreenGUI::class):
333  if (!$this->infoScreenEnabled) {
334  return;
335  }
336  $this->prepareOutput();
337 
338  $this->infoScreenForward();
339  break;
340 
341  case strtolower(ilCommonActionDispatcherGUI::class):
342  $this->prepareOutput();
344  break;
345 
346  case strtolower(ilPermissionGUI::class):
347  $this->checkPermission('edit_permission');
348 
349  $this->prepareOutput();
350  $this->tabs_gui->activateTab(self::UI_TAB_ID_PERMISSIONS);
351 
352  $this->ctrl->forwardCommand(new ilPermissionGUI($this));
353  break;
354 
355  case strtolower(ilMDEditorGUI::class):
356  $this->checkPermission('write');
357 
358  $this->prepareOutput();
359  $this->tabs_gui->activateTab(self::UI_TAB_ID_MD);
360 
361  $md_gui = new ilMDEditorGUI($this->object->getId(), 0, $this->object->getType());
362  $md_gui->addObserver($this->object, 'MDUpdateListener', 'General');
363  $this->ctrl->forwardCommand($md_gui);
364  break;
365 
366  case strtolower(ilLearningProgressGUI::class):
367  if (!ilLearningProgressAccess::checkAccess($this->object->getRefId())) {
368  $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->MESSAGE);
369  }
370 
371  $this->prepareOutput();
372  $this->tabs_gui->activateTab(self::UI_TAB_ID_LP);
373 
374  $usr_id = 0;
375  if ($this->http->wrapper()->query()->has('user_id')) {
376  $usr_id = $this->http->wrapper()->query()->retrieve(
377  'user_id',
378  $this->refinery->kindlyTo()->int()
379  );
380  }
381 
382  $this->ctrl->forwardCommand(
385  $this->object->getRefId(),
386  $usr_id === 0 ? $this->user->getId() : $usr_id
387  )
388  );
389  break;
390 
391  case strtolower(ilExportGUI::class):
392  $this->checkPermission('write');
393 
394  $this->prepareOutput();
395  $this->tabs_gui->activateTab(self::UI_TAB_ID_EXPORT);
396 
397  $gui = new ilExportGUI($this);
398  $this->ctrl->forwardCommand($gui);
399  break;
400 
401  case strtolower(ilObjectCopyGUI::class):
402  $this->tpl->loadStandardTemplate();
403 
404  $gui = new ilObjectCopyGUI($this);
405  $gui->setType(self::OBJ_TYPE);
406 
407  $this->ctrl->forwardCommand($gui);
408  break;
409 
410  default:
411  $settingsCommands = array_map('strtolower', [self::UI_CMD_EDIT, self::UI_CMD_UPDATE]);
412  switch (true) {
413  case in_array(strtolower($cmd), $settingsCommands, true):
414  $this->setSettingsSubTabs(self::UI_TAB_ID_SETTINGS);
415  break;
416  }
417 
418  parent::executeCommand();
419  }
420  }
421 
422  protected function addToDesk(): void
423  {
424  $this->addToDeskObject();
425  }
426 
427  protected function removeFromDesk(): void
428  {
429  $this->removeFromDeskObject();
430  }
431 
432  public function addToNavigationHistory(): void
433  {
434  if (!$this->getCreationMode() && $this->checkPermissionBool('read')) {
435  $this->navHistory->addItem(
436  $this->object->getRefId(),
437  ilLink::_getLink($this->object->getRefId(), $this->object->getType()),
438  $this->object->getType()
439  );
440  }
441  }
442 
443  public function renderHeaderActions(): void
444  {
445  if (!$this->getCreationMode() && $this->checkPermissionBool('read')) {
446  $this->addHeaderAction();
447  }
448  }
449 
450  public function infoScreenForward(): void
451  {
452  if (!$this->infoScreenEnabled) {
453  return;
454  }
455 
456  if (!$this->checkPermissionBool('visible') && !$this->checkPermissionBool('read')) {
457  $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->MESSAGE);
458  }
459 
460  if (strtolower($this->ctrl->getCmd() ?? '') === 'infoscreen') {
461  $this->ctrl->redirectByClass(ilInfoScreenGUI::class, 'showSummary');
462  }
463 
464  $this->tabs_gui->activateTab(self::UI_TAB_ID_INFO);
465 
466  $info = new ilInfoScreenGUI($this);
467  $info->enableLearningProgress();
468  $info->enablePrivateNotes();
469  $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType());
470 
471  $this->ctrl->forwardCommand($info);
472  }
473 
474  protected function setSettingsSubTabs(string $activeTab): void
475  {
476  if ($this->checkPermissionBool('write')) {
477  $this->tabs_gui->addSubTab(
478  self::UI_TAB_ID_SETTINGS,
479  $this->lng->txt('general'),
480  $this->ctrl->getLinkTarget($this, self::UI_CMD_EDIT)
481  );
482 
483  $this->tabs_gui->addSubTab(
484  self::UI_TAB_ID_STYLE,
485  $this->lng->txt('cont_style'),
486  $this->ctrl->getLinkTargetByClass("ilobjectcontentstylesettingsgui", "")
487  );
488 
489  $this->tabs_gui->addSubTab(
490  self::UI_TAB_ID_I18N,
491  $this->lng->txt('obj_multilinguality'),
492  $this->ctrl->getLinkTargetByClass(TranslationGUI::class)
493  );
494 
495  $this->tabs_gui->activateSubTab($activeTab);
496  }
497  }
498 
499  protected function addLocatorItems(): void
500  {
501  if ($this->object instanceof ilObject) {
502  $this->locator->addItem(
503  $this->object->getTitle(),
504  $this->ctrl->getLinkTarget($this, self::UI_CMD_VIEW),
505  '',
506  $this->object->getRefId()
507  );
508  }
509  }
510 
511  public function infoScreen(): void
512  {
513  $this->infoScreenForward();
514  }
515 
516  public function view(): void
517  {
518  $this->checkPermission('read');
519 
520  $this->populateContentToolbar();
521 
522  $this->tabs_gui->activateTab(self::UI_TAB_ID_CONTENT);
523 
524  $this->tpl->setPermanentLink($this->object->getType(), $this->object->getRefId(), '', '_top');
525 
526  $this->tpl->setContent($this->getContent());
527  }
528 
529  protected function populateContentToolbar(): void
530  {
531  if (!$this->user->isAnonymous() && $this->checkPermissionBool('write')) {
532  $this->lng->loadLanguageModule('cntr');
533  $this->toolbar->addComponent(
534  $this->uiServices->factory()->button()->primary(
535  $this->lng->txt('cntr_text_media_editor'),
536  $this->ctrl->getLinkTargetByClass(ilContentPagePageGUI::class, 'edit')
537  )
538  );
539  }
540  }
541 
546  public function getContent(string $ctrlLink = ''): string
547  {
548  if ($this->checkPermissionBool('read')) {
549  $this->object->trackProgress($this->user->getId());
550 
551  $this->initStyleSheets();
552 
553  $forwarder = new ilContentPagePageCommandForwarder(
554  $this->http,
555  $this->ctrl,
556  $this->tabs_gui,
557  $this->lng,
558  $this->object,
559  $this->translation,
560  $this->user,
561  $this->refinery,
562  $this->content_style_domain
563  );
565 
566  return $forwarder->forward($ctrlLink);
567  }
568 
569  return '';
570  }
571 
572  protected function initStyleSheets(): void
573  {
574  $this->content_style_gui->addCss($this->tpl, $this->object->getRefId());
575  $this->tpl->setCurrentBlock('SyntaxStyle');
576  $this->tpl->setVariable('LOCATION_SYNTAX_STYLESHEET', ilObjStyleSheet::getSyntaxStylePath());
577  $this->tpl->parseCurrentBlock();
578  }
579 
580  protected function afterSave(ilObject $new_object): void
581  {
582  $new_object->getObjectProperties()->storePropertyTranslations(
583  $new_object->getObjectTranslation()->withLanguage(
584  new Language(
585  $this->lng->getDefaultLanguage(),
586  $new_object->getTitle(),
587  $new_object->getDescription(),
588  true
589  )
590  )
591  );
592 
593  $this->tpl->setOnScreenMessage('success', $this->lng->txt('object_added'), true);
594  $this->ctrl->redirect($this, 'edit');
595  }
596 
597  protected function setTitleAndDescription(): void
598  {
599  parent::setTitleAndDescription();
600 
601  $icon = ilObject::_getIcon($this->object->getId(), 'big', $this->object->getType());
602  $this->tpl->setTitleIcon($icon, $this->lng->txt('obj_' . $this->object->getType()));
603  }
604 
605  protected function initEditCustomForm(ilPropertyFormGUI $a_form): void
606  {
607  $this->addAvailabilitySection($a_form);
608 
609  $presentationHeader = new ilFormSectionHeaderGUI();
610  $presentationHeader->setTitle($this->lng->txt('settings_presentation_header'));
611  $a_form->addItem($presentationHeader);
612 
613  $this->object_service->commonSettings()->legacyForm($a_form, $this->object)->addIcon();
614  $this->object_service->commonSettings()->legacyForm($a_form, $this->object)->addTileImage();
615 
616  $sh = new ilFormSectionHeaderGUI();
617  $sh->setTitle($this->lng->txt('obj_features'));
618  $a_form->addItem($sh);
619 
621  $this->object->getId(),
622  $a_form,
623  [
625  ]
626  );
627 
628  if ($this->getCreationMode() !== true && count($this->object->getObjectTranslation()->getLanguages()) > 1) {
629  $language = '';
630  foreach ($this->lom_services->dataHelper()->getAllLanguages() as $lom_lang) {
631  if ($lom_lang->value() === $this->object->getObjectTranslation()->getDefaultLanguage()) {
632  $language = $lom_lang->presentableLabel();
633  }
634  }
635  $a_form->getItemByPostVar('title')
636  ->setInfo(
637  implode(
638  ': ',
639  [
640  $this->lng->txt('language'),
641  $language
642  ]
643  )
644  );
645  }
646  }
647 
648  private function addAvailabilitySection(ilPropertyFormGUI $form): void
649  {
650  $section = new ilFormSectionHeaderGUI();
651  $section->setTitle($this->lng->txt('rep_activation_availability'));
652  $form->addItem($section);
653 
654  $online = new ilCheckboxInputGUI($this->lng->txt('rep_activation_online'), 'activation_online');
655  $online->setInfo($this->lng->txt('copa_activation_online_info'));
656  $form->addItem($online);
657  }
658 
659  protected function getEditFormCustomValues(array &$a_values): void
660  {
661  if (count($this->object->getObjectTranslation()->getLanguages()) > 1) {
662  $a_values['title'] = $this->object->getObjectTranslation()->getDefaultTitle();
663  $a_values['desc'] = $this->object->getObjectTranslation()->getDefaultDescription();
664  }
665 
666  $a_values['activation_online'] = $this->object->getOfflineStatus() === false;
668  }
669 
670  protected function updateCustom(ilPropertyFormGUI $form): void
671  {
672  $this->object->setOfflineStatus(!(bool) $form->getInput('activation_online'));
673  $this->object->update();
674 
676  $this->object->getId(),
677  $form,
678  [
680  ]
681  );
682  $this->object_service->commonSettings()->legacyForm($form, $this->object)->saveIcon();
683  $this->object_service->commonSettings()->legacyForm($form, $this->object)->saveTileImage();
684  }
685 
686  public function editStyleProperties(): void
687  {
688  $this->content_style_gui->redirectToObjectSettings();
689  }
690 }
getContent(string $ctrlLink='')
readonly LOMServices $lom_services
readonly ILIAS Style Content GUIService $content_style_gui
executeCommand()
execute command
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
New implementation of ilObjectGUI.
GUI class for the workflow of copying objects.
getItemByPostVar(string $a_post_var)
const ROOT_FOLDER_ID
Definition: constants.php:32
updateCustom(ilPropertyFormGUI $form)
Help GUI class.
Class handles translation mode for an object.
External facade for object content styles.
static _gotoRepositoryNode(int $ref_id, string $cmd="")
$refId
Definition: xapitoken.php:58
prepareOutput(bool $show_sub_objects=true)
ilObjContentPageGUI: ilRepositoryGUI ilObjContentPageGUI: ilAdministrationGUI ilObjContentPageGUI: ...
static updateServiceSettingsForm(int $obj_id, ilPropertyFormGUI $form, array $services)
static checkAccess(int $a_ref_id, bool $a_allow_only_read=true)
check access to learning progress
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-...
Customizing of pimple-DIC for ILIAS.
Definition: Container.php:35
static _lookupObjId(int $ref_id)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static http()
Fetches the global http state from ILIAS.
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $node_id=null)
static _lookupTitle(int $obj_id)
readonly Translations $translation
getEditFormCustomValues(array &$a_values)
global $DIC
Definition: shib_login.php:26
readonly PageMetricsService $pageMetricsService
readonly bool $in_page_editor_style_context
static initServiceSettingsForm(int $obj_id, ilPropertyFormGUI $form, array $services)
Last visited history for repository items.
addObserver(object $a_class, string $a_method, string $a_element)
checkPermission(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
ILIAS Style Content Object ObjectFacade $content_style_domain
afterSave(ilObject $new_object)
__construct(int $a_id=0, int $a_id_type=self::REPOSITORY_NODE_ID, int $a_parent_node_id=0)
__construct(Container $dic, ilPlugin $plugin)
readonly ilNavigationHistory $navHistory
addAvailabilitySection(ilPropertyFormGUI $form)
$info
Definition: entry_point.php:21
static _lookupContainerSetting(int $a_id, string $a_keyword, ?string $a_default_value=null)
readonly ILIAS DI UIServices $uiServices
static _goto(string $target)
addHeaderAction()
Add header action menu.
final const string PRESENTATION_MODE_PRESENTATION
presentation mode for requesting
Class ilObjUserTrackingGUI.
setSettingsSubTabs(string $activeTab)
initEditCustomForm(ilPropertyFormGUI $a_form)
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...