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;
+ }
+
+ $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("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);
+ return $DB->count_records_sql($sql, $params);
}
/**
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);
}
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);
}
*/
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);
}