]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-11357 removed _grade_updated() from activities and grade_item class
authorskodak <skodak>
Thu, 20 Sep 2007 07:43:57 +0000 (07:43 +0000)
committerskodak <skodak>
Thu, 20 Sep 2007 07:43:57 +0000 (07:43 +0000)
lib/grade/grade_item.php
mod/assignment/lib.php

index 3e5e19d25a4a4baf53b4b6bf588164ef10b46863..51458308f7a3667b4d959f27eeb9b608e3cdee90 100644 (file)
@@ -1248,7 +1248,6 @@ class grade_item extends grade_object {
      * @param mixed $feedback teachers feedback as string - false means do not change
      * @param int $feedbackformat
      * @return boolean success
-     * TODO Allow for a change of feedback without a change of finalgrade. Currently I get notice about uninitialised $result
      */
     function update_final_grade($userid, $finalgrade=false, $source=NULL, $note=NULL, $feedback=false, $feedbackformat=FORMAT_MOODLE, $usermodified=null) {
         global $USER, $CFG;
@@ -1256,6 +1255,8 @@ class grade_item extends grade_object {
             $usermodified = $USER->id;
         }
 
+        $result = true;
+
         // no grading used or locked
         if ($this->gradetype == GRADE_TYPE_NONE or $this->is_locked()) {
             return false;
@@ -1273,37 +1274,24 @@ class grade_item extends grade_object {
 
         $locktime = $grade->get_locktime();
         if ($locktime and $locktime < time()) {
-            // do not update grades that should be already locked and force regrade
+            // do not update grades that should be already locked, force regrade instead
             $this->force_regrading();
             return false;
         }
 
         $oldgrade = new object();
         $oldgrade->finalgrade  = $grade->finalgrade;
-        $oldgrade->rawgrade    = $grade->rawgrade;
-        $oldgrade->rawgrademin = $grade->rawgrademin;
-        $oldgrade->rawgrademax = $grade->rawgrademax;
-        $oldgrade->rawscaleid  = $grade->rawscaleid;
         $oldgrade->overridden  = $grade->overridden;
 
-        $override = false;
-        $functionname = null;
-
         if ($finalgrade !== false or $feedback !== false) {
             if (($this->is_outcome_item() or $this->is_manual_item()) and !$this->is_calculated()) {
                 // final grades updated only by user - no need for overriding
-
-            } else if ($this->itemtype == 'mod' and $this->plusfactor == 0 and $this->multfactor == 1) {
-                // do not override grade if module can update own raw grade
-                require_once($CFG->dirroot.'/mod/'.$this->itemmodule.'/lib.php');
-                $functionname = $this->itemmodule.'_grade_updated';
-                if (!function_exists($functionname)) {
-                    $override = true;
-                    $functionname = null;
-                }
+                $grade->overridden = 0;
 
             } else {
-                $override = true;
+                if (!$grade->overridden) {
+                    $grade->overridden = time();
+                }
             }
         }
 
@@ -1314,36 +1302,13 @@ class grade_item extends grade_object {
                 $finalgrade = $finalgrade;
             }
             $grade->finalgrade = $finalgrade;
-
-            if ($override) {
-                if (!$grade->overridden) {
-                    $grade->overridden = time();
-                }
-
-            } else if ($this->is_raw_used()) {
-                // module which is not overridden - no factors used
-                $grade->rawgrade = $finalgrade;
-                // copy current grademin/max and scale
-                $grade->rawgrademin = $this->grademin;
-                $grade->rawgrademax = $this->grademax;
-                $grade->rawscaleid  = $this->scaleid;
-            }
         }
 
         if (empty($grade->id)) {
             $result = (boolean)$grade->insert($source);
 
-        } else if ($grade->finalgrade  !== $oldgrade->finalgrade
-                or $grade->rawgrade    !== $oldgrade->rawgrade
-                or $grade->rawgrademin !== $oldgrade->rawgrademin
-                or $grade->rawgrademax !== $oldgrade->rawgrademax
-                or $grade->rawscaleid  !== $oldgrade->rawscaleid
-                or $grade->overridden  !== $oldgrade->overridden) {
-
+        } else if ($grade->finalgrade !== $oldgrade->finalgrade or $grade->overridden !== $oldgrade->overridden) {
             $result = $grade->update($source);
-
-        } else {
-            $result = true;
         }
 
         // do we have comment from teacher?
@@ -1351,7 +1316,11 @@ class grade_item extends grade_object {
             $result = $grade->update_feedback($feedback, $feedbackformat, $usermodified);
         }
 
-        if ($this->is_course_item() and !$this->needsupdate) {
+        if (!$result) {
+            // something went wrong - better force final grade recalculation
+            $this->force_regrading();
+
+        } else if ($this->is_course_item() and !$this->needsupdate) {
             if (!grade_regrade_final_grades($this->courseid, $userid, $this)) {
                 $this->force_regrading();
             }
@@ -1367,11 +1336,6 @@ class grade_item extends grade_object {
             }
         }
 
-        // inform modules, etc. if needed
-        if ($result and $functionname) {
-            $functionname($this->iteminstance, $this->itemnumber, $userid, $finalgrade, $feedback, $feedbackformat, $usermodified);
-        }
-
         return $result;
     }
 
index 67dca3c5657a1919e3edfd2b2f1a6b171151c1cb..22eb3e43598333530e995953e1779e1cde5ddeee 100644 (file)
@@ -2132,67 +2132,6 @@ function assignment_grade_item_delete($assignment) {
     return grade_update('mod/assignment', $assignment->courseid, 'mod', 'assignment', $assignment->id, 0, NULL, array('deleted'=>1));
 }
 
-/**
- * Gradebook informs this module about new grade or feedback.
- *
- */
-function assignment_grade_updated($instance, $itemnumber, $userid, $gradevalue, $feedback, $feedbackformat, $usermodified) {
-    global $CFG, $USER;
-
-    if (!$assignment = get_record('assignment', 'id', $instance)) {
-        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($userid, true);  // Get or make one
-    $submission = new object();
-    $submission->id         = $old->id;
-    $submission->userid     = $old->userid;
-    $submission->teacher    = $usermodified;
-
-    if ($gradevalue === false) {
-        $submission->grade  = $old->grade;
-    } else if (is_null($gradevalue)) {
-        $submission->grade  = -1;
-    } else {
-        $submission->grade  = (int)$gradevalue; // round it for now
-        $submission->timemarked = time();
-    }
-
-    if ($feedback === false) {
-        $submission->submissioncomment = addslashes($old->submissioncomment);
-        $submission->format            = $old->format;
-    } else {
-        $submission->submissioncomment = addslashes($feedback);
-        $submission->format            = (int)$feedbackformat;
-    }
-
-    if ($old->submissioncomment != $submission->submissioncomment or $old->grade != $submission->grade) {
-
-        $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;
-}
-
 /**
  * Returns the users with data in one assignment (students and teachers)
  *