MDL-21415 reports: We should fetch active group from session not page params

Also donot allow active group to be set to something that user doesn't have access to
This commit is contained in:
Ankit Agarwal 2013-09-12 10:08:48 +08:00 committed by Dan Poltawski
parent 7f43748f18
commit ef9ca10699
3 changed files with 25 additions and 6 deletions

View File

@ -581,13 +581,24 @@ function groups_allgroups_course_menu($course, $urlroot, $update = false, $activ
$allowedgroups = groups_get_all_groups($course->id, $USER->id, $course->defaultgroupingid);
}
if ($update) {
$SESSION->activegroup[$course->id][$groupmode][$course->defaultgroupingid] = $activegroup;
}
foreach ($allowedgroups as $group) {
$groupsmenu[$group->id] = format_string($group->name);
}
if ($update) {
// Init activegroup array if necessary.
if (!isset($SESSION->activegroup)) {
$SESSION->activegroup = array();
}
if (!isset($SESSION->activegroup[$course->id])) {
$SESSION->activegroup[$course->id] = array(SEPARATEGROUPS => array(), VISIBLEGROUPS => array(), 'aag' => array());
}
if (empty($groupsmenu[$activegroup])) {
$activegroup = key($groupsmenu); // Force set to one of accessible groups.
}
$SESSION->activegroup[$course->id][$groupmode][$course->defaultgroupingid] = $activegroup;
}
$grouplabel = get_string('groups');
if (count($groupsmenu) == 0) {
return '';

View File

@ -713,10 +713,14 @@ class core_grouplib_testcase extends advanced_testcase {
$this->assertContains(format_string($group2->name), $html);
// Let us test activegroup changes now.
$this->setUser($user);
$SESSION->activegroup[$course->id][VISIBLEGROUPS][$course->defaultgroupingid] = 5;
groups_allgroups_course_menu($course, 'someurl.php', false); // Do not update session.
$this->assertSame(5, $SESSION->activegroup[$course->id][VISIBLEGROUPS][$course->defaultgroupingid]);
groups_allgroups_course_menu($course, 'someurl.php', true, 2); // Update session.
$this->assertSame(2, $SESSION->activegroup[$course->id][VISIBLEGROUPS][$course->defaultgroupingid]);
groups_allgroups_course_menu($course, 'someurl.php', true, $group1->id); // Update session.
$this->assertSame($group1->id, $SESSION->activegroup[$course->id][VISIBLEGROUPS][$course->defaultgroupingid]);
// Try to update session with an invalid groupid. It should not accept the invalid id.
groups_allgroups_course_menu($course, 'someurl.php', true, 256);
$this->assertEquals($group1->id, $SESSION->activegroup[$course->id][VISIBLEGROUPS][$course->defaultgroupingid]);
}
}

View File

@ -176,6 +176,10 @@ if (empty($select)) {
echo $select;
}
// Fetch current active group.
$groupmode = groups_get_course_groupmode($course);
$currentgroup = $SESSION->activegroup[$course->id][$groupmode][$course->defaultgroupingid];
if (!empty($instanceid) && !empty($roleid)) {
// from here assume we have at least the module we're using.
$cm = $modinfo->cms[$instanceid];