diff options
Diffstat (limited to 'lib/modules/ConsultationModule.class.php')
| -rw-r--r-- | lib/modules/ConsultationModule.class.php | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/modules/ConsultationModule.class.php b/lib/modules/ConsultationModule.class.php index ca5654d..acc2cb4 100644 --- a/lib/modules/ConsultationModule.class.php +++ b/lib/modules/ConsultationModule.class.php @@ -9,6 +9,52 @@ class ConsultationModule extends CorePlugin implements StudipModule, SystemPlugi { parent::__construct(); + // Update consultation events for the course when a member changes + foreach (['UserDidEnterCourse', 'UserDidLeaveCourse'] as $event) { + NotificationCenter::on($event, function ($event, $course_id) { + $course = Course::find($course_id); + if ($course) { + ConsultationSlot::findEachBySQL( + function (ConsultationSlot $slot) { + $slot->updateEvents(); + }, + "JOIN consultation_blocks USING (block_id) + WHERE range_id = ? AND range_type = 'course'", + [$course_id] + ); + } + }); + } + + // Update consultation events for the course when a member changes + foreach (['InstituteMemberDidCreate', 'InstituteMemberDidDelete'] as $event) { + NotificationCenter::on($event, function ($event, InstituteMember $member) { + ConsultationSlot::findEachBySQL( + function (ConsultationSlot $slot) { + $slot->updateEvents(); + }, + "JOIN consultation_blocks USING (block_id) + WHERE range_id = ? AND range_type = 'institute'", + [$member->institut_id] + ); + }); + } + + NotificationCenter::on('UserDidLeaveCourse', function ($event, $course_id) { + // Delete consultation events for the user and course + $course = Course::find($course_id); + if ($course) { + ConsultationSlot::findEachBySQL( + function (ConsultationSlot $slot) { + $slot->updateEvents(); + }, + "JOIN consultation_blocks USING (block_id) + WHERE range_id = ? AND range_type = 'course'", + [$course_id] + ); + } + }); + NotificationCenter::on('UserDidDelete', function ($event, $user) { // Delete consultation bookings and slots ConsultationBooking::deleteByUser_id($user->id); |
