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