diff options
| author | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2022-09-27 10:18:47 +0000 |
|---|---|---|
| committer | David Siegfried <david.siegfried@uni-vechta.de> | 2022-09-27 10:18:47 +0000 |
| commit | 408bdb87a4eca0e4ac2b6eb85f6271e2c8c27b42 (patch) | |
| tree | 6d5f760273487243bd3218393dd3cc9b5b62596b /lib/modules/ConsultationModule.class.php | |
| parent | f40481ca9930ac528596c606e8b4c9d9bb2a4e8d (diff) | |
update consultation events when course or institute members change, fixes #675
Closes #675
Merge request studip/studip!972
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); |
