From: skodak Date: Mon, 25 Jun 2007 07:56:25 +0000 (+0000) Subject: moving event trigger from update_grade() to grade_item->update_raw_grade(); removing... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=c4e4068fa2db0c5dc8a3765c9c299a8fe5bd6fdb;p=moodle.git moving event trigger from update_grade() to grade_item->update_raw_grade(); removing itemnumber generation for now --- diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index af7a982015..ea576a1f61 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -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; } diff --git a/lib/gradelib.php b/lib/gradelib.php index 7b30ed7cb8..9479652de5 100644 --- a/lib/gradelib.php +++ b/lib/gradelib.php @@ -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) {