Merge branch 'MDL-29733_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE

This commit is contained in:
Sam Hemelryk
2012-12-18 09:41:52 +13:00
+21 -10
View File
@@ -1670,16 +1670,27 @@ class grade_item extends grade_object {
return true; // no need to recalculate locked items
}
// precreate grades - we need them to exist
$params = array($this->courseid, $this->id, $this->id);
$sql = "SELECT DISTINCT go.userid
FROM {grade_grades} go
JOIN {grade_items} gi
ON (gi.id = go.itemid AND gi.courseid = ?)
LEFT OUTER JOIN {grade_grades} g
ON (g.userid = go.userid AND g.itemid = ?)
WHERE gi.id <> ? AND g.id IS NULL";
if ($missing = $DB->get_records_sql($sql, $params)) {
// Precreate grades - we need them to exist
if ($userid) {
$missing = array();
if (!$DB->record_exists('grade_grades', array('itemid'=>$this->id, 'userid'=>$userid))) {
$m = new stdClass();
$m->userid = $userid;
$missing[] = $m;
}
} else {
// Find any users who have grades for some but not all grade items in this course
$params = array('gicourseid' => $this->courseid, 'ggitemid' => $this->id);
$sql = "SELECT gg.userid
FROM {grade_grades} gg
JOIN {grade_items} gi
ON (gi.id = gg.itemid AND gi.courseid = :gicourseid)
GROUP BY gg.userid
HAVING SUM(CASE WHEN gg.itemid = :ggitemid THEN 1 ELSE 0 END) = 0";
$missing = $DB->get_records_sql($sql, $params);
}
if ($missing) {
foreach ($missing as $m) {
$grade = new grade_grade(array('itemid'=>$this->id, 'userid'=>$m->userid), false);
$grade->grade_item =& $this;