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