From 89f3974190b18bced1dff7e39ffcf87853b66653 Mon Sep 17 00:00:00 2001 From: skodak Date: Wed, 26 Dec 2007 12:42:33 +0000 Subject: [PATCH] MDL-12351 verify active group before use because allowed groups may change; merged from MOODLE_19_STABLE --- lib/grouplib.php | 60 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/lib/grouplib.php b/lib/grouplib.php index 6bbe49bab9..1ccac548f5 100644 --- a/lib/grouplib.php +++ b/lib/grouplib.php @@ -284,7 +284,7 @@ function groups_get_activity_groupmode($cm) { * @return mixed void or string depending on $return param */ function groups_print_course_menu($course, $urlroot, $return=false) { - global $CFG, $USER; + global $CFG, $USER, $SESSION; if (!$groupmode = $course->groupmode) { if ($return) { @@ -297,8 +297,36 @@ function groups_print_course_menu($course, $urlroot, $return=false) { $context = get_context_instance(CONTEXT_COURSE, $course->id); if ($groupmode == VISIBLEGROUPS or has_capability('moodle/site:accessallgroups', $context)) { $allowedgroups = groups_get_all_groups($course->id, 0); + // detect changes related to groups and fix active group + if (!empty($SESSION->activegroup[$course->id][VISIBLEGROUPS][0])) { + if (!array_key_exists($SESSION->activegroup[$course->id][VISIBLEGROUPS][0], $allowedgroups)) { + // active does not exist anymore + unset($SESSION->activegroup[$course->id][VISIBLEGROUPS][0]); + } + } + if (!empty($SESSION->activegroup[$course->id]['aag'][0])) { + if (!array_key_exists($SESSION->activegroup[$course->id]['aag'][0], $allowedgroups)) { + // active group does not exist anymore + unset($SESSION->activegroup[$course->id]['aag'][0]); + } + } + } else { $allowedgroups = groups_get_all_groups($course->id, $USER->id); + // detect changes related to groups and fix active group + if (isset($SESSION->activegroup[$course->id][SEPARATEGROUPS][0])) { + if ($SESSION->activegroup[$course->id][SEPARATEGROUPS][0] == 0) { + if ($allowedgroups) { + // somebody must have assigned at least one group, we can select it now - yay! + unset($SESSION->activegroup[$course->id][SEPARATEGROUPS][0]); + } + } else { + if (!array_key_exists($SESSION->activegroup[$course->id][SEPARATEGROUPS][0], $allowedgroups)) { + // active group not allowed or does not exist anymore + unset($SESSION->activegroup[$course->id][SEPARATEGROUPS][0]); + } + } + } } $activegroup = groups_get_course_group($course, true); @@ -351,7 +379,7 @@ function groups_print_course_menu($course, $urlroot, $return=false) { * @return mixed void or string depending on $return param */ function groups_print_activity_menu($cm, $urlroot, $return=false, $hideallparticipants=false) { - global $CFG, $USER; + global $CFG, $USER, $SESSION; // groupings are ignored when not enabled if (empty($CFG->enablegroupings)) { @@ -369,8 +397,36 @@ function groups_print_activity_menu($cm, $urlroot, $return=false, $hideallpartic $context = get_context_instance(CONTEXT_MODULE, $cm->id); if ($groupmode == VISIBLEGROUPS or has_capability('moodle/site:accessallgroups', $context)) { $allowedgroups = groups_get_all_groups($cm->course, 0, $cm->groupingid); // any group in grouping (all if groupings not used) + // detect changes related to groups and fix active group + if (!empty($SESSION->activegroup[$cm->course][VISIBLEGROUPS][$cm->groupingid])) { + if (!array_key_exists($SESSION->activegroup[$cm->course][VISIBLEGROUPS][$cm->groupingid], $allowedgroups)) { + // active group does not exist anymore + unset($SESSION->activegroup[$cm->course][VISIBLEGROUPS][$cm->groupingid]); + } + } + if (!empty($SESSION->activegroup[$cm->course]['aag'][$cm->groupingid])) { + if (!array_key_exists($SESSION->activegroup[$cm->course]['aag'][$cm->groupingid], $allowedgroups)) { + // active group does not exist anymore + unset($SESSION->activegroup[$cm->course]['aag'][$cm->groupingid]); + } + } + } else { $allowedgroups = groups_get_all_groups($cm->course, $USER->id, $cm->groupingid); // only assigned groups + // detect changes related to groups and fix active group + if (isset($SESSION->activegroup[$cm->course][SEPARATEGROUPS][$cm->groupingid])) { + if ($SESSION->activegroup[$cm->course][SEPARATEGROUPS][$cm->groupingid] == 0) { + if ($allowedgroups) { + // somebody must have assigned at least one group, we can select it now - yay! + unset($SESSION->activegroup[$cm->course][SEPARATEGROUPS][$cm->groupingid]); + } + } else { + if (!array_key_exists($SESSION->activegroup[$cm->course][SEPARATEGROUPS][$cm->groupingid], $allowedgroups)) { + // active group not allowed or does not exist anymore + unset($SESSION->activegroup[$cm->course][SEPARATEGROUPS][$cm->groupingid]); + } + } + } } $activegroup = groups_get_activity_group($cm, true); -- 2.39.5