aboutsummaryrefslogtreecommitdiff
path: root/lib/modules/ConsultationModule.class.php
diff options
context:
space:
mode:
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);