mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 08:22:07 +02:00
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:
parent
7f43748f18
commit
ef9ca10699
@ -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 '';
|
||||
|
@ -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]);
|
||||
}
|
||||
}
|
||||
|
@ -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];
|
||||
|
Loading…
x
Reference in New Issue
Block a user