mirror of
https://github.com/moodle/moodle.git
synced 2025-08-06 01:16:44 +02:00
MDL-40218 Assignment: Added show/hide suspended users functionality
This commit is contained in:
parent
f8e6e5bc30
commit
4c4c7b3f3f
3 changed files with 88 additions and 9 deletions
|
@ -67,6 +67,13 @@ class mod_assign_grading_options_form extends moodleform {
|
||||||
$mform->setDefault('quickgrading', $instance['quickgrading']);
|
$mform->setDefault('quickgrading', $instance['quickgrading']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Show active/suspended user option.
|
||||||
|
if ($instance['showonlyactiveenrolopt']) {
|
||||||
|
$mform->addElement('checkbox', 'showonlyactiveenrol', get_string('showonlyactiveenrol', 'grades'), '', $dirtyclass);
|
||||||
|
$mform->addHelpButton('showonlyactiveenrol', 'showonlyactiveenrol', 'grades');
|
||||||
|
$mform->setDefault('showonlyactiveenrol', $instance['showonlyactiveenrol']);
|
||||||
|
}
|
||||||
|
|
||||||
// Hidden params.
|
// Hidden params.
|
||||||
$mform->addElement('hidden', 'contextid', $instance['contextid']);
|
$mform->addElement('hidden', 'contextid', $instance['contextid']);
|
||||||
$mform->setType('contextid', PARAM_INT);
|
$mform->setType('contextid', PARAM_INT);
|
||||||
|
|
|
@ -122,6 +122,12 @@ class assign {
|
||||||
/** @var array of marking workflow states for the current user */
|
/** @var array of marking workflow states for the current user */
|
||||||
private $markingworkflowstates = null;
|
private $markingworkflowstates = null;
|
||||||
|
|
||||||
|
/** @var bool whether to exclude users with inactive enrolment */
|
||||||
|
private $showonlyactiveenrol = true;
|
||||||
|
|
||||||
|
/** @var array list of suspended user IDs in form of ([id1] => id1) */
|
||||||
|
private $susers = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for the base assign class.
|
* Constructor for the base assign class.
|
||||||
*
|
*
|
||||||
|
@ -134,7 +140,7 @@ class assign {
|
||||||
* otherwise this class will load one from the context as required.
|
* otherwise this class will load one from the context as required.
|
||||||
*/
|
*/
|
||||||
public function __construct($coursemodulecontext, $coursemodule, $course) {
|
public function __construct($coursemodulecontext, $coursemodule, $course) {
|
||||||
global $PAGE;
|
global $PAGE, $CFG;
|
||||||
|
|
||||||
$this->context = $coursemodulecontext;
|
$this->context = $coursemodulecontext;
|
||||||
$this->coursemodule = $coursemodule;
|
$this->coursemodule = $coursemodule;
|
||||||
|
@ -145,6 +151,15 @@ class assign {
|
||||||
|
|
||||||
$this->submissionplugins = $this->load_plugins('assignsubmission');
|
$this->submissionplugins = $this->load_plugins('assignsubmission');
|
||||||
$this->feedbackplugins = $this->load_plugins('assignfeedback');
|
$this->feedbackplugins = $this->load_plugins('assignfeedback');
|
||||||
|
|
||||||
|
$defaultgradeshowactiveenrol = !empty($CFG->grade_report_showonlyactiveenrol);
|
||||||
|
$this->showonlyactiveenrol = get_user_preferences('grade_report_showonlyactiveenrol', $defaultgradeshowactiveenrol);
|
||||||
|
if (!is_null($this->context)) {
|
||||||
|
$this->showonlyactiveenrol = $this->showonlyactiveenrol ||
|
||||||
|
!has_capability('moodle/course:viewsuspendedusers', $this->context);
|
||||||
|
|
||||||
|
$this->susers = get_suspended_userids($this->context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1256,9 +1271,11 @@ class assign {
|
||||||
*/
|
*/
|
||||||
public function list_participants($currentgroup, $idsonly) {
|
public function list_participants($currentgroup, $idsonly) {
|
||||||
if ($idsonly) {
|
if ($idsonly) {
|
||||||
return get_enrolled_users($this->context, 'mod/assign:submit', $currentgroup, 'u.id');
|
return get_enrolled_users($this->context, 'mod/assign:submit', $currentgroup, 'u.id', null, null, null,
|
||||||
|
$this->showonlyactiveenrol);
|
||||||
} else {
|
} else {
|
||||||
return get_enrolled_users($this->context, 'mod/assign:submit', $currentgroup);
|
return get_enrolled_users($this->context, 'mod/assign:submit', $currentgroup, 'u.*', null, null, null,
|
||||||
|
$this->showonlyactiveenrol);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1291,7 +1308,7 @@ class assign {
|
||||||
* @return int number of matching users
|
* @return int number of matching users
|
||||||
*/
|
*/
|
||||||
public function count_participants($currentgroup) {
|
public function count_participants($currentgroup) {
|
||||||
return count_enrolled_users($this->context, 'mod/assign:submit', $currentgroup);
|
return count_enrolled_users($this->context, 'mod/assign:submit', $currentgroup, $this->showonlyactiveenrol);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1340,6 +1357,12 @@ class assign {
|
||||||
s.status = :submitted AND
|
s.status = :submitted AND
|
||||||
(s.timemodified > g.timemodified OR g.timemodified IS NULL)';
|
(s.timemodified > g.timemodified OR g.timemodified IS NULL)';
|
||||||
|
|
||||||
|
if ($this->showonlyactiveenrol && sizeof($this->susers)) {
|
||||||
|
$susql = '';
|
||||||
|
list($susql, $suparams) = $DB->get_in_or_equal($this->susers, SQL_PARAMS_NAMED, 'sng', false);
|
||||||
|
$sql .= " AND s.userid $susql";
|
||||||
|
$params = array_merge($params, $suparams);
|
||||||
|
}
|
||||||
return $DB->count_records_sql($sql, $params);
|
return $DB->count_records_sql($sql, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1365,6 +1388,12 @@ class assign {
|
||||||
JOIN(' . $esql . ') e ON e.id = g.userid
|
JOIN(' . $esql . ') e ON e.id = g.userid
|
||||||
WHERE g.assignment = :assignid';
|
WHERE g.assignment = :assignid';
|
||||||
|
|
||||||
|
if ($this->showonlyactiveenrol && sizeof($this->susers)) {
|
||||||
|
$susql = '';
|
||||||
|
list($susql, $suparams) = $DB->get_in_or_equal($this->susers, SQL_PARAMS_NAMED, 'cg', false);
|
||||||
|
$sql .= " AND g.userid $susql";
|
||||||
|
$params = array_merge($params, $suparams);
|
||||||
|
}
|
||||||
return $DB->count_records_sql($sql, $params);
|
return $DB->count_records_sql($sql, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1405,6 +1434,12 @@ class assign {
|
||||||
WHERE
|
WHERE
|
||||||
s.assignment = :assignid AND
|
s.assignment = :assignid AND
|
||||||
s.timemodified IS NOT NULL';
|
s.timemodified IS NOT NULL';
|
||||||
|
|
||||||
|
if ($this->showonlyactiveenrol && sizeof($this->susers)) {
|
||||||
|
list($susql, $suparams) = $DB->get_in_or_equal($this->susers, SQL_PARAMS_NAMED, 'cs', false);
|
||||||
|
$sql .= " AND userid $susql";
|
||||||
|
$params = array_merge($params, $suparams);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $DB->count_records_sql($sql, $params);
|
return $DB->count_records_sql($sql, $params);
|
||||||
|
@ -1455,6 +1490,12 @@ class assign {
|
||||||
s.assignment = :assignid AND
|
s.assignment = :assignid AND
|
||||||
s.timemodified IS NOT NULL AND
|
s.timemodified IS NOT NULL AND
|
||||||
s.status = :submissionstatus';
|
s.status = :submissionstatus';
|
||||||
|
|
||||||
|
if ($this->showonlyactiveenrol && sizeof($this->susers)) {
|
||||||
|
list($susql, $suparams) = $DB->get_in_or_equal($this->susers, SQL_PARAMS_NAMED, 'csws', false);
|
||||||
|
$sql .= " AND s.userid $susql";
|
||||||
|
$params = array_merge($params, $suparams);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $DB->count_records_sql($sql, $params);
|
return $DB->count_records_sql($sql, $params);
|
||||||
|
@ -1839,6 +1880,14 @@ class assign {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Exclude suspended users, if user can't see them.
|
||||||
|
if (!has_capability('moodle/course:viewsuspendedusers', $this->context)) {
|
||||||
|
foreach ($members as $key => $member) {
|
||||||
|
if (in_array($member->id, $this->susers)) {
|
||||||
|
unset($members[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return $members;
|
return $members;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2289,7 +2338,8 @@ class assign {
|
||||||
require_capability('mod/assign:grade', $this->context);
|
require_capability('mod/assign:grade', $this->context);
|
||||||
|
|
||||||
// Load all users with submit.
|
// Load all users with submit.
|
||||||
$students = get_enrolled_users($this->context, "mod/assign:submit");
|
$students = get_enrolled_users($this->context, "mod/assign:submit", null, 'u.*', null, null, null,
|
||||||
|
$this->showonlyactiveenrol);
|
||||||
|
|
||||||
// Build a list of files to zip.
|
// Build a list of files to zip.
|
||||||
$filesforzipping = array();
|
$filesforzipping = array();
|
||||||
|
@ -2904,6 +2954,7 @@ class assign {
|
||||||
$controller = $gradingmanager->get_active_controller();
|
$controller = $gradingmanager->get_active_controller();
|
||||||
$showquickgrading = empty($controller);
|
$showquickgrading = empty($controller);
|
||||||
$quickgrading = get_user_preferences('assign_quickgrading', false);
|
$quickgrading = get_user_preferences('assign_quickgrading', false);
|
||||||
|
$showonlyactiveenrolopt = has_capability('moodle/course:viewsuspendedusers', $this->context);
|
||||||
|
|
||||||
$markingallocation = $this->get_instance()->markingallocation &&
|
$markingallocation = $this->get_instance()->markingallocation &&
|
||||||
has_capability('mod/assign:manageallocations', $this->context);
|
has_capability('mod/assign:manageallocations', $this->context);
|
||||||
|
@ -2934,7 +2985,9 @@ class assign {
|
||||||
'showquickgrading'=>$showquickgrading,
|
'showquickgrading'=>$showquickgrading,
|
||||||
'quickgrading'=>$quickgrading,
|
'quickgrading'=>$quickgrading,
|
||||||
'markingworkflowopt'=>$markingworkflowoptions,
|
'markingworkflowopt'=>$markingworkflowoptions,
|
||||||
'markingallocationopt'=>$markingallocationoptions);
|
'markingallocationopt'=>$markingallocationoptions,
|
||||||
|
'showonlyactiveenrolopt'=>$showonlyactiveenrolopt,
|
||||||
|
'showonlyactiveenrol'=>$this->showonlyactiveenrol);
|
||||||
|
|
||||||
$classoptions = array('class'=>'gradingoptionsform');
|
$classoptions = array('class'=>'gradingoptionsform');
|
||||||
$gradingoptionsform = new mod_assign_grading_options_form(null,
|
$gradingoptionsform = new mod_assign_grading_options_form(null,
|
||||||
|
@ -3925,7 +3978,9 @@ class assign {
|
||||||
foreach ($team as $member) {
|
foreach ($team as $member) {
|
||||||
$membersubmission = $this->get_user_submission($member->id, false, $submission->attemptnumber);
|
$membersubmission = $this->get_user_submission($member->id, false, $submission->attemptnumber);
|
||||||
|
|
||||||
if (!$membersubmission || $membersubmission->status != ASSIGN_SUBMISSION_STATUS_SUBMITTED) {
|
// If no submission found for team member and member is active then everyone has not submitted.
|
||||||
|
if (!$membersubmission || $membersubmission->status != ASSIGN_SUBMISSION_STATUS_SUBMITTED
|
||||||
|
&& (!in_array($member->id, $this->susers))) {
|
||||||
$allsubmitted = false;
|
$allsubmitted = false;
|
||||||
if ($anysubmitted) {
|
if ($anysubmitted) {
|
||||||
break;
|
break;
|
||||||
|
@ -4095,7 +4150,8 @@ class assign {
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function get_graders($userid) {
|
protected function get_graders($userid) {
|
||||||
$potentialgraders = get_enrolled_users($this->context, 'mod/assign:grade');
|
// Potential graders should be active users only.
|
||||||
|
$potentialgraders = get_enrolled_users($this->context, "mod/assign:grade", null, 'u.*', null, null, null, true);
|
||||||
|
|
||||||
$graders = array();
|
$graders = array();
|
||||||
if (groups_get_activity_groupmode($this->get_course_module()) == SEPARATEGROUPS) {
|
if (groups_get_activity_groupmode($this->get_course_module()) == SEPARATEGROUPS) {
|
||||||
|
@ -4801,6 +4857,11 @@ class assign {
|
||||||
$gradingmanager = get_grading_manager($this->get_context(), 'mod_assign', 'submissions');
|
$gradingmanager = get_grading_manager($this->get_context(), 'mod_assign', 'submissions');
|
||||||
$controller = $gradingmanager->get_active_controller();
|
$controller = $gradingmanager->get_active_controller();
|
||||||
$showquickgrading = empty($controller);
|
$showquickgrading = empty($controller);
|
||||||
|
if (!is_null($this->context)) {
|
||||||
|
$showonlyactiveenrolopt = has_capability('moodle/course:viewsuspendedusers', $this->context);
|
||||||
|
} else {
|
||||||
|
$showonlyactiveenrolopt = false;
|
||||||
|
}
|
||||||
|
|
||||||
$markingallocation = $this->get_instance()->markingallocation &&
|
$markingallocation = $this->get_instance()->markingallocation &&
|
||||||
has_capability('mod/assign:manageallocations', $this->context);
|
has_capability('mod/assign:manageallocations', $this->context);
|
||||||
|
@ -4829,7 +4890,9 @@ class assign {
|
||||||
'showquickgrading'=>$showquickgrading,
|
'showquickgrading'=>$showquickgrading,
|
||||||
'quickgrading'=>false,
|
'quickgrading'=>false,
|
||||||
'markingworkflowopt' => $markingworkflowoptions,
|
'markingworkflowopt' => $markingworkflowoptions,
|
||||||
'markingallocationopt' => $markingallocationoptions);
|
'markingallocationopt' => $markingallocationoptions,
|
||||||
|
'showonlyactiveenrolopt'=>$showonlyactiveenrolopt,
|
||||||
|
'showonlyactiveenrol'=>$this->showonlyactiveenrol);
|
||||||
|
|
||||||
$mform = new mod_assign_grading_options_form(null, $gradingoptionsparams);
|
$mform = new mod_assign_grading_options_form(null, $gradingoptionsparams);
|
||||||
if ($formdata = $mform->get_data()) {
|
if ($formdata = $mform->get_data()) {
|
||||||
|
@ -4846,6 +4909,11 @@ class assign {
|
||||||
if ($showquickgrading) {
|
if ($showquickgrading) {
|
||||||
set_user_preference('assign_quickgrading', isset($formdata->quickgrading));
|
set_user_preference('assign_quickgrading', isset($formdata->quickgrading));
|
||||||
}
|
}
|
||||||
|
if (!empty($showonlyactiveenrolopt)) {
|
||||||
|
$showonlyactiveenrol = isset($formdata->showonlyactiveenrol);
|
||||||
|
set_user_preference('grade_report_showonlyactiveenrol', $showonlyactiveenrol);
|
||||||
|
$this->showonlyactiveenrol = $showonlyactiveenrol;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -149,6 +149,10 @@ M.mod_assign.init_grading_options = function(Y) {
|
||||||
Y.one('form.gradingoptionsform').submit();
|
Y.one('form.gradingoptionsform').submit();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
var showonlyactiveenrolelement = Y.one('#id_showonlyactiveenrol');
|
||||||
|
showonlyactiveenrolelement.on('change', function(e) {
|
||||||
|
Y.one('form.gradingoptionsform').submit();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue