moving event trigger from update_grade() to grade_item->update_raw_grade(); removing itemnumber generation for now

This commit is contained in:
skodak 2007-06-25 07:56:25 +00:00
parent 5ea976e455
commit c4e4068fa2
2 changed files with 37 additions and 35 deletions

View File

@ -374,7 +374,7 @@ class grade_item extends grade_object {
$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)) {
@ -389,7 +389,7 @@ class grade_item extends grade_object {
$this->itemnumber = $existing_item->itemnumber + 1;
}
*/
$result = parent::insert();
@ -1037,7 +1037,9 @@ class grade_item extends grade_object {
* @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()) {
@ -1098,13 +1100,39 @@ class grade_item extends grade_object {
}
// 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;
}

View File

@ -90,12 +90,15 @@ function grade_update($source, $courseid, $itemtype, $itemmodule, $iteminstance,
// 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;
@ -104,14 +107,12 @@ function grade_update($source, $courseid, $itemtype, $itemmodule, $iteminstance,
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;
@ -217,36 +218,9 @@ function grade_update($source, $courseid, $itemtype, $itemmodule, $iteminstance,
}
// 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) {