Merge branch 'MDL-29733_22' of git://github.com/andyjdavis/moodle into MOODLE_22_STABLE
This commit is contained in:
+21
-10
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user