/** * Update workshop grades in the gradebook * * Needed by grade_update_mod_grades() in lib/gradelib.php * * @category grade * @param stdClass $workshop instance object with extra cmidnumber and modname property * @param int $userid update grade of specific user only, 0 means all participants * @return void */ function workshop_update_grades(stdclass $workshop, $userid=0) { global $CFG, $DB; require_once($CFG->libdir.'/gradelib.php'); $whereuser = $userid ? ' AND authorid = :userid' : ''; $params = array('workshopid' => $workshop->id, 'userid' => $userid); $sql = 'SELECT authorid, grade, gradeover, gradeoverby, feedbackauthor, feedbackauthorformat, timemodified, timegraded FROM {workshop_submissions} WHERE workshopid = :workshopid AND example=0' . $whereuser; $records = $DB->get_records_sql($sql, $params); $submissiongrades = array(); foreach ($records as $record) { $grade = new stdclass(); $grade->userid = $record->authorid; if (!is_null($record->gradeover)) { $grade->rawgrade = grade_floatval($workshop->grade * $record->gradeover / 100); $grade->usermodified = $record->gradeoverby; } else { $grade->rawgrade = grade_floatval($workshop->grade * $record->grade / 100); } $grade->feedback = $record->feedbackauthor; $grade->feedbackformat = $record->feedbackauthorformat; $grade->datesubmitted = $record->timemodified; $grade->dategraded = $record->timegraded; $submissiongrades[$record->authorid] = $grade; } $whereuser = $userid ? ' AND userid = :userid' : ''; $params = array('workshopid' => $workshop->id, 'userid' => $userid); $sql = 'SELECT userid, gradinggrade, timegraded FROM {workshop_aggregations} WHERE workshopid = :workshopid' . $whereuser; $records = $DB->get_records_sql($sql, $params); $assessmentgrades = array(); foreach ($records as $record) { $grade = new stdclass(); $grade->userid = $record->userid; $grade->rawgrade = grade_floatval($workshop->gradinggrade * $record->gradinggrade / 100); $grade->dategraded = $record->timegraded; $assessmentgrades[$record->userid] = $grade; } workshop_grade_item_update($workshop, $submissiongrades, $assessmentgrades); }
/** * Update workshop grades in the gradebook * * Needed by grade_update_mod_grades() in lib/gradelib.php * * @category grade * @param stdClass $workshop instance object with extra cmidnumber and modname property * @param int $userid update grade of specific user only, 0 means all participants * @return void */ function workshop_update_grades(stdclass $workshop, $userid=0) { global $CFG, $DB; require_once($CFG->libdir.'/gradelib.php'); //todo: this ignores userid if($workshop->teammode) { //this is necessary because we need data like the grouping id $course = $DB->get_record('course', array('id' => $workshop->course), '*', MUST_EXIST); $cm = get_coursemodule_from_instance('workshop', $workshop->id, $course->id, false, MUST_EXIST); $whereuser = ''; if ($userid) { $groups = groups_get_all_groups($cm->course, $userid, $cm->groupingid); if(count($groups) == 1) $group = $groups[0]; $whereuser = $DB->get_in_or_equal(array_keys(groups_get_members($group,'u.id',''))); } else { $allgroups = groups_get_all_groups($cm->course, 0, $cm->groupingid); //todo: on duplicate key error out $groupmembers = $DB->get_records_list('groups_members','groupid',array_keys($allgroups),'','userid,groupid'); //invert this array for use later $membergroups = array(); foreach($groupmembers as $i) { $membergroups[$i->groupid][] = $i->userid; } } $params = array('workshopid' => $workshop->id, 'userid' => $userid); $sql = 'SELECT authorid, grade, gradeover, gradeoverby, feedbackauthor, feedbackauthorformat, timemodified, timegraded FROM {workshop_submissions} WHERE workshopid = :workshopid AND example=0' . $whereuser . ' ORDER BY timemodified DESC'; $records = $DB->get_records_sql($sql, $params); $submissions = array(); //this hinges on ORDER BY timemodified DESC if ( isset($allgroups) ) { foreach($records as $r) { $grp = $groupmembers[$r->authorid]->groupid; if (isset($submissions[$grp])) continue; $submissions[$grp] = $r; } } // print_r($submissions); foreach($submissions as $grp => $s) { $members = $membergroups[$grp]; foreach($members as $m) { $grade = new stdclass(); $grade->userid = $m; if (!is_null($s->gradeover)) { $grade->rawgrade = grade_floatval($workshop->grade * $s->gradeover / 100); $grade->usermodified = $s->gradeoverby; } else { $grade->rawgrade = grade_floatval($workshop->grade * $s->grade / 100); } $grade->feedback = $s->feedbackauthor; $grade->feedbackformat = $s->feedbackauthorformat; $grade->datesubmitted = $s->timemodified; $grade->dategraded = $s->timegraded; $submissiongrades[$m] = $grade; } } } else { $whereuser = $userid ? ' AND authorid = :userid' : ''; $params = array('workshopid' => $workshop->id, 'userid' => $userid); $sql = 'SELECT authorid, grade, gradeover, gradeoverby, feedbackauthor, feedbackauthorformat, timemodified, timegraded FROM {workshop_submissions} WHERE workshopid = :workshopid AND example=0' . $whereuser; $records = $DB->get_records_sql($sql, $params); $submissiongrades = array(); foreach ($records as $record) { $grade = new stdclass(); $grade->userid = $record->authorid; if (!is_null($record->gradeover)) { $grade->rawgrade = grade_floatval($workshop->grade * $record->gradeover / 100); $grade->usermodified = $record->gradeoverby; } else { $grade->rawgrade = grade_floatval($workshop->grade * $record->grade / 100); } $grade->feedback = $record->feedbackauthor; $grade->feedbackformat = $record->feedbackauthorformat; $grade->datesubmitted = $record->timemodified; $grade->dategraded = $record->timegraded; $submissiongrades[$record->authorid] = $grade; } } $whereuser = $userid ? ' AND userid = :userid' : ''; $params = array('workshopid' => $workshop->id, 'userid' => $userid); $sql = 'SELECT userid, gradinggrade, timegraded FROM {workshop_aggregations} WHERE workshopid = :workshopid' . $whereuser; $records = $DB->get_records_sql($sql, $params); $assessmentgrades = array(); foreach ($records as $record) { $grade = new stdclass(); $grade->userid = $record->userid; $grade->rawgrade = grade_floatval($workshop->gradinggrade * $record->gradinggrade / 100); $grade->dategraded = $record->timegraded; $assessmentgrades[$record->userid] = $grade; } workshop_grade_item_update($workshop, $submissiongrades, $assessmentgrades); }