MDL-38732 gradereport_grader: Handle simultaneous graders
This commit is contained in:
@@ -160,6 +160,7 @@ if ($USER->gradeediting[$course->id] && ($report->get_pref('showquickfeedback')
|
||||
echo '<div>';
|
||||
echo '<input type="hidden" value="'.s($courseid).'" name="id" />';
|
||||
echo '<input type="hidden" value="'.sesskey().'" name="sesskey" />';
|
||||
echo '<input type="hidden" value="'.time().'" name="timepageload" />';
|
||||
echo '<input type="hidden" value="grader" name="report"/>';
|
||||
echo '<input type="hidden" value="'.$page.'" name="page"/>';
|
||||
echo $reporthtml;
|
||||
|
||||
@@ -176,6 +176,7 @@ class grade_report_grader extends grade_report {
|
||||
|
||||
// Were any changes made?
|
||||
$changedgrades = false;
|
||||
$timepageload = clean_param($data->timepageload, PARAM_INT);
|
||||
|
||||
foreach ($data as $varname => $students) {
|
||||
|
||||
@@ -250,10 +251,15 @@ class grade_report_grader extends grade_report {
|
||||
}
|
||||
|
||||
$errorstr = '';
|
||||
// Warn if the grade is out of bounds.
|
||||
if (is_null($finalgrade)) {
|
||||
// ok
|
||||
} else {
|
||||
$skip = false;
|
||||
|
||||
$dategraded = $oldvalue->get_dategraded();
|
||||
if (!empty($dategraded) && $timepageload < $dategraded) {
|
||||
// Warn if the grade was updated while we were editing this form.
|
||||
$errorstr = 'gradewasmodifiedduringediting';
|
||||
$skip = true;
|
||||
} else if (!is_null($finalgrade)) {
|
||||
// Warn if the grade is out of bounds.
|
||||
$bounded = $gradeitem->bounded_grade($finalgrade);
|
||||
if ($bounded > $finalgrade) {
|
||||
$errorstr = 'lessthanmin';
|
||||
@@ -261,6 +267,7 @@ class grade_report_grader extends grade_report {
|
||||
$errorstr = 'morethanmax';
|
||||
}
|
||||
}
|
||||
|
||||
if ($errorstr) {
|
||||
$userfields = 'id, ' . get_all_user_name_fields(true);
|
||||
$user = $DB->get_record('user', array('id' => $userid), $userfields);
|
||||
@@ -268,6 +275,10 @@ class grade_report_grader extends grade_report {
|
||||
$gradestr->username = fullname($user);
|
||||
$gradestr->itemname = $gradeitem->get_name();
|
||||
$warnings[] = get_string($errorstr, 'grades', $gradestr);
|
||||
if ($skip) {
|
||||
// Skipping the update of this grade it failed the tests above.
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($datatype == 'feedback') {
|
||||
|
||||
@@ -302,6 +302,7 @@ $string['gradetype_help'] = 'There are 4 grade types:
|
||||
|
||||
Only value and scale grade types may be aggregated. The grade type for an activity-based grade item is set on the activity settings page.';
|
||||
$string['gradeview'] = 'View grade';
|
||||
$string['gradewasmodifiedduringediting'] = 'The grade entered for {$a->itemname} for {$a->username} was ignored because it was more recently updated by someone else.';
|
||||
$string['gradeweighthelp'] = 'Grade weight help';
|
||||
$string['groupavg'] = 'Group average';
|
||||
$string['hidden'] = 'Hidden';
|
||||
|
||||
@@ -564,6 +564,7 @@ class grade_category extends grade_object {
|
||||
$grade->finalgrade = null;
|
||||
|
||||
if (!is_null($oldfinalgrade)) {
|
||||
$grade->timemodified = time();
|
||||
$grade->update('aggregation');
|
||||
}
|
||||
return;
|
||||
@@ -606,6 +607,7 @@ class grade_category extends grade_object {
|
||||
$grade->finalgrade = null;
|
||||
|
||||
if (!is_null($oldfinalgrade)) {
|
||||
$grade->timemodified = time();
|
||||
$grade->update('aggregation');
|
||||
}
|
||||
return;
|
||||
@@ -622,6 +624,7 @@ class grade_category extends grade_object {
|
||||
|
||||
// update in db if changed
|
||||
if (grade_floats_different($grade->finalgrade, $oldfinalgrade)) {
|
||||
$grade->timemodified = time();
|
||||
$grade->update('aggregation');
|
||||
}
|
||||
|
||||
@@ -897,6 +900,7 @@ class grade_category extends grade_object {
|
||||
|
||||
// update in db if changed
|
||||
if (grade_floats_different($grade->finalgrade, $oldfinalgrade)) {
|
||||
$grade->timemodified = time();
|
||||
$grade->update('aggregation');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user