]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-9536 assignment now reacts to external updates
authorskodak <skodak>
Sat, 9 Jun 2007 14:56:22 +0000 (14:56 +0000)
committerskodak <skodak>
Sat, 9 Jun 2007 14:56:22 +0000 (14:56 +0000)
mod/assignment/lib.php

index a123823808b2b66a66fdf7db4c5615f930bf4276..c24edf1dae5b0496a8d61c858c8915fe04eca1f6 100644 (file)
@@ -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;
 }