/** * Update grades by firing grade_updated event * * @param object $forum null means all forums * @param int $userid specific user only, 0 mean all * @param boolean $nullifnone return null if grade does not exist * @return void */ function forum_update_grades($forum = null, $userid = 0, $nullifnone = true) { global $CFG; if ($forum != null) { require_once $CFG->libdir . '/gradelib.php'; if ($grades = forum_get_user_grades($forum, $userid)) { forum_grade_item_update($forum, $grades); } else { if ($userid and $nullifnone) { $grade = new object(); $grade->userid = $userid; $grade->rawgrade = NULL; forum_grade_item_update($forum, $grade); } else { forum_grade_item_update($forum); } } } else { $sql = "SELECT f.*, cm.idnumber as cmidnumber\n FROM {$CFG->prefix}forum f, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m\n WHERE m.name='forum' AND m.id=cm.module AND cm.instance=f.id"; if ($rs = get_recordset_sql($sql)) { while ($forum = rs_fetch_next_record($rs)) { if ($forum->assessed) { forum_update_grades($forum, 0, false); } else { forum_grade_item_update($forum); } } rs_close($rs); } } }
/** * Update activity grades * * @category grade * @param object $forum * @param int $userid specific user only, 0 means all * @param boolean $nullifnone return null if grade does not exist * @return void */ function forum_update_grades($forum, $userid=0, $nullifnone=true) { global $CFG, $DB; require_once($CFG->libdir.'/gradelib.php'); if (!$forum->assessed) { forum_grade_item_update($forum); } else if ($grades = forum_get_user_grades($forum, $userid)) { forum_grade_item_update($forum, $grades); } else if ($userid and $nullifnone) { $grade = new stdClass(); $grade->userid = $userid; $grade->rawgrade = NULL; forum_grade_item_update($forum, $grade); } else { forum_grade_item_update($forum); } }
/** * Must return an array of grades, indexed by user, and a max grade. */ function forum_grades($forumid) { if (!($forum = get_record("forum", "id", $forumid))) { return false; } if (!$forum->assessed) { return false; } $scalemenu = make_grades_menu($forum->scale); $currentuser = 0; $ratingsuser = array(); if ($ratings = forum_get_user_grades($forumid)) { foreach ($ratings as $rating) { // Ordered by user if ($currentuser and $rating->userid != $currentuser) { if (!empty($ratingsuser)) { if ($forum->scale < 0) { $return->grades[$currentuser] = forum_get_ratings_mean(0, $scalemenu, $ratingsuser); $return->grades[$currentuser] .= "<br />" . forum_get_ratings_summary(0, $scalemenu, $ratingsuser); } else { $total = 0; $count = 0; foreach ($ratingsuser as $ra) { $total += $ra; $count++; } $return->grades[$currentuser] = format_float($total / $count, 2); } } else { $return->grades[$currentuser] = ""; } $ratingsuser = array(); } $ratingsuser[] = $rating->rating; $currentuser = $rating->userid; } if (!empty($ratingsuser)) { if ($forum->scale < 0) { $return->grades[$currentuser] = forum_get_ratings_mean(0, $scalemenu, $ratingsuser); $return->grades[$currentuser] .= "<br />" . forum_get_ratings_summary(0, $scalemenu, $ratingsuser); } else { $total = 0; $count = 0; foreach ($ratingsuser as $ra) { $total += $ra; $count++; } $return->grades[$currentuser] = format_float((double) $total / (double) $count, 2); } } else { $return->grades[$currentuser] = ""; } } else { $return->grades = array(); } if ($forum->scale < 0) { $return->maxgrade = ""; } else { $return->maxgrade = $forum->scale; } return $return; }