From: skodak Date: Sat, 9 Jun 2007 14:56:22 +0000 (+0000) Subject: MDL-9536 assignment now reacts to external updates X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=09c442620d343d5a8438f586fc595d105a652bde;p=moodle.git MDL-9536 assignment now reacts to external updates --- diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php index a123823808..c24edf1dae 100644 --- a/mod/assignment/lib.php +++ b/mod/assignment/lib.php @@ -1922,8 +1922,61 @@ function assignment_grade_item_delete($assignment) { function assignment_grade_handler($eventdata) { global $CFG, $USER; - //TODO: ... - // check source to prevent infinite loops ;-) + if ($eventdata->source == 'mod/assignment') { + // event from assignment itself + return true; + } + + if ($eventdata->itemtype != 'mod' or $eventdata->itemmodule != 'assignment') { + //not for us - ignore it + return true; + } + + if (!$assignment = get_record('assignment', 'id', $eventdata->iteminstance)) { + return true; + } + if (! $course = get_record('course', 'id', $assignment->course)) { + return true; + } + if (! $cm = get_coursemodule_from_instance('assignment', $assignment->id, $course->id)) { + return true; + } + + // Load up the required assignment class + require_once($CFG->dirroot.'/mod/assignment/type/'.$assignment->assignmenttype.'/assignment.class.php'); + $assignmentclass = 'assignment_'.$assignment->assignmenttype; + $assignmentinstance = new $assignmentclass($cm->id, $assignment, $cm, $course); + + $old = $assignmentinstance->get_submission($eventdata->userid, true); // Get or make one + $submission = new object(); + $submission->id = $old->id; + $submission->userid = $old->userid; + $submission->teacher = $USER->id; + $submission->timemarked = time(); + + if (is_null($eventdata->gradevalue)) { + $submission->grade = -1; + } else { + $submission->grade = (int)$eventdata->gradevalue; // round it for now + if ($old->grade != $submission->grade) { + $submission->mailed = 0; // Make sure mail goes out (again, even) + } + } + + $submission->submissioncomment = addslashes($eventdata->feedback); + $submission->format = (int)$eventdata->feedbackformat; + + if ($old->submissioncomment != $eventdata->feedback or $old->format != $submission->format) { + $submission->mailed = 0; // Make sure mail goes out (again, even) + } + + if (!update_record('assignment_submissions', $submission)) { + //return false; + } + + // TODO: add proper logging + add_to_log($course->id, 'assignment', 'update grades', + 'submissions.php?id='.$assignment->id.'&user='.$submission->userid, $submission->userid, $cm->id); return true; }