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