aboutsummaryrefslogtreecommitdiff
path: root/lib/modules/ConsultationModule.class.php
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2022-09-27 10:18:47 +0000
committerDavid Siegfried <david.siegfried@uni-vechta.de>2022-09-27 10:18:47 +0000
commit408bdb87a4eca0e4ac2b6eb85f6271e2c8c27b42 (patch)
tree6d5f760273487243bd3218393dd3cc9b5b62596b /lib/modules/ConsultationModule.class.php
parentf40481ca9930ac528596c606e8b4c9d9bb2a4e8d (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.php46
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);