ILIAS  release_8 Revision v8.23
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 = [];
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 
118  public function getPresentationTitleAppointmentPeriod(): string
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  {
232  return $this->reg_min_users;
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
308  $this->reg_type != ilMembershipRegistrationSettings::TYPE_NONE &&
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  {
464  $ilDB = $this->db;
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  {
514  $ilDB = $this->db;
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  {
558  $ilDB = $this->db;
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 
573  ilEventItems::_delete($this->getId());
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 }
$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
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
ilObjectDataCache $obj_data_cache
update(bool $a_skip_meta_update=false)
cloneDependencies($a_target_id, $a_copy_id)
cloneMetaData(ilObject $target_obj)
Copy meta data.
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
setPhone(string $a_phone)
static _deleteByEvent(int $a_event_id)
addAppointment(ilSessionAppointment $appointment)
static lookupSession(int $a_obj_id)
string $notificationOption
$query
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)
__construct(Container $dic, ilPlugin $plugin)
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)