ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilObjSession.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5include_once('./Modules/Session/classes/class.ilSessionAppointment.php');
6include_once './Services/Membership/classes/class.ilMembershipRegistrationSettings.php';
7
17{
20
21 const LOCAL_ROLE_PARTICIPANT_PREFIX = 'il_sess_participant';
22
23 const CAL_REG_START = 1;
24
25 protected $db;
26
27 protected $location;
28 protected $name;
29 protected $phone;
30 protected $email;
31 protected $details;
32 protected $registration;
33 protected $event_id;
34
36 protected $reg_limited = 0;
37 protected $reg_min_users = 0;
38 protected $reg_limited_users = 0;
39 protected $reg_waiting_list = 0;
40 protected $reg_waiting_list_autofill; // [bool]
41
45 protected $show_members = false;
46
51
52 protected $appointments;
53 protected $files = array();
54
58 protected $session_logger = null;
59
63 protected $members_obj;
64
67
74 public function __construct($a_id = 0, $a_call_by_reference = true)
75 {
76 global $DIC;
77
78 $ilDB = $DIC['ilDB'];
79
80 $this->session_logger = $GLOBALS['DIC']->logger()->sess();
81
82 $this->db = $ilDB;
83 $this->type = "sess";
84 parent::__construct($a_id, $a_call_by_reference);
85 }
86
95 public static function _lookupRegistrationEnabled($a_obj_id)
96 {
97 global $DIC;
98
99 $ilDB = $DIC['ilDB'];
100
101 $query = "SELECT reg_type FROM event " .
102 "WHERE obj_id = " . $ilDB->quote($a_obj_id, 'integer') . " ";
103 $res = $ilDB->query($query);
104 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
105 return (bool) $row->reg_type != ilMembershipRegistrationSettings::TYPE_NONE;
106 }
107 return false;
108 }
109
115 public static function lookupSession($a_obj_id)
116 {
117 global $DIC;
118
119 $ilDB = $DIC['ilDB'];
120
121 $query = "SELECT * FROM event " .
122 "WHERE obj_id = " . $ilDB->quote($a_obj_id);
123 $res = $ilDB->query($query);
124 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
125 $data['location'] = $row->location ? $row->location : '';
126 $data['details'] = $row->details ? $row->details : '';
127 $data['name'] = $row->tutor_name ? $row->tutor_name : '';
128 $data['email'] = $row->tutor_email ? $row->tutor_email : '';
129 $data['phone'] = $row->tutor_phone ? $row->tutor_phone : '';
130 }
131 return (array) $data;
132 }
133
141 public function getPresentationTitle()
142 {
143 $date = new ilDate($this->getFirstAppointment()->getStart()->getUnixTime(), IL_CAL_UNIX);
144 if ($this->getTitle()) {
145 return ilDatePresentation::formatDate($this->getFirstAppointment()->getStart()) . ': ' . $this->getTitle();
146 } else {
147 return ilDatePresentation::formatDate($date);
148 }
149 }
150
155 {
156 $title = '';
157 if ($this->getTitle()) {
158 $title = ': ' . $this->getTitle();
159 }
161 $this->getFirstAppointment()->getStart(),
162 $this->getFirstAppointment()->getEnd()
163 ) . $title;
164 }
165
169 public function initDefaultRoles()
170 {
171 include_once './Services/AccessControl/classes/class.ilObjRole.php';
173 self::LOCAL_ROLE_PARTICIPANT_PREFIX . '_' . $this->getRefId(),
174 'Participant of session obj_no.' . $this->getId(),
175 self::LOCAL_ROLE_PARTICIPANT_PREFIX,
176 $this->getRefId()
177 );
178
179 if (!$role instanceof ilObjRole) {
180 $this->session_logger->warning('Could not create default session role.');
181 $this->session_logger->logStack(ilLogLevel::WARNING);
182 }
183 return array();
184 }
185
192 public function getEventId()
193 {
194 return $this->event_id;
195 }
196
203 public function setLocation($a_location)
204 {
205 $this->location = $a_location;
206 }
207
214 public function getLocation()
215 {
216 return $this->location;
217 }
218
225 public function setName($a_name)
226 {
227 $this->name = $a_name;
228 }
229
236 public function getName()
237 {
238 return $this->name;
239 }
240
247 public function setPhone($a_phone)
248 {
249 $this->phone = $a_phone;
250 }
251
258 public function getPhone()
259 {
260 return $this->phone;
261 }
262
270 public function setEmail($a_email)
271 {
272 $this->email = $a_email;
273 }
274
281 public function getEmail()
282 {
283 return $this->email;
284 }
285
291 public function hasTutorSettings()
292 {
293 return strlen($this->getName()) or
294 strlen($this->getEmail()) or
295 strlen($this->getPhone());
296 }
297
298
305 public function setDetails($a_details)
306 {
307 $this->details = $a_details;
308 }
309
316 public function getDetails()
317 {
318 return $this->details;
319 }
320
322 {
323 $this->reg_type = $a_type;
324 }
325
326 public function getRegistrationType()
327 {
328 return $this->reg_type;
329 }
330
332 {
333 return $this->reg_limited;
334 }
335
336 public function enableRegistrationUserLimit($a_limit)
337 {
338 $this->reg_limited = $a_limit;
339 }
340
341 public function getRegistrationMinUsers()
342 {
344 }
345
346 public function setRegistrationMinUsers($a_users)
347 {
348 $this->reg_min_users = $a_users;
349 }
350
351 public function getRegistrationMaxUsers()
352 {
354 }
355
356 public function setRegistrationMaxUsers($a_users)
357 {
358 $this->reg_limited_users = $a_users;
359 }
360
362 {
364 }
365
366 public function enableRegistrationWaitingList($a_stat)
367 {
368 $this->reg_waiting_list = $a_stat;
369 }
370
371 public function setWaitingListAutoFill($a_value)
372 {
373 $this->reg_waiting_list_autofill = (bool) $a_value;
374 }
375
376 public function hasWaitingListAutoFill()
377 {
379 }
380
385 public function setShowMembers($a_status)
386 {
387 $this->show_members = (bool) $a_status;
388 }
389
394 public function getShowMembers()
395 {
396 return (bool) $this->show_members;
397 }
398
403 {
405 }
406
412 {
413 return $this->registrationNotificationEnabled = $value;
414 }
415
420 {
422 }
423
427 public function setRegistrationNotificationOption($value)
428 {
429 $this->notificationOption = $value;
430 }
431
438 public function enabledRegistration()
439 {
440 return $this->reg_type != ilMembershipRegistrationSettings::TYPE_NONE;
441 }
442
449 public function getAppointments()
450 {
451 return $this->appointments ? $this->appointments : array();
452 }
453
461 public function addAppointment($appointment)
462 {
463 $this->appointments[] = $appointment;
464 }
465
474 {
475 $this->appointments = $appointments;
476 }
477
484 public function getFirstAppointment()
485 {
486 return is_object($this->appointments[0]) ? $this->appointments[0] : ($this->appointments[0] = new ilSessionAppointment());
487 }
488
496 public function getFiles()
497 {
498 return $this->files ? $this->files : array();
499 }
500
501
507 {
508 $this->mail_members = $a_type;
509 }
510
515 public function getMailToMembersType()
516 {
517 return $this->mail_members;
518 }
519
520
528 public function validate()
529 {
530 global $DIC;
531
532 $ilErr = $DIC['ilErr'];
533
534 // #17114
535 if ($this->isRegistrationUserLimitEnabled() &&
536 !$this->getRegistrationMaxUsers()) {
537 $ilErr->appendMessage($this->lng->txt("sess_max_members_needed"));
538 return false;
539 }
540
541 return true;
542 }
543
552 public function cloneObject($a_target_id, $a_copy_id = 0, $a_omit_tree = false)
553 {
557 $new_obj = parent::cloneObject($a_target_id, $a_copy_id, $a_omit_tree);
558
560 $new_obj->applyDidacticTemplate($dtpl);
561
562 $this->read();
563
564 $this->cloneSettings($new_obj);
565 $this->cloneMetaData($new_obj);
566
567
568 // Clone appointment
569 $new_app = $this->getFirstAppointment()->cloneObject($new_obj->getId());
570 $new_obj->setAppointments(array($new_app));
571 $new_obj->update(true);
572
573 // Clone session files
574 foreach ($this->files as $file) {
575 $file->cloneFiles($new_obj->getEventId());
576 }
577
578 // Raise update forn new appointments
579
580
581
582 // Copy learning progress settings
583 include_once('Services/Tracking/classes/class.ilLPObjSettings.php');
584 $obj_settings = new ilLPObjSettings($this->getId());
585 $obj_settings->cloneSettings($new_obj->getId());
586 unset($obj_settings);
587
588 return $new_obj;
589 }
590
598 public function cloneSettings(ilObjSession $new_obj)
599 {
601 $new_obj->getId(),
604 $this->getId(),
606 )
607 );
608
609 // @var
610 $new_obj->setLocation($this->getLocation());
611 $new_obj->setName($this->getName());
612 $new_obj->setPhone($this->getPhone());
613 $new_obj->setEmail($this->getEmail());
614 $new_obj->setDetails($this->getDetails());
615
616 $new_obj->setRegistrationType($this->getRegistrationType());
622 $new_obj->setShowMembers($this->getShowMembers());
623 $new_obj->setMailToMembersType($this->getMailToMembersType());
624
627
628 $new_obj->update(true);
629
630 return true;
631 }
632
640 public function cloneDependencies($a_target_id, $a_copy_id)
641 {
642 global $DIC;
643
644 $ilObjDataCache = $DIC['ilObjDataCache'];
645
646 parent::cloneDependencies($a_target_id, $a_copy_id);
647
648 $target_obj_id = $ilObjDataCache->lookupObjId($a_target_id);
649
650 include_once('./Modules/Session/classes/class.ilEventItems.php');
651 $session_materials = new ilEventItems($target_obj_id);
652 $session_materials->cloneItems($this->getId(), $a_copy_id);
653
654 return true;
655 }
656
657
658
664 public function create($a_skip_meta_data = false)
665 {
666 global $DIC;
667
668 $ilDB = $DIC['ilDB'];
669 global $DIC;
670
671 $ilAppEventHandler = $DIC['ilAppEventHandler'];
672
673 parent::create();
674
675 if (!$a_skip_meta_data) {
676 $this->createMetaData();
677 }
678
679 $next_id = $ilDB->nextId('event');
680 $query = "INSERT INTO event (event_id,obj_id,location,tutor_name,tutor_phone,tutor_email,details,registration, " .
681 'reg_type, reg_limit_users, reg_limited, reg_waiting_list, reg_min_users, reg_auto_wait,show_members,mail_members,
682 reg_notification, notification_opt) ' .
683 "VALUES( " .
684 $ilDB->quote($next_id, 'integer') . ", " .
685 $this->db->quote($this->getId(), 'integer') . ", " .
686 $this->db->quote($this->getLocation(), 'text') . "," .
687 $this->db->quote($this->getName(), 'text') . ", " .
688 $this->db->quote($this->getPhone(), 'text') . ", " .
689 $this->db->quote($this->getEmail(), 'text') . ", " .
690 $this->db->quote($this->getDetails(), 'text') . "," .
691 $this->db->quote($this->enabledRegistration(), 'integer') . ", " .
692 $this->db->quote($this->getRegistrationType(), 'integer') . ', ' .
693 $this->db->quote($this->getRegistrationMaxUsers(), 'integer') . ', ' .
694 $this->db->quote($this->isRegistrationUserLimitEnabled(), 'integer') . ', ' .
695 $this->db->quote($this->isRegistrationWaitingListEnabled(), 'integer') . ', ' .
696 $this->db->quote($this->getRegistrationMinUsers(), 'integer') . ', ' .
697 $this->db->quote($this->hasWaitingListAutoFill(), 'integer') . ', ' .
698 $this->db->quote($this->getShowMembers(), 'integer') . ', ' .
699 $this->db->quote($this->getMailToMembersType(), 'integer') . ',' .
700 $this->db->quote($this->isRegistrationNotificationEnabled(), 'integer') . ', ' .
701 $this->db->quote($this->getRegistrationNotificationOption(), 'text') .
702 ")";
703 $res = $ilDB->manipulate($query);
704 $this->event_id = $next_id;
705
706 $ilAppEventHandler->raise(
707 'Modules/Session',
708 'create',
709 array('object' => $this,
710 'obj_id' => $this->getId(),
711 'appointments' => $this->prepareCalendarAppointments('create'))
712 );
713
714 return $this->getId();
715 }
716
724 public function update($a_skip_meta_update = false)
725 {
726 global $DIC;
727
728 $ilDB = $DIC['ilDB'];
729 global $DIC;
730
731 $ilAppEventHandler = $DIC['ilAppEventHandler'];
732
733 if (!parent::update()) {
734 return false;
735 }
736 if (!$a_skip_meta_update) {
737 $this->updateMetaData();
738 }
739
740 $query = "UPDATE event SET " .
741 "location = " . $this->db->quote($this->getLocation(), 'text') . "," .
742 "tutor_name = " . $this->db->quote($this->getName(), 'text') . ", " .
743 "tutor_phone = " . $this->db->quote($this->getPhone(), 'text') . ", " .
744 "tutor_email = " . $this->db->quote($this->getEmail(), 'text') . ", " .
745 "details = " . $this->db->quote($this->getDetails(), 'text') . ", " .
746 "registration = " . $this->db->quote($this->enabledRegistration(), 'integer') . ", " .
747 "reg_type = " . $this->db->quote($this->getRegistrationType(), 'integer') . ", " .
748 "reg_limited = " . $this->db->quote($this->isRegistrationUserLimitEnabled(), 'integer') . ", " .
749 "reg_limit_users = " . $this->db->quote($this->getRegistrationMaxUsers(), 'integer') . ", " .
750 "reg_min_users = " . $this->db->quote($this->getRegistrationMinUsers(), 'integer') . ", " .
751 "reg_waiting_list = " . $this->db->quote($this->isRegistrationWaitingListEnabled(), 'integer') . ", " .
752 "reg_auto_wait = " . $this->db->quote($this->hasWaitingListAutoFill(), 'integer') . ", " .
753 'show_members = ' . $this->db->quote($this->getShowMembers(), 'integer') . ', ' .
754 'mail_members = ' . $this->db->quote($this->getMailToMembersType(), 'integer') . ', ' .
755 "reg_auto_wait = " . $this->db->quote($this->hasWaitingListAutoFill(), 'integer') . ", " .
756 "reg_notification = " . $this->db->quote($this->isRegistrationNotificationEnabled(), 'integer') . ", " .
757 "notification_opt = " . $this->db->quote($this->getRegistrationNotificationOption(), 'text') . " " .
758 "WHERE obj_id = " . $this->db->quote($this->getId(), 'integer') . " ";
759 $res = $ilDB->manipulate($query);
760
761 $ilAppEventHandler->raise(
762 'Modules/Session',
763 'update',
764 array('object' => $this,
765 'obj_id' => $this->getId(),
766 'appointments' => $this->prepareCalendarAppointments('update'))
767 );
768 return true;
769 }
770
777 public function delete()
778 {
779 global $DIC;
780
781 $ilDB = $DIC['ilDB'];
782 global $DIC;
783
784 $ilAppEventHandler = $DIC['ilAppEventHandler'];
785
786 if (!parent::delete()) {
787 return false;
788 }
789
790 // delete meta data
791 $this->deleteMetaData();
792
793 $query = "DELETE FROM event " .
794 "WHERE obj_id = " . $this->db->quote($this->getId(), 'integer') . " ";
795 $res = $ilDB->manipulate($query);
796
797 include_once('./Modules/Session/classes/class.ilSessionAppointment.php');
799
800 include_once('./Modules/Session/classes/class.ilEventItems.php');
802
803 include_once('./Modules/Session/classes/class.ilEventParticipants.php');
805
806 foreach ($this->getFiles() as $file) {
807 $file->delete();
808 }
809
810 $ilAppEventHandler->raise(
811 'Modules/Session',
812 'delete',
813 array('object' => $this,
814 'obj_id' => $this->getId(),
815 'appointments' => $this->prepareCalendarAppointments('delete'))
816 );
817
818
819 return true;
820 }
821
829 public function read()
830 {
831 parent::read();
832
833 $query = "SELECT * FROM event WHERE " .
834 "obj_id = " . $this->db->quote($this->getId(), 'integer') . " ";
835 $res = $this->db->query($query);
836
837 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
838 $this->setLocation($row->location);
839 $this->setName($row->tutor_name);
840 $this->setPhone($row->tutor_phone);
841 $this->setEmail($row->tutor_email);
842 $this->setDetails($row->details);
843 $this->setRegistrationType($row->reg_type);
844 $this->enableRegistrationUserLimit($row->reg_limited);
845 $this->enableRegistrationWaitingList($row->reg_waiting_list);
846 $this->setWaitingListAutoFill($row->reg_auto_wait);
847 $this->setRegistrationMaxUsers($row->reg_limit_users);
848 $this->setRegistrationMinUsers($row->reg_min_users);
849 $this->setShowMembers((bool) $row->show_members);
850 $this->setMailToMembersType((int) $row->mail_members);
851 $this->setRegistrationNotificationEnabled($row->reg_notification);
852 $this->setRegistrationNotificationOption($row->notification_opt);
853 $this->event_id = $row->event_id;
854 }
855
856 $this->initAppointments();
857 $this->initFiles();
858 }
859
867 protected function initAppointments()
868 {
869 // get assigned appointments
870 include_once('./Modules/Session/classes/class.ilSessionAppointment.php');
871 $this->appointments = ilSessionAppointment::_readAppointmentsBySession($this->getId());
872 }
873
881 public function initFiles()
882 {
883 include_once('./Modules/Session/classes/class.ilSessionFile.php');
884 $this->files = ilSessionFile::_readFilesByEvent($this->getEventId());
885 }
886
887
895 public function prepareCalendarAppointments($a_mode = 'create')
896 {
897 include_once('./Services/Calendar/classes/class.ilCalendarAppointmentTemplate.php');
898
899 switch ($a_mode) {
900 case 'create':
901 case 'update':
902
903 $app = new ilCalendarAppointmentTemplate(self::CAL_REG_START);
904 $app->setTranslationType(IL_CAL_TRANSLATION_NONE);
905 $app->setTitle($this->getTitle() ? $this->getTitle() : $this->lng->txt('obj_sess'));
906 $app->setDescription($this->getLongDescription());
907 $app->setLocation($this->getLocation());
908
909 $sess_app = $this->getFirstAppointment();
910 $app->setFullday($sess_app->isFullday());
911 $app->setStart($sess_app->getStart());
912 $app->setEnd($sess_app->getEnd());
913 $apps[] = $app;
914
915 return $apps;
916
917 case 'delete':
918 // Nothing to do: The category and all assigned appointments will be deleted.
919 return array();
920 }
921 }
922
926 public function handleAutoFill()
927 {
928 if (
930 !$this->hasWaitingListAutoFill()
931 ) {
932 $this->session_logger->debug('Waiting list or auto fill is disabled.');
933 return true;
934 }
935
937 $current = $parts->getCountParticipants();
938 $max = $this->getRegistrationMaxUsers();
939
940 if ($max <= $current) {
941 $this->session_logger->debug('Maximum number of participants not reached.');
942 $this->session_logger->debug('Maximum number of members: ' . $max);
943 $this->session_logger->debug('Current number of members: ' . $current);
944 return true;
945 }
946
947 $session_waiting_list = new ilSessionWaitingList($this->getId());
948 foreach ($session_waiting_list->getUserIds() as $user_id) {
949 $user = ilObjectFactory::getInstanceByObjId($user_id);
950 if (!$user instanceof ilObjUser) {
951 $this->session_logger->warning('Found invalid user id on waiting list: ' . $user_id);
952 continue;
953 }
954 if (in_array($user_id, $parts->getParticipants())) {
955 $this->session_logger->notice('User on waiting list already session member: ' . $user_id);
956 continue;
957 }
958
959 if ($this->enabledRegistration()) {
960 $this->session_logger->debug('Registration enabled: register user');
961 $parts->register($user_id);
962 $parts->sendNotification(
964 $user_id
965 );
966 } else {
967 $this->session_logger->debug('Registration disabled: set user status to participated.');
968 $parts->getEventParticipants()->updateParticipation($user_id, true);
969 $parts->sendNotification(
971 $user_id
972 );
973 }
974
975 $session_waiting_list->removeFromList($user_id);
976
977 $current++;
978 if ($current >= $max) {
979 break;
980 }
981 }
982 }
983
984
992 protected function initParticipants()
993 {
994 $this->members_obj = ilSessionParticipants::_getInstanceByObjId($this->getId());
995 }
996
1002 public function getMembersObject()
1003 {
1004 if (!$this->members_obj instanceof ilSessionParticipants) {
1005 $this->initParticipants();
1006 }
1007 return $this->members_obj;
1008 }
1009
1014 public function getEnableMap()
1015 {
1016 return false;
1017 }
1018}
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_TRANSLATION_NONE
const IL_CAL_UNIX
Apointment templates are used for automatic generated apointments.
static _lookupContainerSetting($a_id, $a_keyword, $a_default_value=null)
Lookup a container setting.
static _writeContainerSetting($a_id, $a_keyword, $a_value)
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date @access public.
static formatPeriod(ilDateTime $start, ilDateTime $end, $a_skip_starting_day=false)
Format a period of two date Shows: 14.
Class for single dates.
static lookupTemplateId($a_ref_id)
Lookup template id @global ilDB $ilDB.
class ilEvent
static _delete($a_event_id)
static _deleteByEvent($a_event_id)
Class ilObjRole.
static createDefaultRole($a_title, $a_description, $a_tpl_name, $a_ref_id)
__construct($a_id=0, $a_call_by_reference=true)
Constructor @access public.
getFirstAppointment()
get first appointment
const LOCAL_ROLE_PARTICIPANT_PREFIX
enabledRegistration()
is registration enabled
getShowMembers()
Member gallery enabled.
getEnableMap()
ALways disabled.
static _lookupRegistrationEnabled($a_obj_id)
lookup registration enabled
getMailToMembersType()
Get mail to members type.
setLocation($a_location)
set location
setEmail($a_email)
set email
getDetails()
get details
read()
read session data
setRegistrationNotificationOption($value)
getLocation()
get location
initDefaultRoles()
Create local session participant role.
update($a_skip_meta_update=false)
update object
getEventId()
sget event id
setRegistrationType($a_type)
setName($a_name)
set name
setRegistrationMinUsers($a_users)
initAppointments()
init appointments
setPhone($a_phone)
set phone
setDetails($a_details)
set details
getAppointments()
get appointments
prepareCalendarAppointments($a_mode='create')
Prepare calendar appointments.
setAppointments($appointments)
set appointments
setWaitingListAutoFill($a_value)
setMailToMembersType($a_type)
Set mail to members type.
cloneDependencies($a_target_id, $a_copy_id)
Clone dependencies.
initFiles()
init files
setRegistrationNotificationEnabled($value)
getPresentationTitle()
get title (overwritten from base class)
setShowMembers($a_status)
Show members gallery.
enableRegistrationUserLimit($a_limit)
cloneSettings(ilObjSession $new_obj)
clone settings
static lookupSession($a_obj_id)
Get session data.
getPresentationTitleAppointmentPeriod()
initParticipants()
init participants object
create($a_skip_meta_data=false)
create new session
getMembersObject()
Get members objects.
enableRegistrationWaitingList($a_stat)
addAppointment($appointment)
add appointment
handleAutoFill()
Handle auto fill for session members.
hasTutorSettings()
check if there any tutor settings
setRegistrationMaxUsers($a_users)
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Class ilObject Basic functions for all objects.
deleteMetaData()
delete meta data entry
updateMetaData()
update meta data entry
createMetaData()
create meta data entry
getRefId()
get reference id @access public
getLongDescription()
get object long description (stored in object_description)
cloneMetaData($target_obj)
Copy meta data.
getId()
get object id @access public
getTitle()
get object title @access public
class ilSessionAppointment
static _readAppointmentsBySession($a_event_id)
static _deleteBySession($a_event_id)
static _readFilesByEvent($a_event_id)
Session participation handling.
static _getInstanceByObjId($a_obj_id)
Get instance.
$app
Definition: cli.php:38
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$query
$ilErr
Definition: raiseError.php:18
foreach($_POST as $key=> $value) $res
global $ilDB
$data
Definition: storeScorm.php:23
$a_type
Definition: workflow.php:92
$DIC
Definition: xapitoken.php:46