ILIAS  release_8 Revision v8.24
class.ilObjSession.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
31{
32 public const MAIL_ALLOWED_ALL = 1;
33 public const MAIL_ALLOWED_ADMIN = 2;
34 public const LOCAL_ROLE_PARTICIPANT_PREFIX = 'il_sess_participant';
35 public const CAL_REG_START = 1;
36
40 protected string $location = "";
41 protected string $name = "";
42 protected string $phone = "";
43 protected string $email = "";
44 protected string $details = "";
45 protected int $event_id = 0;
47 protected int $reg_limited = 0;
48 protected int $reg_min_users = 0;
49 protected int $reg_limited_users = 0;
50 protected bool $reg_waiting_list = false;
51 protected bool $reg_waiting_list_autofill = false;
52 protected bool $show_members = false;
53 protected bool $show_cannot_participate_option = true;
55 protected array $appointments = [];
56 protected array $files = [];
58 protected bool $registrationNotificationEnabled = false;
60
61 public function __construct(int $a_id = 0, bool $a_call_by_reference = true)
62 {
63 global $DIC;
64
65 $this->session_logger = $DIC->logger()->sess();
66 $this->obj_data_cache = $DIC['ilObjDataCache'];
67 $this->event_handler = $DIC->event();
68
69 $this->type = "sess";
70 parent::__construct($a_id, $a_call_by_reference);
71 }
72
73 public static function _lookupRegistrationEnabled(int $a_obj_id): bool
74 {
75 global $DIC;
76
77 $ilDB = $DIC->database();
78
79 $query = "SELECT reg_type FROM event " .
80 "WHERE obj_id = " . $ilDB->quote($a_obj_id, 'integer') . " ";
81 $res = $ilDB->query($query);
82 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
83 return (bool) $row->reg_type != ilMembershipRegistrationSettings::TYPE_NONE;
84 }
85 return false;
86 }
87
88 public static function lookupSession(int $a_obj_id): array
89 {
90 global $DIC;
91
92 $ilDB = $DIC->database();
93
94 $query = "SELECT * FROM event " .
95 "WHERE obj_id = " . $ilDB->quote($a_obj_id, 'integer');
96 $res = $ilDB->query($query);
97 $data = [];
98 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
99 $data['location'] = $row->location ?: '';
100 $data['details'] = $row->details ?: '';
101 $data['name'] = $row->tutor_name ?: '';
102 $data['email'] = $row->tutor_email ?: '';
103 $data['phone'] = $row->tutor_phone ?: '';
104 }
105 return $data;
106 }
107
108 public function getPresentationTitle(): string
109 {
110 $date = new ilDate($this->getFirstAppointment()->getStart()->getUnixTime(), IL_CAL_UNIX);
111 if ($this->getTitle()) {
112 return ilDatePresentation::formatDate($this->getFirstAppointment()->getStart()) . ': ' . $this->getTitle();
113 } else {
114 return ilDatePresentation::formatDate($date);
115 }
116 }
117
119 {
120 $title = '';
121 if ($this->getTitle()) {
122 $title = ': ' . $this->getTitle();
123 }
125 $this->getFirstAppointment()->getStart(),
126 $this->getFirstAppointment()->getEnd()
127 ) . $title;
128 }
129
133 public function initDefaultRoles(): void
134 {
136 self::LOCAL_ROLE_PARTICIPANT_PREFIX . '_' . $this->getRefId(),
137 'Participant of session obj_no.' . $this->getId(),
138 self::LOCAL_ROLE_PARTICIPANT_PREFIX,
139 $this->getRefId()
140 );
141
142 if (!$role instanceof ilObjRole) {
143 $this->session_logger->warning('Could not create default session role.');
144 $this->session_logger->logStack(ilLogLevel::WARNING);
145 }
146 }
147
148 public function getEventId(): int
149 {
150 return $this->event_id;
151 }
152
153 public function setLocation(string $a_location): void
154 {
155 $this->location = $a_location;
156 }
157
158 public function getLocation(): string
159 {
160 return $this->location;
161 }
162
163 public function setName(string $a_name): void
164 {
165 $this->name = $a_name;
166 }
167
168 public function getName(): string
169 {
170 return $this->name;
171 }
172
173 public function setPhone(string $a_phone): void
174 {
175 $this->phone = $a_phone;
176 }
177
178 public function getPhone(): string
179 {
180 return $this->phone;
181 }
182
183 public function setEmail(string $a_email): void
184 {
185 $this->email = $a_email;
186 }
187
188 public function getEmail(): string
189 {
190 return $this->email;
191 }
192
193 public function hasTutorSettings(): bool
194 {
195 return strlen($this->getName()) ||
196 strlen($this->getEmail()) ||
197 strlen($this->getPhone());
198 }
199
200 public function setDetails(string $a_details): void
201 {
202 $this->details = $a_details;
203 }
204
205 public function getDetails(): string
206 {
207 return $this->details;
208 }
209
210 public function setRegistrationType(int $a_type): void
211 {
212 $this->reg_type = $a_type;
213 }
214
215 public function getRegistrationType(): int
216 {
217 return $this->reg_type;
218 }
219
221 {
222 return $this->reg_limited;
223 }
224
225 public function enableRegistrationUserLimit(int $a_limit): void
226 {
227 $this->reg_limited = $a_limit;
228 }
229
230 public function getRegistrationMinUsers(): int
231 {
233 }
234
235 public function setRegistrationMinUsers(int $a_users): void
236 {
237 $this->reg_min_users = $a_users;
238 }
239
240 public function getRegistrationMaxUsers(): int
241 {
243 }
244
245 public function setRegistrationMaxUsers(int $a_users): void
246 {
247 $this->reg_limited_users = $a_users;
248 }
249
250 public function isRegistrationWaitingListEnabled(): bool
251 {
253 }
254
255 public function enableRegistrationWaitingList(bool $a_stat): void
256 {
257 $this->reg_waiting_list = $a_stat;
258 }
259
260 public function setWaitingListAutoFill(bool $a_value): void
261 {
262 $this->reg_waiting_list_autofill = $a_value;
263 }
264
265 public function hasWaitingListAutoFill(): bool
266 {
268 }
269
270 public function setShowMembers(bool $a_status): void
271 {
272 $this->show_members = $a_status;
273 }
274
275 public function getShowMembers(): bool
276 {
277 return $this->show_members;
278 }
279
280 public function isRegistrationNotificationEnabled(): bool
281 {
283 }
284
285 public function setRegistrationNotificationEnabled(bool $value): void
286 {
287 $this->registrationNotificationEnabled = $value;
288 }
289
290 public function getRegistrationNotificationOption(): string
291 {
293 }
294
295 public function setRegistrationNotificationOption(string $value): void
296 {
297 $this->notificationOption = $value;
298 }
299
300 public function enabledRegistration(): bool
301 {
302 return $this->reg_type != ilMembershipRegistrationSettings::TYPE_NONE;
303 }
304
305 public function enabledRegistrationForUsers(): bool
306 {
307 return
310 }
311
312 public function isCannotParticipateOptionEnabled(): bool
313 {
315 }
316
317 public function enableCannotParticipateOption(bool $status): void
318 {
319 $this->show_cannot_participate_option = $status;
320 }
321
322 public function getAppointments(): array
323 {
324 return $this->appointments;
325 }
326
327 public function addAppointment(ilSessionAppointment $appointment): void
328 {
329 $this->appointments[] = $appointment;
330 }
331
335 public function setAppointments(array $appointments): void
336 {
337 $this->appointments = $appointments;
338 }
339
341 {
342 $app = $this->appointments[0] ?? null;
343 return is_object($app) ? $app : ($this->appointments[0] = new ilSessionAppointment());
344 }
345
346 public function getFiles(): array
347 {
348 return $this->files;
349 }
350
351 public function setMailToMembersType(int $a_type): void
352 {
353 $this->mail_members = $a_type;
354 }
355
356 public function getMailToMembersType(): int
357 {
358 return $this->mail_members;
359 }
360
361 public function validate(): bool
362 {
364
365 // #17114
366 if ($this->isRegistrationUserLimitEnabled() &&
367 !$this->getRegistrationMaxUsers()) {
368 $ilErr->appendMessage($this->lng->txt("sess_max_members_needed"));
369 return false;
370 }
371
372 return true;
373 }
374
375 public function cloneObject(int $a_target_id, int $a_copy_id = 0, bool $a_omit_tree = false): ?ilObjSession
376 {
380 $new_obj = parent::cloneObject($a_target_id, $a_copy_id, $a_omit_tree);
381
383 $new_obj->applyDidacticTemplate($dtpl);
384
385 $this->read();
386
387 $this->cloneSettings($new_obj);
388 $this->cloneMetaData($new_obj);
389
390
391 // Clone appointment
392 $new_app = $this->getFirstAppointment()->cloneObject($new_obj->getId());
393 $new_obj->setAppointments(array($new_app));
394 $new_obj->update(true);
395
396 // Clone session files
397 foreach ($this->files as $file) {
398 $file->cloneFiles($new_obj->getEventId());
399 }
400
401 // Raise update forn new appointments
402
403
404
405 // Copy learning progress settings
406 $obj_settings = new ilLPObjSettings($this->getId());
407 $obj_settings->cloneSettings($new_obj->getId());
408 unset($obj_settings);
409
410 return $new_obj;
411 }
412
413 public function cloneSettings(ilObjSession $new_obj): bool
414 {
416 $new_obj->getId(),
419 $this->getId(),
421 )
422 );
423
424 $new_obj->setLocation($this->getLocation());
425 $new_obj->setName($this->getName());
426 $new_obj->setPhone($this->getPhone());
427 $new_obj->setEmail($this->getEmail());
428 $new_obj->setDetails($this->getDetails());
429
430 $new_obj->setRegistrationType($this->getRegistrationType());
436 $new_obj->setShowMembers($this->getShowMembers());
437 $new_obj->setMailToMembersType($this->getMailToMembersType());
438
442
443 $new_obj->update(true);
444
445 return true;
446 }
447
448 public function cloneDependencies($a_target_id, $a_copy_id): bool
449 {
450 $ilObjDataCache = $this->obj_data_cache;
451
452 parent::cloneDependencies($a_target_id, $a_copy_id);
453
454 $target_obj_id = $ilObjDataCache->lookupObjId($a_target_id);
455
456 $session_materials = new ilEventItems($target_obj_id);
457 $session_materials->cloneItems($this->getId(), $a_copy_id);
458
459 return true;
460 }
461
462 public function create(bool $a_skip_meta_data = false): int
463 {
465 $ilAppEventHandler = $this->event_handler;
466
467 parent::create();
468
469 if (!$a_skip_meta_data) {
470 $this->createMetaData();
471 }
472
473 $next_id = $ilDB->nextId('event');
474 $query = "INSERT INTO event (event_id,obj_id,location,tutor_name,tutor_phone,tutor_email,details,registration, " .
475 'reg_type, reg_limit_users, reg_limited, reg_waiting_list, reg_min_users, reg_auto_wait,show_members,mail_members,
476 reg_notification, notification_opt, show_cannot_part) ' .
477 "VALUES( " .
478 $ilDB->quote($next_id, 'integer') . ", " .
479 $this->db->quote($this->getId(), 'integer') . ", " .
480 $this->db->quote($this->getLocation(), 'text') . "," .
481 $this->db->quote($this->getName(), 'text') . ", " .
482 $this->db->quote($this->getPhone(), 'text') . ", " .
483 $this->db->quote($this->getEmail(), 'text') . ", " .
484 $this->db->quote($this->getDetails(), 'text') . "," .
485 $this->db->quote((int) $this->enabledRegistrationForUsers(), 'integer') . ", " .
486 $this->db->quote($this->getRegistrationType(), 'integer') . ', ' .
487 $this->db->quote($this->getRegistrationMaxUsers(), 'integer') . ', ' .
488 $this->db->quote($this->isRegistrationUserLimitEnabled(), 'integer') . ', ' .
489 $this->db->quote((int) $this->isRegistrationWaitingListEnabled(), 'integer') . ', ' .
490 $this->db->quote($this->getRegistrationMinUsers(), 'integer') . ', ' .
491 $this->db->quote((int) $this->hasWaitingListAutoFill(), 'integer') . ', ' .
492 $this->db->quote((int) $this->getShowMembers(), 'integer') . ', ' .
493 $this->db->quote($this->getMailToMembersType(), 'integer') . ',' .
494 $this->db->quote((int) $this->isRegistrationNotificationEnabled(), 'integer') . ', ' .
495 $this->db->quote($this->getRegistrationNotificationOption(), 'text') . ', ' .
496 $this->db->quote((int) $this->isCannotParticipateOptionEnabled(), ilDBConstants::T_INTEGER) . ' ' .
497 ")";
498 $res = $ilDB->manipulate($query);
499 $this->event_id = $next_id;
500
501 $ilAppEventHandler->raise(
502 'Modules/Session',
503 'create',
504 array('object' => $this,
505 'obj_id' => $this->getId(),
506 'appointments' => $this->prepareCalendarAppointments('create'))
507 );
508
509 return $this->getId();
510 }
511
512 public function update(bool $a_skip_meta_update = false): bool
513 {
515 $ilAppEventHandler = $this->event_handler;
516
517 if (!parent::update()) {
518 return false;
519 }
520 if (!$a_skip_meta_update) {
521 $this->updateMetaData();
522 }
523
524 $query = "UPDATE event SET " .
525 "location = " . $this->db->quote($this->getLocation(), 'text') . "," .
526 "tutor_name = " . $this->db->quote($this->getName(), 'text') . ", " .
527 "tutor_phone = " . $this->db->quote($this->getPhone(), 'text') . ", " .
528 "tutor_email = " . $this->db->quote($this->getEmail(), 'text') . ", " .
529 "details = " . $this->db->quote($this->getDetails(), 'text') . ", " .
530 "registration = " . $this->db->quote((int) $this->enabledRegistrationForUsers(), 'integer') . ", " .
531 "reg_type = " . $this->db->quote($this->getRegistrationType(), 'integer') . ", " .
532 "reg_limited = " . $this->db->quote($this->isRegistrationUserLimitEnabled(), 'integer') . ", " .
533 "reg_limit_users = " . $this->db->quote($this->getRegistrationMaxUsers(), 'integer') . ", " .
534 "reg_min_users = " . $this->db->quote($this->getRegistrationMinUsers(), 'integer') . ", " .
535 "reg_waiting_list = " . $this->db->quote((int) $this->isRegistrationWaitingListEnabled(), 'integer') . ", " .
536 "reg_auto_wait = " . $this->db->quote((int) $this->hasWaitingListAutoFill(), 'integer') . ", " .
537 'show_members = ' . $this->db->quote((int) $this->getShowMembers(), 'integer') . ', ' .
538 'mail_members = ' . $this->db->quote($this->getMailToMembersType(), 'integer') . ', ' .
539 "reg_auto_wait = " . $this->db->quote((int) $this->hasWaitingListAutoFill(), 'integer') . ", " .
540 "reg_notification = " . $this->db->quote((int) $this->isRegistrationNotificationEnabled(), 'integer') . ", " .
541 "notification_opt = " . $this->db->quote($this->getRegistrationNotificationOption(), 'text') . ", " .
542 'show_cannot_part = ' . $this->db->quote((int) $this->isCannotParticipateOptionEnabled(), ilDBConstants::T_INTEGER) . ' ' .
543 "WHERE obj_id = " . $this->db->quote($this->getId(), 'integer') . " ";
544 $res = $ilDB->manipulate($query);
545
546 $ilAppEventHandler->raise(
547 'Modules/Session',
548 'update',
549 array('object' => $this,
550 'obj_id' => $this->getId(),
551 'appointments' => $this->prepareCalendarAppointments('update'))
552 );
553 return true;
554 }
555
556 public function delete(): bool
557 {
559 $ilAppEventHandler = $this->event_handler;
560
561 if (!parent::delete()) {
562 return false;
563 }
564
565 // delete meta data
566 $this->deleteMetaData();
567
568 $query = "DELETE FROM event " .
569 "WHERE obj_id = " . $this->db->quote($this->getId(), 'integer') . " ";
570 $res = $ilDB->manipulate($query);
571
575
576 foreach ($this->getFiles() as $file) {
577 $file->delete();
578 }
579
580 $ilAppEventHandler->raise(
581 'Modules/Session',
582 'delete',
583 array('object' => $this,
584 'obj_id' => $this->getId(),
585 'appointments' => $this->prepareCalendarAppointments('delete'))
586 );
587
588 return true;
589 }
590
591 public function read(): void
592 {
593 parent::read();
594
595 $query = "SELECT * FROM event WHERE " .
596 "obj_id = " . $this->db->quote($this->getId(), 'integer') . " ";
597 $res = $this->db->query($query);
598
599 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
600 $this->setLocation((string) $row->location);
601 $this->setName((string) $row->tutor_name);
602 $this->setPhone((string) $row->tutor_phone);
603 $this->setEmail((string) $row->tutor_email);
604 $this->setDetails((string) $row->details);
605 $this->setRegistrationType((int) $row->reg_type);
606 $this->enableRegistrationUserLimit((int) $row->reg_limited);
607 $this->enableRegistrationWaitingList((bool) $row->reg_waiting_list);
608 $this->setWaitingListAutoFill((bool) $row->reg_auto_wait);
609 $this->setRegistrationMaxUsers((int) $row->reg_limit_users);
610 $this->setRegistrationMinUsers((int) $row->reg_min_users);
611 $this->setShowMembers((bool) $row->show_members);
612 $this->setMailToMembersType((int) $row->mail_members);
613 $this->setRegistrationNotificationEnabled((bool) $row->reg_notification);
614 $this->setRegistrationNotificationOption((string) $row->notification_opt);
615 $this->enableCannotParticipateOption((bool) $row->show_cannot_part);
616 $this->event_id = (int) $row->event_id;
617 }
618
619 $this->initAppointments();
620 $this->initFiles();
621 }
622
623 protected function initAppointments(): void
624 {
625 // get assigned appointments
626 $this->appointments = ilSessionAppointment::_readAppointmentsBySession($this->getId());
627 }
628
629 public function initFiles(): void
630 {
631 include_once('./Modules/Session/classes/class.ilSessionFile.php');
637 //$this->files = ilSessionFile::_readFilesByEvent($this->getEventId());
638 }
639
640
645 public function prepareCalendarAppointments(string $a_mode = 'create'): array
646 {
647 switch ($a_mode) {
648 case 'create':
649 case 'update':
650
651 $app = new ilCalendarAppointmentTemplate(self::CAL_REG_START);
652 $app->setTranslationType(ilCalendarEntry::TRANSLATION_NONE);
653 $app->setTitle($this->getTitle() ? $this->getTitle() : $this->lng->txt('obj_sess'));
654 $app->setDescription($this->getLongDescription());
655 $app->setLocation($this->getLocation());
656
657 $sess_app = $this->getFirstAppointment();
658 $app->setFullday($sess_app->isFullday());
659 $app->setStart($sess_app->getStart());
660 $app->setEnd($sess_app->getEnd());
661 $apps[] = $app;
662
663 return $apps;
664
665 case 'delete':
666 // Nothing to do: The category and all assigned appointments will be deleted.
667 return [];
668 }
669
670 return [];
671 }
672
673 public function handleAutoFill(): bool
674 {
675 if (
677 !$this->hasWaitingListAutoFill()
678 ) {
679 $this->session_logger->debug('Waiting list or auto fill is disabled.');
680 return true;
681 }
682
684 $current = $parts->getCountParticipants();
685
686 $refs = ilObject::_getAllReferences($this->getId());
687 $ref_id = current($refs);
688 if ($ref_id === false) {
689 $this->session_logger->warning('No ref_id found for obj_id: ' . $this->getId());
690 return true;
691 }
693 $max = $this->getRegistrationMaxUsers();
694
695 if ($max <= $current) {
696 $this->session_logger->debug('Maximum number of participants not reached.');
697 $this->session_logger->debug('Maximum number of members: ' . $max);
698 $this->session_logger->debug('Current number of members: ' . $current);
699 return true;
700 }
701
702 $session_waiting_list = new ilSessionWaitingList($this->getId());
703 foreach ($session_waiting_list->getUserIds() as $user_id) {
705 if (!$user instanceof ilObjUser) {
706 $this->session_logger->warning('Found invalid user id on waiting list: ' . $user_id);
707 continue;
708 }
709 if (in_array($user_id, $parts->getParticipants())) {
710 $this->session_logger->notice('User on waiting list already session member: ' . $user_id);
711 continue;
712 }
713
714 if ($this->enabledRegistrationForUsers()) {
715 $this->session_logger->debug('Registration enabled: register user');
716 $parts->register($user_id);
717 } else {
718 $this->session_logger->debug('Registration disabled: set user status to participated.');
719 $parts->getEventParticipants()->updateParticipation($user_id, true);
720 }
721 $parts->sendNotification(
723 $user_id
724 );
725
726 $session_waiting_list->removeFromList($user_id);
727
728 $current++;
729 if ($current >= $max) {
730 break;
731 }
732 }
733
734 return true;
735 }
736
737 protected function initParticipants(): void
738 {
739 $this->members_obj = ilSessionParticipants::_getInstanceByObjId($this->getId());
740 }
741
743 {
744 if (!$this->members_obj instanceof ilSessionParticipants) {
745 $this->initParticipants();
746 }
747 return $this->members_obj;
748 }
749
750 public function getEnableMap(): bool
751 {
752 return false;
753 }
754}
const IL_CAL_UNIX
Global event handler.
Apointment templates are used for automatic generated apointments.
static _writeContainerSetting(int $a_id, string $a_keyword, string $a_value)
static _lookupContainerSetting(int $a_id, string $a_keyword, string $a_default_value=null)
static formatPeriod(ilDateTime $start, ilDateTime $end, bool $a_skip_starting_day=false)
Format a period of two dates Shows: 14.
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
Class for single dates.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _delete(int $a_event_id)
static _deleteByEvent(int $a_event_id)
Component logger with individual log levels by component id.
Class ilObjRole.
static createDefaultRole(string $a_title, string $a_description, string $a_tpl_name, int $a_ref_id)
const LOCAL_ROLE_PARTICIPANT_PREFIX
update(bool $a_skip_meta_update=false)
static _lookupRegistrationEnabled(int $a_obj_id)
enableCannotParticipateOption(bool $status)
bool $show_cannot_participate_option
string $notificationOption
create(bool $a_skip_meta_data=false)
initDefaultRoles()
Create local session participant role.
setRegistrationNotificationEnabled(bool $value)
ilAppEventHandler $event_handler
setRegistrationType(int $a_type)
ilObjectDataCache $obj_data_cache
setWaitingListAutoFill(bool $a_value)
__construct(int $a_id=0, bool $a_call_by_reference=true)
prepareCalendarAppointments(string $a_mode='create')
setDetails(string $a_details)
setPhone(string $a_phone)
enableRegistrationWaitingList(bool $a_stat)
setShowMembers(bool $a_status)
setRegistrationMaxUsers(int $a_users)
setName(string $a_name)
cloneDependencies($a_target_id, $a_copy_id)
setRegistrationMinUsers(int $a_users)
static lookupSession(int $a_obj_id)
ilSessionParticipants $members_obj
addAppointment(ilSessionAppointment $appointment)
getPresentationTitle()
get presentation title Normally same as title Overwritten for sessions
ilLogger $session_logger
bool $reg_waiting_list_autofill
setEmail(string $a_email)
bool $registrationNotificationEnabled
cloneSettings(ilObjSession $new_obj)
getPresentationTitleAppointmentPeriod()
setAppointments(array $appointments)
setMailToMembersType(int $a_type)
setLocation(string $a_location)
enableRegistrationUserLimit(int $a_limit)
setRegistrationNotificationOption(string $value)
User class.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
string $title
cloneMetaData(ilObject $target_obj)
Copy meta data.
static _getAllReferences(int $id)
get all reference ids for object ID
ilErrorHandling $error
getLongDescription()
get object long description (stored in object_description)
ilObjUser $user
ilDBInterface $db
static lookupNumberOfMembers(int $a_ref_id)
Lookup number of members.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _deleteBySession(int $a_event_id)
static _readAppointmentsBySession(int $a_event_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getInstanceByObjId(int $a_obj_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$app
Definition: cli.php:39
global $DIC
Definition: feed.php:28
$res
Definition: ltiservices.php:69
if($clientAssertionType !='urn:ietf:params:oauth:client-assertion-type:jwt-bearer'|| $grantType !='client_credentials') $parts
Definition: ltitoken.php:64
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$query
$ilErr
Definition: raiseError.php:17