From 2562bbfd1baf3085cc96b6d9df377f3b3a5ce90b Mon Sep 17 00:00:00 2001 From: Laurent David Date: Wed, 9 Oct 2024 12:07:33 +0200 Subject: [PATCH] MDL-83185 core_courseformat: Refresh cache on group change * When we add users to a group (or remove them), we should refresh the course index cache so it stays in sync with what the user can actually see. --- course/format/classes/hook_listener.php | 55 +++++++++++++++++++++++++ lib/db/hooks.php | 8 ++++ 2 files changed, 63 insertions(+) create mode 100644 course/format/classes/hook_listener.php diff --git a/course/format/classes/hook_listener.php b/course/format/classes/hook_listener.php new file mode 100644 index 00000000000..13fbf57f376 --- /dev/null +++ b/course/format/classes/hook_listener.php @@ -0,0 +1,55 @@ +. + +namespace core_courseformat; + +use core_group\hook\after_group_membership_added; +use core_group\hook\after_group_membership_removed; + +/** + * Hook listener for course format + * + * @package core_courseformat + * @copyright 2024 Laurent David + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class hook_listener { + /** + * Add members to group room when a new member is added to the group. + * + * @param after_group_membership_added $hook The group membership added hook. + */ + public static function add_members_to_group( + after_group_membership_added $hook, + ): void { + $group = $hook->groupinstance; + $course = get_course($group->courseid); + base::invalidate_all_session_caches_for_course($course); + } + + /** + * Remove members from the room when a member is removed from group room. + * + * @param after_group_membership_removed $hook The group membership removed hook. + */ + public static function remove_members_from_group( + after_group_membership_removed $hook, + ): void { + $group = $hook->groupinstance; + $course = get_course($group->courseid); + base::invalidate_all_session_caches_for_course($course); + } +} diff --git a/lib/db/hooks.php b/lib/db/hooks.php index af6ec2165aa..a3b15f8f697 100644 --- a/lib/db/hooks.php +++ b/lib/db/hooks.php @@ -45,6 +45,14 @@ $callbacks = [ 'hook' => \core_group\hook\after_group_membership_removed::class, 'callback' => \core_communication\hook_listener::class . '::remove_members_from_group_room', ], + [ + 'hook' => \core_group\hook\after_group_membership_added::class, + 'callback' => \core_courseformat\hook_listener::class . '::add_members_to_group', + ], + [ + 'hook' => \core_group\hook\after_group_membership_removed::class, + 'callback' => \core_courseformat\hook_listener::class . '::remove_members_from_group', + ], [ 'hook' => \core_course\hook\after_course_created::class, 'callback' => \core_communication\hook_listener::class . '::create_course_communication',