From afd2efc0e8dad9d433904e8d9d8bd128233ab8cf Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Mon, 28 Jan 2013 12:03:59 +0800 Subject: [PATCH] MDL-36090 core_grade: added logging of overriding of student grades --- backup/moodle2/restore_final_task.class.php | 3 +++ course/lib.php | 3 +++ grade/edit/tree/grade.php | 25 +++++++++++++++++++++ grade/report/grader/ajax_callbacks.php | 8 +++++++ grade/report/grader/lib.php | 6 +++++ 5 files changed, 45 insertions(+) diff --git a/backup/moodle2/restore_final_task.class.php b/backup/moodle2/restore_final_task.class.php index d336631eb5e..f4a2d46c945 100644 --- a/backup/moodle2/restore_final_task.class.php +++ b/backup/moodle2/restore_final_task.class.php @@ -143,6 +143,9 @@ class restore_final_task extends restore_task { $rules[] = new restore_log_rule('course', 'report stats', 'report/stats/index.php?id={course}', '{course}'); $rules[] = new restore_log_rule('course', 'view section', 'view.php?id={course}§ionid={course_section}', '{course_section}'); + // module 'grade' rules + $rules[] = new restore_log_rule('grade', 'update', 'report/grader/index.php?id={course}', null); + // module 'user' rules $rules[] = new restore_log_rule('user', 'view', 'view.php?id={user}&course={course}', '{user}'); $rules[] = new restore_log_rule('user', 'change password', 'view.php?id={user}&course={course}', '{user}'); diff --git a/course/lib.php b/course/lib.php index f1663f74464..a5e17f36e5a 100644 --- a/course/lib.php +++ b/course/lib.php @@ -105,6 +105,9 @@ function make_log_url($module, $url) { case 'role': $url = '/'.$url; break; + case 'grade': + $url = "/grade/$url"; + break; default: $url = "/mod/$module/$url"; break; diff --git a/grade/edit/tree/grade.php b/grade/edit/tree/grade.php index 88506226b26..92879862b5d 100644 --- a/grade/edit/tree/grade.php +++ b/grade/edit/tree/grade.php @@ -200,6 +200,18 @@ if ($mform->is_cancelled()) { $data->feedback = $old_grade_grade->feedback; $data->feedbackformat = $old_grade_grade->feedbackformat; } + + // Only log a grade override if they actually changed the student grade. + if ($data->finalgrade != $old_grade_grade->finalgrade) { + $url = '/report/grader/index.php?id=' . $course->id; + + $user = $DB->get_record('user', array('id'=>$data->userid), '*', MUST_EXIST); + $fullname = fullname($user); + + $info = "{$grade_item->itemname}: $fullname"; + add_to_log($course->id, 'grade', 'update', $url, $info); + } + // update final grade or feedback // when we set override grade the first time, it happens here $grade_item->update_final_grade($data->userid, $data->finalgrade, 'editgrade', $data->feedback, $data->feedbackformat); @@ -213,6 +225,19 @@ if ($mform->is_cancelled()) { $data->overridden = 0; // checkbox unticked } $grade_grade->set_overridden($data->overridden); + + if ($data->overridden == 0 && $data->overridden != $old_grade_grade->overridden) { + // Log removing an override. + // The addition of an override is logged above. + // One or the other will happen but never both. + $url = '/report/grader/index.php?id=' . $course->id; + + $user = $DB->get_record('user', array('id'=>$data->userid), '*', MUST_EXIST); + $fullname = fullname($user); + + $info = "{$grade_item->itemname}: $fullname"; + add_to_log($course->id, 'grade', 'update', $url, $info); + } } if (has_capability('moodle/grade:manage', $context) or has_capability('moodle/grade:hide', $context)) { diff --git a/grade/report/grader/ajax_callbacks.php b/grade/report/grader/ajax_callbacks.php index f0c7188ffff..b61f579d04f 100644 --- a/grade/report/grader/ajax_callbacks.php +++ b/grade/report/grader/ajax_callbacks.php @@ -118,6 +118,14 @@ switch ($action) { echo json_encode($json_object); die(); } else { + $url = '/report/grader/index.php?id=' . $course->id; + + $user = $DB->get_record('user', array('id'=>$userid), '*', MUST_EXIST); + $fullname = fullname($user); + + $info = "{$grade_item->itemname}: $fullname"; + add_to_log($course->id, 'grade', 'update', $url, $info); + $json_object->gradevalue = $finalvalue; if ($grade_item->update_final_grade($userid, $finalgrade, 'gradebook', $feedback, FORMAT_MOODLE)) { diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php index 07341343d2d..f1dd17ebb50 100644 --- a/grade/report/grader/lib.php +++ b/grade/report/grader/lib.php @@ -297,6 +297,12 @@ class grade_report_grader extends grade_report { } } + $url = '/report/grader/index.php?id=' . $this->course->id; + $fullname = fullname($this->users[$userid]); + + $info = "{$gradeitem->itemname}: $fullname"; + add_to_log($this->course->id, 'grade', 'update', $url, $info); + $gradeitem->update_final_grade($userid, $finalgrade, 'gradebook', $feedback, FORMAT_MOODLE); // We can update feedback without reloading the grade item as it doesn't affect grade calculations