MDL-36712: Assignment - Do not always send feedback available emails when grade is created

The entry in the assign_grades table contains grades feedback and other settings such as locked.
Only send the student an email about new feedback if it is actually grades or feedback that
has been added. This is done by using another state for the mailed flag (2) which means "unset".
This commit is contained in:
Damyon Wiese
2013-01-04 14:52:14 +08:00
parent d63a406b02
commit 3d6b1bf4e3
4 changed files with 27 additions and 1 deletions
+1 -1
View File
@@ -266,7 +266,7 @@ class assignfeedback_file_zip_importer {
$fileplugin->update_file_count($grade);
// Update the last modified time on the grade which will trigger student notifications.
$assignment->update_grade($grade);
$assignment->notify_grade_modified($grade);
}
}
}
+1
View File
@@ -403,6 +403,7 @@ class assign_feedback_file extends assign_feedback_plugin {
// Now copy each of these files to the users feedback file area.
foreach ($users as $userid) {
$grade = $this->assignment->get_user_grade($userid, true);
$this->assignment->notify_grade_modified($grade);
$this->copy_area_files($fs,
$this->assignment->get_context()->id,
+2
View File
@@ -157,6 +157,7 @@ class assign_feedback_offline extends assign_feedback_plugin {
$grade->grade = $record->grade;
$grade->grader = $USER->id;
if ($this->assignment->update_grade($grade)) {
$this->assignment->notify_grade_modified($grade);
$this->assignment->add_to_log('grade submission', $this->assignment->format_grade_for_log($grade));
$updatecount += 1;
}
@@ -178,6 +179,7 @@ class assign_feedback_offline extends assign_feedback_plugin {
if ($newvalue != $oldvalue) {
$updatecount += 1;
$grade = $this->assignment->get_user_grade($record->user->id, true);
$this->assignment->notify_grade_modified($grade);
if ($plugin->set_editor_text($field, $newvalue, $grade->id)) {
$logdesc = get_string('feedbackupdate', 'assignfeedback_offline',
array('field'=>$description,
+23
View File
@@ -1476,6 +1476,23 @@ class assign {
return true;
}
/**
* Mark in the database that this grade record should have an update notification sent by cron.
*
* @param stdClass $grade a grade record keyed on id
* @return bool true for success
*/
public function notify_grade_modified($grade) {
global $DB;
$grade->timemodified = time();
if ($grade->mailed != 1) {
$grade->mailed = 0;
}
return $DB->update_record('assign_grades', $grade);
}
/**
* Update a grade in the grade table for the assignment and in the gradebook
*
@@ -2175,6 +2192,10 @@ class assign {
$grade->grade = -1;
$grade->grader = $USER->id;
$grade->extensionduedate = 0;
// The mailed flag can be one of 3 values: 0 is unsent, 1 is sent and 2 is do not send yet.
// This is because students only want to be notified about certain types of update (grades and feedback).
$grade->mailed = 2;
$gid = $DB->insert_record('assign_grades', $grade);
$grade->id = $gid;
return $grade;
@@ -3712,6 +3733,7 @@ class assign {
}
$this->update_grade($grade);
$this->notify_grade_modified($grade);
// save outcomes
if ($CFG->enableoutcomes) {
@@ -4406,6 +4428,7 @@ class assign {
}
}
$this->update_grade($grade);
$this->notify_grade_modified($grade);
$user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
$this->add_to_log('grade submission', $this->format_grade_for_log($grade));