$this->idnumber = rand(0,9999999999); // TODO replace rand() with proper random generator
}
}
-
+/*
// If a grade_item already exists with these itemtype, itemmodule and iteminstance
// but not itemnumber, generate an itemnumber.
if (empty($this->itemnumber) && !empty($this->itemtype) && !empty($this->itemmodule) && !empty($this->iteminstance)) {
$this->itemnumber = $existing_item->itemnumber + 1;
}
-
+*/
$result = parent::insert();
* @param int $feedbackformat
* @return mixed grade_grades object if ok, false if error
*/
- function update_raw_grade($userid, $rawgrade=false, $howmodified='manual', $note=NULL, $feedback=false, $feedbackformat=FORMAT_MOODLE) {
+ function update_raw_grade($userid, $rawgrade=false, $source='manual', $note=NULL, $feedback=false, $feedbackformat=FORMAT_MOODLE) {
+ global $CFG;
+ require_once($CFG->libdir.'/eventslib.php');
// calculated grades can not be updated
if ($this->is_calculated()) {
}
// TODO Handle history recording error, such as displaying a notice, but still return true
- grade_history::insert_change($userid, $this->id, $grade->rawgrade, $oldgrade, $howmodified, $note);
+ grade_history::insert_change($userid, $this->id, $grade->rawgrade, $oldgrade, $source, $note);
// This grade item needs update
$this->force_regrading();
if ($result) {
+
+ // trigger grade_updated event notification
+ $eventdata = new object();
+
+ $eventdata->source = $source;
+ $eventdata->itemid = $this->id;
+ $eventdata->courseid = $this->courseid;
+ $eventdata->itemtype = $this->itemtype;
+ $eventdata->itemmodule = $this->itemmodule;
+ $eventdata->iteminstance = $this->iteminstance;
+ $eventdata->itemnumber = $this->itemnumber;
+ $eventdata->idnumber = $this->idnumber;
+ $eventdata->userid = $grade->userid;
+ $eventdata->rawgrade = $grade->rawgrade;
+
+ // load existing text annotation
+ if ($grade_text = $grade->load_text()) {
+ $eventdata->feedback = $grade_text->feedback;
+ $eventdata->feedbackformat = $grade_text->feedbackformat;
+ $eventdata->information = $grade_text->information;
+ $eventdata->informationformat = $grade_text->informationformat;
+ }
+
+ events_trigger('grade_updated', $eventdata);
+
return $grade;
+
} else {
return false;
}
// only following grade_item properties can be changed in this function
$allowed = array('itemname', 'idnumber', 'gradetype', 'grademax', 'grademin', 'scaleid', 'multfactor', 'plusfactor', 'deleted');
+ // grade item identification
+ $params = compact('courseid', 'itemtype', 'itemmodule', 'iteminstance', 'itemnumber');
+
if (is_null($courseid) or is_null($itemtype)) {
debugging('Missing courseid or itemtype');
return GRADE_UPDATE_FAILED;
}
- if (!$grade_items = grade_item::fetch_all(compact('courseid', 'itemtype', 'itemmodule', 'iteminstance', 'itemnumber'))) {
+ if (!$grade_items = grade_item::fetch_all($params)) {
// create a new one
$grade_item = false;
unset($grade_items); //release memory
} else {
-
debugging('Found more than one grade item');
return GRADE_UPDATE_MULTIPLE;
}
/// Create or update the grade_item if needed
if (!$grade_item) {
- $params = compact('courseid', 'itemtype', 'itemmodule', 'iteminstance', 'itemnumber');
if ($itemdetails) {
$itemdetails = (array)$itemdetails;
}
// update or insert the grade
- $grade = $grade_item->update_raw_grade($userid, $rawgrade, $source, null, $feedback, $feedbackformat);
-
- if (!$grade) {
+ if (!$grade_item->update_raw_grade($userid, $rawgrade, $source, null, $feedback, $feedbackformat)) {
$failed = true;
- continue;
- }
-
- // trigger grade_updated event notification
- $eventdata = new object();
-
- $eventdata->source = $source;
- $eventdata->itemid = $grade_item->id;
- $eventdata->courseid = $grade_item->courseid;
- $eventdata->itemtype = $grade_item->itemtype;
- $eventdata->itemmodule = $grade_item->itemmodule;
- $eventdata->iteminstance = $grade_item->iteminstance;
- $eventdata->itemnumber = $grade_item->itemnumber;
- $eventdata->idnumber = $grade_item->idnumber;
- $eventdata->userid = $grade->userid;
- $eventdata->rawgrade = $grade->rawgrade;
-
- // load existing text annotation
- if ($grade_text = $grade->load_text()) {
- $eventdata->feedback = $grade_text->feedback;
- $eventdata->feedbackformat = $grade_text->feedbackformat;
- $eventdata->information = $grade_text->information;
- $eventdata->informationformat = $grade_text->informationformat;
}
-
- events_trigger('grade_updated', $eventdata);
}
if (!$failed) {