ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
class.ilObjDataCollectionGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
23 
39 {
40  public const GET_REF_ID = 'ref_id';
41  public const GET_TABLE_ID = 'table_id';
42  public const GET_VIEW_ID = 'tableview_id';
43  public const GET_RECORD_ID = 'record_id';
44 
45  public const TAB_EDIT_DCL = 'settings';
46  public const TAB_LIST_TABLES = 'dcl_tables';
47  public const TAB_META_DATA = 'meta_data';
48  public const TAB_EXPORT = 'export';
49  public const TAB_LIST_PERMISSIONS = 'perm_settings';
50  public const TAB_INFO = 'info_short';
51  public const TAB_CONTENT = 'content';
53  public ?ilObject $object = null;
54  protected ilCtrl $ctrl;
55  protected ilLanguage $lng;
57  protected ilTabsGUI $tabs;
58  protected int $table_id;
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->http = $DIC->http();
67  $this->tabs = $DIC->tabs();
68 
69  $this->lng->loadLanguageModule('dcl');
70  $this->lng->loadLanguageModule('content');
71  $this->lng->loadLanguageModule('obj');
72  $this->lng->loadLanguageModule('cntr');
73 
74  $this->setTableId($this->getRefId());
75 
76  if (!$this->ctrl->isAsynch()) {
77  $this->addJavaScript();
78  }
79 
80  $this->ctrl->saveParameter($this, 'table_id');
81  }
82 
83  private function setTableId(int $objectOrRefId = 0): void
84  {
85  if ($this->http->wrapper()->query()->has('table_id')) {
86  $this->table_id = $this->http->wrapper()->query()->retrieve('table_id', $this->refinery->kindlyTo()->int());
87  } elseif ($this->http->wrapper()->query()->has('tableview_id')) {
88  $this->table_id = ilDclTableView::find(
89  $this->http->wrapper()->query()->retrieve('tableview_id', $this->refinery->kindlyTo()->int())
90  )->getTableId();
91  } elseif ($objectOrRefId > 0) {
92  $tables = ilObjDataCollectionAccess::hasWriteAccess($this->ref_id) ? $this->object->getTables() : $this->object->getVisibleTables();
93  if ($tables !== []) {
94  $this->table_id = array_shift($tables)->getId();
95  }
96  }
97  }
98 
99  public function getObjectId(): int
100  {
101  return $this->obj_id;
102  }
103 
104  private function addJavaScript(): void
105  {
106  $this->tpl->addJavaScript('assets/js/datacollection.js');
107  }
108 
109  public function getStandardCmd(): string
110  {
111  return 'render';
112  }
113 
114  public function getType(): string
115  {
117  }
118 
119  public function executeCommand(): void
120  {
121  global $DIC;
122 
123  $ilNavigationHistory = $DIC['ilNavigationHistory'];
124  $DIC->help()->setScreenIdComponent('dcl');
125  $link = $this->ctrl->getLinkTarget($this, 'render');
126 
127  if ($this->getObject() !== null) {
128  $ilNavigationHistory->addItem($this->object->getRefId(), $link, 'dcl');
129  }
130 
131  $next_class = $this->ctrl->getNextClass($this);
132  $cmd = $this->ctrl->getCmd();
133 
134  if (!$this->getCreationMode() && $next_class != 'ilinfoscreengui' && $cmd !== 'infoScreen' && !$this->checkPermissionBool('read')) {
135  $DIC->ui()->mainTemplate()->loadStandardTemplate();
136  $DIC->ui()->mainTemplate()->setContent('Permission Denied.');
137  return;
138  }
139 
140  switch ($next_class) {
141  case strtolower(ilInfoScreenGUI::class):
142  $this->prepareOutput();
143  $this->tabs->activateTab(self::TAB_INFO);
144  $this->infoScreenForward();
145  break;
146  case strtolower(ilCommonActionDispatcherGUI::class):
147  $this->prepareOutput();
149  $gui->enableCommentsSettings(false);
150  $this->ctrl->forwardCommand($gui);
151  break;
152  case strtolower(ilPermissionGUI::class):
153  $this->prepareOutput();
154  $this->tabs->activateTab(self::TAB_LIST_PERMISSIONS);
155  $perm_gui = new ilPermissionGUI($this);
156  $this->ctrl->forwardCommand($perm_gui);
157  break;
158  case strtolower(ilObjectCopyGUI::class):
159  $cp = new ilObjectCopyGUI($this);
160  $cp->setType('dcl');
161  $DIC->ui()->mainTemplate()->loadStandardTemplate();
162  $this->ctrl->forwardCommand($cp);
163  break;
164  case strtolower(ilDclTableListGUI::class):
165  $this->prepareOutput();
166  $this->tabs->activateTab(self::TAB_LIST_TABLES);
167  $tablelist_gui = new ilDclTableListGUI($this);
168  $this->ctrl->forwardCommand($tablelist_gui);
169  break;
170  case strtolower(ilDclRecordListGUI::class):
171  $this->addHeaderAction();
172  $this->prepareOutput();
173  $this->tabs->activateTab(self::TAB_CONTENT);
174  try {
175  $recordlist_gui = new ilDclRecordListGUI($this, $this->table_id, $this->getTableViewId());
176  $this->ctrl->forwardCommand($recordlist_gui);
177  } catch (ilDclNoTableviewException $e) {
178  $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('dcl_no_tableview_found'));
179  }
180  break;
181  case strtolower(ilDclRecordEditGUI::class):
182  $this->prepareOutput();
183  $this->tabs->activateTab(self::TAB_CONTENT);
184  $recordedit_gui = new ilDclRecordEditGUI($this, $this->table_id, $this->getTableViewId());
185  $this->ctrl->forwardCommand($recordedit_gui);
186  break;
187  case strtolower(ilObjFileGUI::class):
188  $this->prepareOutput();
189  $this->tabs->activateTab(self::TAB_CONTENT);
190  $file_gui = new ilObjFile($this->getRefId());
191  $this->ctrl->forwardCommand($file_gui);
192  break;
193  case strtolower(ilRatingGUI::class):
194  $rgui = new ilRatingGUI();
195 
196  $record_id = $this->http->wrapper()->query()->retrieve('record_id', $this->refinery->kindlyTo()->int());
197  $field_id = $this->http->wrapper()->query()->retrieve('field_id', $this->refinery->kindlyTo()->int());
198 
199  $rgui->setObject($record_id, 'dcl_record', $field_id, 'dcl_field');
200  $rgui->executeCommand();
201  $this->ctrl->redirectToURL($this->http->request()->getServerParams()['HTTP_REFERER'] ?? '');
202  break;
203  case strtolower(ilDclDetailedViewGUI::class):
204  $this->prepareOutput();
205  $recordview_gui = new ilDclDetailedViewGUI($this, $this->getTableViewId());
206  $this->ctrl->forwardCommand($recordview_gui);
207  $this->tabs->setBackTarget(
208  $this->lng->txt('back'),
209  $this->ctrl->getLinkTargetByClass(
210  ilDclRecordListGUI::class,
212  )
213  );
214  break;
215  case strtolower(ilNoteGUI::class):
216  $this->prepareOutput();
217  $recordviewGui = new ilDclDetailedViewGUI($this, $this->getTableViewId());
218  $this->ctrl->forwardCommand($recordviewGui);
219  $this->tabs->clearTargets();
220  $this->tabs->setBackTarget($this->lng->txt('back'), $this->ctrl->getLinkTarget($this, ''));
221  break;
222  case strtolower(ilExportGUI::class):
223  $this->prepareOutput();
224  $this->handleExport();
225  break;
226  case strtolower(ilDclPropertyFormGUI::class):
227  $recordedit_gui = new ilDclRecordEditGUI($this, $this->table_id, $this->getTableViewId());
228  $recordedit_gui->getRecord();
229  $recordedit_gui->initForm();
230  $form = $recordedit_gui->getForm();
231  $this->ctrl->forwardCommand($form);
232  break;
233  case strtolower(ilObjectMetaDataGUI::class):
234  $this->checkPermission('write');
235  $this->prepareOutput();
236  $this->tabs->activateTab(self::TAB_META_DATA);
237  $gui = new ilObjectMetaDataGUI($this->object);
238  $this->ctrl->forwardCommand($gui);
239  break;
240  case strtolower(ilObjectContentStyleSettingsGUI::class):
241  $this->prepareOutput();
242  $this->setEditTabs();
243  $this->tabs->activateTab('settings');
244  $this->tabs->activateSubTab('cont_style');
245  global $DIC;
246  $settings_gui = $DIC->contentStyle()->gui()->objectSettingsGUIForRefId(null, $this->ref_id);
247  $this->ctrl->forwardCommand($settings_gui);
248  break;
249  default:
250  parent::executeCommand();
251  }
252  }
253 
254  protected function handleExport(bool $do_default = false): void
255  {
256  $this->tabs->setTabActive(self::TAB_EXPORT);
257  $exp_gui = new ilExportGUI($this);
258  if ($do_default) {
259  $exp_gui->listExportFiles();
260  } else {
261  $this->ctrl->forwardCommand($exp_gui);
262  }
263  }
264 
265  protected function handleExportAsync(): void
266  {
267  $this->tabs->setTabActive(self::TAB_EXPORT);
268  $exp_gui = new ilExportGUI($this);
269  $exporter = new ilDclContentExporter($this->object->getRefId(), null);
270  $exporter->exportAsync();
271  $this->ctrl->redirect($exp_gui);
272  }
273 
274  protected function getTableViewId(): int
275  {
276  $tableview_id = null;
277  if ($this->http->wrapper()->query()->has('tableview_id')) {
278  $tableview_id = $this->http->wrapper()->query()->retrieve(
279  'tableview_id',
280  $this->refinery->kindlyTo()->int()
281  );
282  }
283  if ($this->http->wrapper()->post()->has('tableview_id')) {
284  $tableview_id = $this->http->wrapper()->post()->retrieve(
285  'tableview_id',
286  $this->refinery->kindlyTo()->int()
287  );
288  }
289  if (!$tableview_id) {
290  $table_obj = ilDclCache::getTableCache($this->table_id);
291  $tableview_id = $table_obj->getFirstTableViewId();
292  }
293  if ($tableview_id === null) {
294  throw new ilDclNoTableviewException('No visible tableview configured!');
295  }
296  return $tableview_id;
297  }
298 
299  public function infoScreen(): void
300  {
301  $this->ctrl->redirectByClass(ilInfoScreenGUI::class, 'showSummary');
302  }
303 
304  public function render(): void
305  {
306  $this->listRecords();
307  }
308 
309  public function infoScreenForward(): void
310  {
311  $this->tabs->activateTab(self::TAB_INFO);
312 
313  if (!$this->checkPermissionBool('visible')) {
314  $this->checkPermission('read');
315  }
316 
317  $info = new ilInfoScreenGUI($this);
318  $info->enablePrivateNotes();
319  $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType());
320 
321  $this->ctrl->forwardCommand($info);
322  }
323 
324  protected function addLocatorItems(): void
325  {
326  if (is_object($this->object) === true) {
327  $this->locator->addItem(
328  $this->object->getTitle(),
329  $this->ctrl->getLinkTarget($this, ''),
330  (string) $this->object->getRefId()
331  );
332  }
333  }
334 
335  public static function _goto(string $a_target): void
336  {
337  global $DIC;
338  $lng = $DIC->language();
339 
340  $ctrl = $DIC->ctrl();
341  $access = $DIC->access();
342  $tpl = $DIC->ui()->mainTemplate();
343 
344  $values = [self::GET_REF_ID, self::GET_TABLE_ID, self::GET_VIEW_ID, self::GET_RECORD_ID];
345  $values = array_combine($values, array_pad(explode('_', $a_target), count($values), 0));
346 
347  $ref_id = (int) $values[self::GET_REF_ID];
348 
349  if ($access->checkAccess('read', '', $ref_id)) {
350  $ctrl->setParameterByClass(ilRepositoryGUI::class, self::GET_REF_ID, $ref_id);
351  $object = new ilObjDataCollection($ref_id);
352  $table_id = (int) $values[self::GET_TABLE_ID];
353  if ($table_id !== 0 && isset($object->getVisibleTables()[$table_id])) {
354  $ctrl->setParameterByClass(ilObjDataCollectionGUI::class, self::GET_TABLE_ID, $table_id);
355  $table = $object->getVisibleTables()[$table_id];
356  $view_id = (int) $values[self::GET_VIEW_ID];
357  if ($view_id !== 0 && isset($table->getTableViews()[$view_id])) {
358  $ctrl->setParameterByClass(ilObjDataCollectionGUI::class, self::GET_VIEW_ID, $view_id);
359  }
360  $record_id = (int) $values[self::GET_RECORD_ID];
361  if ($record_id !== 0 && isset($table->getRecords()[$record_id])) {
362  $ctrl->setParameterByClass(ilDclDetailedViewGUI::class, self::GET_RECORD_ID, $record_id);
363  $ctrl->redirectByClass([ilRepositoryGUI::class, self::class, ilDclDetailedViewGUI::class], 'renderRecord');
364  }
365  }
366  $ctrl->redirectByClass([ilRepositoryGUI::class, self::class, ilDclRecordListGUI::class], 'listRecords');
367  } elseif ($access->checkAccess('visbile', '', $ref_id)) {
368  ilObjectGUI::_gotoRepositoryNode((int) $a_target, 'infoScreen');
369  } else {
370  $message = sprintf(
371  $lng->txt('msg_no_perm_read_item'),
373  );
374  $tpl->setOnScreenMessage('failure', $message, true);
375 
377  }
378  }
379 
380  protected function afterSave(ilObject $new_object): void
381  {
382  $this->tpl->setOnScreenMessage('success', $this->lng->txt('object_added'), true);
383  $this->ctrl->redirectByClass(ilDclTableListGUI::class, 'listTables');
384  }
385 
386  protected function setTabs(): void
387  {
388  $ref_id = $this->object->getRefId();
389 
390  if ($this->access->checkAccess('read', '', $ref_id) === true) {
391  $this->addTab(self::TAB_CONTENT, $this->ctrl->getLinkTargetByClass(ilDclRecordListGUI::class, 'show'));
392  }
393 
394  if ($this->access->checkAccess('visible', '', $ref_id) === true || $this->access->checkAccess('read', '', $ref_id) === true) {
395  $this->addTab(self::TAB_INFO, $this->ctrl->getLinkTargetByClass(ilInfoScreenGUI::class, 'showSummary'));
396  }
397 
398  if ($this->access->checkAccess('write', '', $ref_id) === true) {
399  $this->addTab(self::TAB_EDIT_DCL, $this->ctrl->getLinkTarget($this, 'edit'));
400  $this->addTab(self::TAB_LIST_TABLES, $this->ctrl->getLinkTargetByClass(ilDclTableListGUI::class, 'listTables'));
401  $mdgui = new ilObjectMetaDataGUI($this->object);
402  if ($mdtab = $mdgui->getTab()) {
403  $this->tabs_gui->addTab(self::TAB_META_DATA, $this->lng->txt('meta_data'), $mdtab);
404  }
405  $this->addTab(self::TAB_EXPORT, $this->ctrl->getLinkTargetByClass(ilExportGUI::class, ''));
406  }
407 
408  if ($this->access->checkAccess('edit_permission', '', $ref_id) === true) {
409  $this->addTab(self::TAB_LIST_PERMISSIONS, $this->ctrl->getLinkTargetByClass(ilPermissionGUI::class, 'perm'));
410  }
411  }
412 
413  private function addTab(string $langKey, string $link): void
414  {
415  $this->tabs->addTab($langKey, $this->lng->txt($langKey), $link);
416  }
417 
418  protected function initForm(): Form
419  {
420  $inputs = [];
421 
422  $edit = [];
423  $edit['title'] = $this->ui_factory->input()->field()->text($this->lng->txt('title'))->withRequired(true);
424  $edit['description'] = $this->ui_factory->input()->field()->textarea($this->lng->txt('description'));
425  $edit['notification'] = $this->ui_factory->input()->field()->checkbox(
426  $this->lng->txt('dcl_activate_notification'),
427  $this->lng->txt('dcl_notification_info')
428  );
429  $inputs['edit'] = $this->ui_factory->input()->field()->section($edit, $this->lng->txt($this->type . '_edit'))
430  ->withValue([
431  'title' => $this->object->getTitle(),
432  'description' => $this->object->getLongDescription(),
433  'notification' => $this->object->getNotification(),
434  ]);
435 
436  $availability = [];
437  $availability['online'] = $this->ui_factory->input()->field()->checkbox(
438  $this->lng->txt('online'),
439  $this->lng->txt('dcl_online_info')
440  );
441  $inputs['availability'] = $this->ui_factory->input()->field()->section($availability, $this->lng->txt('obj_activation_list_gui'))
442  ->withValue(['online' => $this->object->getOnline(),]);
443 
444  $presentation = [];
445  $presentation['tile_image'] = $this->object->getObjectProperties()->getPropertyTileImage()->toForm(
446  $this->lng,
447  $this->ui_factory->input()->field(),
449  );
450  $inputs['presentation'] = $this->ui_factory->input()->field()->section($presentation, $this->lng->txt('cont_presentation'));
451 
452  return $this->ui_factory->input()->container()->form()->standard($this->ctrl->getFormAction($this, 'update'), $inputs);
453  }
454 
455  public function edit(): void
456  {
457  if (!$this->checkPermissionBool('write')) {
458  $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('permission_denied'));
459  }
460 
461  $this->setEditTabs();
462  $this->tabs->activateTab(self::TAB_EDIT_DCL);
463 
464  $this->tpl->setContent($this->ui_renderer->render($this->initForm()));
465  }
466 
467  public function update(): void
468  {
469  if (!$this->checkPermissionBool('write')) {
470  $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->MESSAGE);
471  }
472 
473  $this->setEditTabs();
474  $this->tabs->activateTab(self::TAB_EDIT_DCL);
475 
476  $form = $this->initForm()->withRequest($this->http->request());
477  $data = $form->getData();
478 
479  if ($data !== null) {
480  $this->object->setTitle($data['edit']['title']);
481  $this->object->setDescription($data['edit']['description']);
482  $this->object->setNotification($data['edit']['notification']);
483  $this->object->setOnline($data['availability']['online']);
484  $this->object->getObjectProperties()->storePropertyTileImage($data['presentation']['tile_image']);
485  $this->object->update();
486  $this->tpl->setOnScreenMessage('success', $this->lng->txt('msg_obj_modified'), true);
487  }
488 
489  $this->tpl->setContent($this->ui_renderer->render($form));
490  }
491 
492  protected function setEditTabs(): void
493  {
494  $this->tabs->addSubTab(
495  'general',
496  $this->lng->txt('general'),
497  $this->ctrl->getLinkTargetByClass(self::class, 'edit')
498  );
499  $this->tabs->addSubTab(
500  'cont_style',
501  $this->lng->txt('cont_style'),
502  $this->ctrl->getLinkTargetByClass(ilObjectContentStyleSettingsGUI::class)
503  );
504 
505  $this->tabs->activateSubTab('general');
506  }
507 
508  final public function listRecords(): void
509  {
510  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, 'show');
511  }
512 
514  {
515  return new ilObjDataCollection($this->ref_id, true);
516  }
517 
518  final public function toggleNotification(): void
519  {
520  $ntf = $this->http->wrapper()->query()->retrieve('ntf', $this->refinery->kindlyTo()->int());
521  switch ($ntf) {
522  case 1:
525  $this->user->getId(),
527  false
528  );
529  break;
530  case 2:
533  $this->user->getId(),
535  );
536  break;
537  }
538  $this->ctrl->redirectByClass(ilDclRecordListGUI::class, 'show');
539  }
540 
541  protected function addHeaderAction(): void
542  {
544  $this->ctrl->getLinkTarget($this, 'redrawHeaderAction', '', true),
545  '',
546  $this->ctrl->getLinkTargetByClass([ilCommonActionDispatcherGUI::class, ilTaggingGUI::class], '', '', true)
547  );
548 
549  $dispatcher = new ilCommonActionDispatcherGUI(ilCommonActionDispatcherGUI::TYPE_REPOSITORY, $this->access, 'dcl', $this->ref_id, $this->obj_id);
550 
551  $lg = $dispatcher->initHeaderAction();
552 
553  if ($this->user->getId() != ANONYMOUS_USER_ID and $this->object->getNotification() == 1) {
555  $this->ctrl->setParameter($this, 'ntf', 1);
556  $lg->addCustomCommand($this->ctrl->getLinkTarget($this, 'toggleNotification'), 'dcl_notification_deactivate_dcl');
557  $lg->addHeaderIcon('not_icon', ilUtil::getImagePath('object/notification_on.svg'), $this->lng->txt('dcl_notification_activated'));
558  } else {
559  $this->ctrl->setParameter($this, 'ntf', 2);
560  $lg->addCustomCommand($this->ctrl->getLinkTarget($this, 'toggleNotification'), 'dcl_notification_activate_dcl');
561  $lg->addHeaderIcon('not_icon', ilUtil::getImagePath('object/notification_off.svg'), $this->lng->txt('dcl_notification_deactivated'));
562  }
563  $this->ctrl->setParameter($this, 'ntf', '');
564  }
565 
566  $this->tpl->setHeaderActionMenu($lg->getHeaderAction());
567  }
568 }
checkPermission(string $perm, string $cmd="", string $type="", int $ref_id=null)
handleExport(bool $do_default=false)
Class ilObjectMetaDataGUI.
__construct(int $a_id=0, int $a_id_type=self::REPOSITORY_NODE_ID, int $a_parent_node_id=0)
This describes commonalities between all forms.
Definition: Form.php:32
redirectByClass( $a_class, string $a_cmd=null, string $a_anchor=null, bool $is_async=false)
const ANONYMOUS_USER_ID
Definition: constants.php:27
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
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...
New implementation of ilObjectGUI.
GUI class for the workflow of copying objects.
setOnScreenMessage(string $type, string $a_txt, bool $a_keep=false)
Set a message to be displayed to the user.
static prepareJsLinks(string $redraw_url, string $notes_url, string $tags_url, ilGlobalTemplateInterface $tpl=null)
Insert js/ajax links into template.
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 _gotoRepositoryNode(int $ref_id, string $cmd="")
setParameterByClass(string $a_class, string $a_parameter, $a_value)
prepareOutput(bool $show_sub_objects=true)
ilDclTableListGUI: ilDclFieldListGUI, ilDclFieldEditGUI, ilDclTableViewGUI, ilDclTableEditGUI ...
static _lookupObjId(int $ref_id)
ilObjDataCollectionGUI: ilInfoScreenGUI, ilNoteGUI, ilCommonActionDispatcherGUI ilObjDataCollectionG...
static http()
Fetches the global http state from ILIAS.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $node_id=null)
static _lookupTitle(int $obj_id)
static getTableCache(int $table_id=null)
static setNotification(int $type, int $user_id, int $id, bool $status=true)
Set notification status for object and user.
Class ilObjFile.
global $DIC
Definition: shib_login.php:25
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 hasWriteAccess(int $ref, ?int $user_id=0)
withValue($value)
Get an input like this with another value displayed on the client side.
Definition: Group.php:59
__construct(Container $dic, ilPlugin $plugin)
exportAsync(string $format=self::EXPORT_EXCEL, string $filepath=null)
static hasNotification(int $type, int $user_id, int $id)
Check notification status for object and user.
Hook-Class for exporting data-collections (used in SOAP-Class) This Class avoids duplicated code by r...
addTab(string $langKey, string $link)
Class ilCommonActionDispatcherGUI.
static getInstanceFromAjaxCall()
(Re-)Build instance from ajax call
static _gotoRepositoryRoot(bool $raise_error=false)
Goto repository root.
ilDclDetailedViewGUI: ilDclDetailedViewDefinitionGUI, ilEditClipboardGUI, ilCommentGUI ...
ilAccessHandler $access