Skip to content

Commit

Permalink
MDL-29336 Saving grade mapping table in the Workshop
Browse files Browse the repository at this point in the history
The Workshop module using the "Number of errors" grading strategy did
not save all items in the grade mapping table. If some assessment form
fields have weight > 1, the number of possible errors is greater that
the number of the assessment form fields. The previous code deleted all
mappings where the number of errors was greater than the number of
fields.

In this patch, the maximum number of possible errors is calculated as a
sum of weights of all fields. Only mappings over this maximum are
deleted now.
  • Loading branch information
mudrd8mz committed Sep 22, 2011
1 parent dab8148 commit c8f1b81
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions mod/workshop/form/numerrors/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ public function save_edit_strategy_form(stdclass $data) {
$records = $data->numerrors; // data to be saved into {workshopform_numerrors}
$mappings = $data->mappings; // data to be saved into {workshopform_numerrors_map}
$todelete = array(); // dimension ids to be deleted
$maxnonegative = 0; // maximum number of (weighted) negative responses

for ($i=0; $i < $norepeats; $i++) {
$record = $records[$i];
Expand All @@ -181,6 +182,7 @@ public function save_edit_strategy_form(stdclass $data) {
// exiting field
$DB->update_record('workshopform_numerrors', $record);
}
$maxnonegative += $record->weight;
// re-save with correct path to embeded media files
$record = file_postupdate_standard_editor($record, 'description', $this->descriptionopts, $PAGE->context,
'workshopform_numerrors', 'description', $record->id);
Expand Down Expand Up @@ -212,8 +214,8 @@ public function save_edit_strategy_form(stdclass $data) {
$insql = '';
}
$sql = "DELETE FROM {workshopform_numerrors_map}
WHERE (($insql nonegative > :nodimensions) AND (workshopid = :workshopid))";
$params['nodimensions'] = $norepeats;
WHERE (($insql nonegative > :maxnonegative) AND (workshopid = :workshopid))";
$params['maxnonegative'] = $maxnonegative;
$params['workshopid'] = $this->workshop->id;
$DB->execute($sql, $params);
}
Expand Down

0 comments on commit c8f1b81

Please sign in to comment.