Skip to content

Commit

Permalink
MDL-11357 removed _grade_updated() from activities and grade_item class
Browse files Browse the repository at this point in the history
  • Loading branch information
skodak committed Sep 20, 2007
1 parent ecbf295 commit eedae98
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 110 deletions.
62 changes: 13 additions & 49 deletions lib/grade/grade_item.php
Original file line number Diff line number Diff line change
Expand Up @@ -1248,14 +1248,15 @@ function refresh_grades($userid=0) {
* @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;
if (empty($usermodified)) {
$usermodified = $USER->id;
}

$result = true;

// no grading used or locked
if ($this->gradetype == GRADE_TYPE_NONE or $this->is_locked()) {
return false;
Expand All @@ -1273,37 +1274,24 @@ function update_final_grade($userid, $finalgrade=false, $source=NULL, $note=NULL

$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();
}
}
}

Expand All @@ -1314,44 +1302,25 @@ function update_final_grade($userid, $finalgrade=false, $source=NULL, $note=NULL
$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?
if ($result and $feedback !== false) {
$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();
}
Expand All @@ -1367,11 +1336,6 @@ function update_final_grade($userid, $finalgrade=false, $source=NULL, $note=NULL
}
}

// inform modules, etc. if needed
if ($result and $functionname) {
$functionname($this->iteminstance, $this->itemnumber, $userid, $finalgrade, $feedback, $feedbackformat, $usermodified);
}

return $result;
}

Expand Down
61 changes: 0 additions & 61 deletions mod/assignment/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -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)
*
Expand Down

0 comments on commit eedae98

Please sign in to comment.