The methods workshop::delete_submission() and workshop::delete_assessment() did
not delete files (embedded and attachments) associated with the given
submission or assessment. This is fixed now.
Additionally, the delete_assessment() method now cleans-up records from the
table workshop_grades, too. This internal workshop API still does not give
workshop subplugins a chance to clean up their data, should they store them in
their own tables instead of the workshop_grades one. This should be improved in
the future yet.
global $DB;
$assessments = $DB->get_records('workshop_assessments', array('submissionid' => $submission->id), '', 'id');
$this->delete_assessment(array_keys($assessments));
global $DB;
$assessments = $DB->get_records('workshop_assessments', array('submissionid' => $submission->id), '', 'id');
$this->delete_assessment(array_keys($assessments));
+
+ $fs = get_file_storage();
+ $fs->delete_area_files($this->context->id, 'mod_workshop', 'submission_content', $submission->id);
+ $fs->delete_area_files($this->context->id, 'mod_workshop', 'submission_attachment', $submission->id);
+
$DB->delete_records('workshop_submissions', array('id' => $submission->id));
}
$DB->delete_records('workshop_submissions', array('id' => $submission->id));
}
- * Delete assessment record or records
+ * Delete assessment record or records.
- * @param mixed $id int|array assessment id or array of assessments ids
- * @return bool false if $id not a valid parameter, true otherwise
+ * Removes associated records from the workshop_grades table, too.
+ *
+ * @param int|array $id assessment id or array of assessments ids
+ * @todo Give grading strategy plugins a chance to clean up their data, too.
+ * @return bool true
*/
public function delete_assessment($id) {
global $DB;
*/
public function delete_assessment($id) {
global $DB;
- // todo remove all given grades from workshop_grades;
+ if (empty($id)) {
+ return true;
+ }
+
+ $fs = get_file_storage();
- return $DB->delete_records_list('workshop_assessments', 'id', $id);
+ $DB->delete_records_list('workshop_grades', 'assessmentid', $id);
+ foreach ($id as $itemid) {
+ $fs->delete_area_files($this->context->id, 'mod_workshop', 'overallfeedback_content', $itemid);
+ $fs->delete_area_files($this->context->id, 'mod_workshop', 'overallfeedback_attachment', $itemid);
+ }
+ $DB->delete_records_list('workshop_assessments', 'id', $id);
+
- return $DB->delete_records('workshop_assessments', array('id' => $id));
+ $DB->delete_records('workshop_grades', array('assessmentid' => $id));
+ $fs->delete_area_files($this->context->id, 'mod_workshop', 'overallfeedback_content', $id);
+ $fs->delete_area_files($this->context->id, 'mod_workshop', 'overallfeedback_attachment', $id);
+ $DB->delete_records('workshop_assessments', array('id' => $id));