mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00
MDL-44725 Availability: Replace groupmembersonly - assign (10)
Updated code to restrict list of users. Also includes changes to ensure that a cm_info object is available (required for availability checks). There is a tweak to upgradelib to reflect the different fields used. (Note that upgradelib is not used during upgrade, but only when converting assignments from the old assignment module.)
This commit is contained in:
parent
c234c34085
commit
c13ac85db8
4 changed files with 32 additions and 14 deletions
|
@ -98,7 +98,7 @@ class assign {
|
||||||
/** @var assign_renderer the custom renderer for this module */
|
/** @var assign_renderer the custom renderer for this module */
|
||||||
private $output;
|
private $output;
|
||||||
|
|
||||||
/** @var stdClass the course module for this assign instance */
|
/** @var cm_info the course module for this assign instance */
|
||||||
private $coursemodule;
|
private $coursemodule;
|
||||||
|
|
||||||
/** @var array cache for things like the coursemodule name or the scale menu -
|
/** @var array cache for things like the coursemodule name or the scale menu -
|
||||||
|
@ -138,6 +138,9 @@ class assign {
|
||||||
/**
|
/**
|
||||||
* Constructor for the base assign class.
|
* Constructor for the base assign class.
|
||||||
*
|
*
|
||||||
|
* Note: For $coursemodule you can supply a stdclass if you like, but it
|
||||||
|
* will be more efficient to supply a cm_info object.
|
||||||
|
*
|
||||||
* @param mixed $coursemodulecontext context|null the course module context
|
* @param mixed $coursemodulecontext context|null the course module context
|
||||||
* (or the course context if the coursemodule has not been
|
* (or the course context if the coursemodule has not been
|
||||||
* created yet).
|
* created yet).
|
||||||
|
@ -148,9 +151,11 @@ class assign {
|
||||||
*/
|
*/
|
||||||
public function __construct($coursemodulecontext, $coursemodule, $course) {
|
public function __construct($coursemodulecontext, $coursemodule, $course) {
|
||||||
$this->context = $coursemodulecontext;
|
$this->context = $coursemodulecontext;
|
||||||
$this->coursemodule = $coursemodule;
|
|
||||||
$this->course = $course;
|
$this->course = $course;
|
||||||
|
|
||||||
|
// Ensure that $this->coursemodule is a cm_info object (or null).
|
||||||
|
$this->coursemodule = cm_info::create($coursemodule);
|
||||||
|
|
||||||
// Temporary cache only lives for a single request - used to reduce db lookups.
|
// Temporary cache only lives for a single request - used to reduce db lookups.
|
||||||
$this->cache = array();
|
$this->cache = array();
|
||||||
|
|
||||||
|
@ -1182,7 +1187,7 @@ class assign {
|
||||||
/**
|
/**
|
||||||
* Get the current course module.
|
* Get the current course module.
|
||||||
*
|
*
|
||||||
* @return mixed stdClass|null The course module
|
* @return cm_info|null The course module or null if not known
|
||||||
*/
|
*/
|
||||||
public function get_course_module() {
|
public function get_course_module() {
|
||||||
if ($this->coursemodule) {
|
if ($this->coursemodule) {
|
||||||
|
@ -1193,11 +1198,8 @@ class assign {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->context->contextlevel == CONTEXT_MODULE) {
|
if ($this->context->contextlevel == CONTEXT_MODULE) {
|
||||||
$this->coursemodule = get_coursemodule_from_id('assign',
|
$modinfo = get_fast_modinfo($this->get_course());
|
||||||
$this->context->instanceid,
|
$this->coursemodule = $modinfo->get_cm($this->context->instanceid);
|
||||||
0,
|
|
||||||
false,
|
|
||||||
MUST_EXIST);
|
|
||||||
return $this->coursemodule;
|
return $this->coursemodule;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -1336,7 +1338,8 @@ class assign {
|
||||||
$this->show_only_active_users());
|
$this->show_only_active_users());
|
||||||
|
|
||||||
$cm = $this->get_course_module();
|
$cm = $this->get_course_module();
|
||||||
$users = groups_filter_users_by_course_module_visible($cm, $users);
|
$info = new \core_availability\info_module($cm);
|
||||||
|
$users = $info->filter_user_list($users);
|
||||||
|
|
||||||
$this->participants[$key] = $users;
|
$this->participants[$key] = $users;
|
||||||
}
|
}
|
||||||
|
|
|
@ -579,6 +579,8 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_list_participants() {
|
public function test_list_participants() {
|
||||||
|
global $CFG, $DB;
|
||||||
|
|
||||||
$this->create_extra_users();
|
$this->create_extra_users();
|
||||||
$this->setUser($this->editingteachers[0]);
|
$this->setUser($this->editingteachers[0]);
|
||||||
$assign = $this->create_instance(array('grade'=>100));
|
$assign = $this->create_instance(array('grade'=>100));
|
||||||
|
@ -596,6 +598,18 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase {
|
||||||
set_user_preference('grade_report_showonlyactiveenrol', false);
|
set_user_preference('grade_report_showonlyactiveenrol', false);
|
||||||
$assign = $this->create_instance(array('grade'=>100));
|
$assign = $this->create_instance(array('grade'=>100));
|
||||||
$this->assertEquals(self::DEFAULT_STUDENT_COUNT + self::EXTRA_STUDENT_COUNT, count($assign->list_participants(null, true)));
|
$this->assertEquals(self::DEFAULT_STUDENT_COUNT + self::EXTRA_STUDENT_COUNT, count($assign->list_participants(null, true)));
|
||||||
|
|
||||||
|
// Turn on availability and a group restriction, and check that it doesn't
|
||||||
|
// show users who aren't in the group.
|
||||||
|
$CFG->enableavailability = true;
|
||||||
|
$specialgroup = $this->getDataGenerator()->create_group(
|
||||||
|
array('courseid' => $this->course->id));
|
||||||
|
$assign = $this->create_instance(array('grade' => 100,
|
||||||
|
'availability' => json_encode(\core_availability\tree::get_root_json(
|
||||||
|
array(\availability_group\condition::get_json($specialgroup->id))))));
|
||||||
|
groups_add_member($specialgroup, $this->students[0]);
|
||||||
|
groups_add_member($specialgroup, $this->students[1]);
|
||||||
|
$this->assertEquals(2, count($assign->list_participants(null, true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_count_teams() {
|
public function test_count_teams() {
|
||||||
|
@ -1173,13 +1187,15 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase {
|
||||||
|
|
||||||
$this->setAdminUser();
|
$this->setAdminUser();
|
||||||
$this->create_extra_users();
|
$this->create_extra_users();
|
||||||
$CFG->enablegroupmembersonly = true;
|
$CFG->enableavailability = true;
|
||||||
$grouping = $this->getDataGenerator()->create_grouping(array('courseid' => $this->course->id));
|
$grouping = $this->getDataGenerator()->create_grouping(array('courseid' => $this->course->id));
|
||||||
groups_assign_grouping($grouping->id, $this->groups[0]->id);
|
groups_assign_grouping($grouping->id, $this->groups[0]->id);
|
||||||
|
|
||||||
// Force create an assignment with SEPARATEGROUPS.
|
// Force create an assignment with SEPARATEGROUPS.
|
||||||
$instance = $this->getDataGenerator()->create_module('assign', array('course'=>$this->course->id),
|
$instance = $this->getDataGenerator()->create_module('assign', array('course'=>$this->course->id),
|
||||||
array('groupmembersonly' => SEPARATEGROUPS, 'groupingid' => $grouping->id));
|
array('availability' => json_encode(\core_availability\tree::get_root_json(array(
|
||||||
|
\availability_grouping\condition::get_json()))),
|
||||||
|
'groupingid' => $grouping->id));
|
||||||
|
|
||||||
$cm = get_coursemodule_from_instance('assign', $instance->id);
|
$cm = get_coursemodule_from_instance('assign', $instance->id);
|
||||||
$context = context_module::instance($cm->id);
|
$context = context_module::instance($cm->id);
|
||||||
|
|
|
@ -380,7 +380,6 @@ class assign_upgrade_manager {
|
||||||
$newcm->indent = $cm->indent;
|
$newcm->indent = $cm->indent;
|
||||||
$newcm->groupmode = $cm->groupmode;
|
$newcm->groupmode = $cm->groupmode;
|
||||||
$newcm->groupingid = $cm->groupingid;
|
$newcm->groupingid = $cm->groupingid;
|
||||||
$newcm->groupmembersonly = $cm->groupmembersonly;
|
|
||||||
$newcm->completion = $cm->completion;
|
$newcm->completion = $cm->completion;
|
||||||
$newcm->completiongradeitemnumber = $cm->completiongradeitemnumber;
|
$newcm->completiongradeitemnumber = $cm->completiongradeitemnumber;
|
||||||
$newcm->completionview = $cm->completionview;
|
$newcm->completionview = $cm->completionview;
|
||||||
|
|
|
@ -33,8 +33,8 @@ $urlparams = array('id' => $id,
|
||||||
'useridlistid' => optional_param('action', 0, PARAM_INT));
|
'useridlistid' => optional_param('action', 0, PARAM_INT));
|
||||||
|
|
||||||
$url = new moodle_url('/mod/assign/view.php', $urlparams);
|
$url = new moodle_url('/mod/assign/view.php', $urlparams);
|
||||||
$cm = get_coursemodule_from_id('assign', $id, 0, false, MUST_EXIST);
|
|
||||||
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
|
list ($course, $cm) = get_course_and_cm_from_cmid($id, 'assign');
|
||||||
|
|
||||||
require_login($course, true, $cm);
|
require_login($course, true, $cm);
|
||||||
$PAGE->set_url($url);
|
$PAGE->set_url($url);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue