public function test_questionnaire_get_user_grades() { $this->resetAfterTest(); $this->setAdminUser(); $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $generator = $this->getDataGenerator()->get_plugin_generator('mod_questionnaire'); $questionnaire = $generator->create_test_questionnaire($course); // Test for an array when user specified. $grades = questionnaire_get_user_grades($questionnaire, $user->id); $this->assertInternalType('array', $grades); // Test for an array when no user specified. $grades = questionnaire_get_user_grades($questionnaire); $this->assertInternalType('array', $grades); }
/** * Update grades by firing grade_updated event * * @param object $assignment null means all assignments * @param int $userid specific user only, 0 mean all */ function questionnaire_update_grades($questionnaire = null, $userid = 0, $nullifnone = true) { global $CFG, $DB; if (!function_exists('grade_update')) { // Workaround for buggy PHP versions. require_once $CFG->libdir . '/gradelib.php'; } if ($questionnaire != null) { if ($graderecs = questionnaire_get_user_grades($questionnaire, $userid)) { $grades = array(); foreach ($graderecs as $v) { if (!isset($grades[$v->userid])) { $grades[$v->userid] = new stdClass(); if ($v->rawgrade == -1) { $grades[$v->userid]->rawgrade = null; } else { $grades[$v->userid]->rawgrade = $v->rawgrade; } $grades[$v->userid]->userid = $v->userid; } else { if (isset($grades[$v->userid]) && $v->rawgrade > $grades[$v->userid]->rawgrade) { $grades[$v->userid]->rawgrade = $v->rawgrade; } } } questionnaire_grade_item_update($questionnaire, $grades); } else { questionnaire_grade_item_update($questionnaire); } } else { $sql = "SELECT q.*, cm.idnumber as cmidnumber, q.course as courseid\n FROM {questionnaire} q, {course_modules} cm, {modules} m\n WHERE m.name='questionnaire' AND m.id=cm.module AND cm.instance=q.id"; if ($rs = $DB->get_recordset_sql($sql)) { foreach ($rs as $questionnaire) { if ($questionnaire->grade != 0) { questionnaire_update_grades($questionnaire); } else { questionnaire_grade_item_update($questionnaire); } } $rs->close(); } } }
/** * Update grades by firing grade_updated event * * @param object $assignment null means all assignments * @param int $userid specific user only, 0 mean all */ function questionnaire_update_grades($questionnaire = null, $userid = 0, $nullifnone = true) { global $CFG; if (!function_exists('grade_update')) { //workaround for buggy PHP versions require_once $CFG->libdir . '/gradelib.php'; } if ($questionnaire != null) { if ($grades = questionnaire_get_user_grades($questionnaire, $userid)) { foreach ($grades as $k => $v) { if ($v->rawgrade == -1) { $grades[$k]->rawgrade = null; } $grades[$k]->feedback = ''; $grades[$k]->format = ''; } questionnaire_grade_item_update($questionnaire, $grades); } else { questionnaire_grade_item_update($questionnaire); } } else { $sql = "SELECT q.*, cm.idnumber as cmidnumber, q.course as courseid\n FROM {$CFG->prefix}questionnaire q, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m\n WHERE m.name='questionnaire' AND m.id=cm.module AND cm.instance=q.id"; if ($rs = get_recordset_sql($sql)) { while ($questionnaire = rs_fetch_next_record($rs)) { if ($questionnaire->grade != 0) { questionnaire_update_grades($questionnaire); } else { questionnaire_grade_item_update($questionnaire); } } rs_close($rs); } } }