MDL-36263 Assignment: Do not count submissions of unenrolled users

This commit is contained in:
Damyon Wiese
2012-12-11 10:12:26 +13:00
committed by Sam Hemelryk
parent 5b2313c26c
commit 6466396f38
2 changed files with 83 additions and 23 deletions
+79 -21
View File
@@ -1138,16 +1138,30 @@ class assign {
public function count_submissions_need_grading() {
global $DB;
$params = array($this->get_course_module()->instance, ASSIGN_SUBMISSION_STATUS_SUBMITTED);
if ($this->get_instance()->teamsubmission) {
// This does not make sense for group assignment because the submission is shared.
return 0;
}
return $DB->count_records_sql("SELECT COUNT('x')
FROM {assign_submission} s
LEFT JOIN {assign_grades} g ON s.assignment = g.assignment AND s.userid = g.userid
WHERE s.assignment = ?
AND s.timemodified IS NOT NULL
AND (s.timemodified > g.timemodified OR g.timemodified IS NULL)
AND s.status = ?",
$params);
$currentgroup = groups_get_activity_group($this->get_course_module(), true);
list($esql, $params) = get_enrolled_sql($this->get_context(), 'mod/assign:submit', $currentgroup, false);
$params['assignid'] = $this->get_instance()->id;
$params['submitted'] = ASSIGN_SUBMISSION_STATUS_SUBMITTED;
$sql = 'SELECT COUNT(s.userid)
FROM {assign_submission} s
LEFT JOIN {assign_grades} g ON
s.assignment = g.assignment AND
s.userid = g.userid
JOIN(' . $esql . ') AS e ON e.id = s.userid
WHERE
s.assignment = :assignid AND
s.timemodified IS NOT NULL AND
s.status = :submitted AND
(s.timemodified > g.timemodified OR g.timemodified IS NULL)';
return $DB->count_records_sql($sql, $params);
}
/**
@@ -1162,8 +1176,15 @@ class assign {
return 0;
}
$sql = 'SELECT COUNT(id) FROM {assign_grades} WHERE assignment = ?';
$params = array($this->get_course_module()->instance);
$currentgroup = groups_get_activity_group($this->get_course_module(), true);
list($esql, $params) = get_enrolled_sql($this->get_context(), 'mod/assign:submit', $currentgroup, false);
$params['assignid'] = $this->get_instance()->id;
$sql = 'SELECT COUNT(g.userid)
FROM {assign_grades} g
JOIN(' . $esql . ') AS e ON e.id = g.userid
WHERE g.assignment = :assignid';
return $DB->count_records_sql($sql, $params);
}
@@ -1180,14 +1201,33 @@ class assign {
return 0;
}
$sql = 'SELECT COUNT(id) FROM {assign_submission} WHERE assignment = ?';
$params = array($this->get_course_module()->instance);
$params = array();
if ($this->get_instance()->teamsubmission) {
// only look at team submissions
$sql .= ' AND userid = ?';
$params[] = 0;
// We cannot join on the enrolment tables for group submissions (no userid).
$sql = 'SELECT COUNT(s.groupid)
FROM {assign_submission} s
WHERE
s.assignment = :assignid AND
s.timemodified IS NOT NULL AND
s.userid = :groupuserid';
$params['assignid'] = $this->get_instance()->id;
$params['groupuserid'] = 0;
} else {
$currentgroup = groups_get_activity_group($this->get_course_module(), true);
list($esql, $params) = get_enrolled_sql($this->get_context(), 'mod/assign:submit', $currentgroup, false);
$params['assignid'] = $this->get_instance()->id;
$sql = 'SELECT COUNT(s.userid)
FROM {assign_submission} s
JOIN(' . $esql . ') AS e ON e.id = s.userid
WHERE
s.assignment = :assignid AND
s.timemodified IS NOT NULL';
}
return $DB->count_records_sql($sql, $params);
}
@@ -1199,14 +1239,32 @@ class assign {
*/
public function count_submissions_with_status($status) {
global $DB;
$sql = 'SELECT COUNT(id) FROM {assign_submission} WHERE assignment = ? AND status = ?';
$params = array($this->get_course_module()->instance, $status);
$currentgroup = groups_get_activity_group($this->get_course_module(), true);
list($esql, $params) = get_enrolled_sql($this->get_context(), 'mod/assign:submit', $currentgroup, false);
$params['assignid'] = $this->get_instance()->id;
$params['submissionstatus'] = $status;
if ($this->get_instance()->teamsubmission) {
// only look at team submissions
$sql .= ' AND userid = ?';
$params[] = 0;
$sql = 'SELECT COUNT(s.groupid)
FROM {assign_submission} s
WHERE
s.assignment = :assignid AND
s.timemodified IS NOT NULL AND
s.userid = :groupuserid AND
s.status = :submissionstatus';
$params['groupuserid'] = 0;
} else {
$sql = 'SELECT COUNT(s.userid)
FROM {assign_submission} s
JOIN(' . $esql . ') AS e ON e.id = s.userid
WHERE
s.assignment = :assignid AND
s.timemodified IS NOT NULL AND
s.status = :submissionstatus';
}
return $DB->count_records_sql($sql, $params);
}
+4 -2
View File
@@ -254,8 +254,10 @@ class mod_assign_renderer extends plugin_renderer_base {
if ($summary->submissionsenabled) {
$this->add_table_row_tuple($t, get_string('numberofsubmittedassignments', 'assign'),
$summary->submissionssubmittedcount);
$this->add_table_row_tuple($t, get_string('numberofsubmissionsneedgrading', 'assign'),
$summary->submissionsneedgradingcount);
if (!$summary->teamsubmission) {
$this->add_table_row_tuple($t, get_string('numberofsubmissionsneedgrading', 'assign'),
$summary->submissionsneedgradingcount);
}
}
$time = time();