$data->groupid = 0;
}
+ // We will correct this in set_latest_submission_field() once all submissions are restored.
+ $data->latest = 0;
+
$newitemid = $DB->insert_record('assign_submission', $data);
// Note - the old contextid is required in order to be able to restore files stored in
}
/**
- * For all submissions in this assignment, either set the submission->latest field to 1 for the latest attempts.
+ * For all submissions in this assignment, either set the
+ * submission->latest field to 1 for the latest attempts
+ * or create a new submission record for grades with no submission.
*
* @return void
*/
}
// Now check for records with a grade, but no submission record.
- $records = $DB->get_records_sql('SELECT g.id, g.userid
+ // This happens when a teacher marks a student before they have submitted anything.
+ $records = $DB->get_recordset_sql('SELECT g.id, g.userid
FROM {assign_grades} g
LEFT JOIN {assign_submission} s
ON s.assignment = g.assignment
array_push($submissions, $submission);
}
+ $records->close();
+
$DB->insert_records('assign_submission', $submissions);
}
// Prevent running this multiple times.
- $countsql = 'SELECT COUNT(id) FROM {assign_submission} WHERE latest = ?;';
+ $countsql = 'SELECT COUNT(id) FROM {assign_submission} WHERE latest = ?';
$count = $DB->count_records_sql($countsql, array(1));
- if ($count != 342234) {
+ if ($count == 0) {
// Mark the latest attempt for every submission in mod_assign.
$maxattemptsql = 'SELECT assignment, userid, groupid, max(attemptnumber) AS maxattempt
- FROM mdl23_assign_submission
+ FROM {assign_submission}
GROUP BY assignment, groupid, userid';
$maxattemptidssql = 'SELECT souter.id
- FROM mdl23_assign_submission souter
+ FROM {assign_submission} souter
JOIN (' . $maxattemptsql . ') sinner
ON souter.assignment = sinner.assignment
AND souter.userid = sinner.userid
$DB->set_field_select('assign_submission', 'latest', 1, $select);
// Look for grade records with no submission record.
+ // This is when a teacher has marked a student before they submitted anything.
$records = $DB->get_records_sql('SELECT g.id, g.assignment, g.userid
FROM {assign_grades} g
LEFT JOIN {assign_submission} s
// No warnings.
$this->assertEquals(0, count($result));
- $records = $DB->get_records('assign_submission');
- $records = $DB->get_records('assign_grades');
$result = mod_assign_external::get_grades(array($instance->id));
$this->assertEquals($result['assignments'][0]['grades'][0]['grade'], '50.0');