moodle-report_usergrades/details.php
Kumi afb5e818ad
fix: Fix incorrect quiz ID field in queries
Corrects the field name used for fetching quiz questions from
'quiz' to 'quizid' to align with the database schema. This fixes
query failures when retrieving quiz questions ensuring proper
data retrieval operations.

This minor change resolves an issue with quiz data handling.
2024-11-21 20:08:44 +01:00

86 lines
3.7 KiB
PHP

<?php
require_once('../../config.php');
require_once($CFG->libdir . '/adminlib.php');
require_once($CFG->libdir . '/gradelib.php');
require_once($CFG->libdir . '/tablelib.php');
require_once($CFG->libdir . '/formslib.php');
require_once($CFG->dirroot . '/user/selector/lib.php');
require_once('classes/user_selector.php');
require_once('classes/usergrades_form.php');
// Set up the page context and other configurations
admin_externalpage_setup('report_usergrades_details', '', null, '', array('capability' => 'report/usergrades:view'));
// Instantiate the form
$mform = new usergrades_form();
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('usergradesreport', 'report_usergrades'));
// Form processing and displaying is done here
if ($mform->is_cancelled()) {
// Handle form cancellation, if necessary
redirect(new moodle_url('/admin/report.php'));
} else if ($data = $mform->get_data()) {
$userid = $data->userid;
// Fetch and display user grades if a user is selected
if (!empty($userid)) {
$user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
$courses = enrol_get_users_courses($user->id, true);
$questions = $DB->get_records('question');
foreach ($courses as $course) {
// Basic information about the course
echo $OUTPUT->heading($course->fullname, 3);
// Fetch all quizzes in the course
$quizzes = $DB->get_records('quiz', array('course' => $course->id));
if ($quizzes) {
echo $OUTPUT->heading(get_string('quizzes', 'report_usergrades'), 4);
foreach ($quizzes as $quiz) {
// Fetch the quiz questions
$quiz_questions = $DB->get_records('quiz_slots', array('quizid' => $quiz->id));
// Fetch the quiz attempts
$quiz_attempts = $DB->get_records('quiz_attempts', array('quiz' => $quiz->id, 'userid' => $user->id));
if ($quiz_attempts) {
echo $OUTPUT->heading($quiz->name, 5);
foreach ($quiz_attempts as $attempt) {
echo $OUTPUT->heading(get_string('attempt', 'report_usergrades') . ' ' . $attempt->attempt, 6);
$attempt_table = new html_table();
$attempt_table->head = array(get_string('question', 'report_usergrades'), get_string('response', 'report_usergrades'), get_string('grade', 'report_usergrades'));
foreach ($quiz_questions as $quiz_question) {
$question = $questions[$quiz_question->question];
$response = $DB->get_record('question_states', array('attempt' => $attempt->id, 'question' => $question->id));
$grade = $DB->get_record('question_attempt_steps', array('questionattemptid' => $response->id));
$attempt_table->data[] = array($question->name, $response->answer, $grade->fraction);
}
echo html_writer::table($attempt_table);
$total_grade = $DB->get_record('quiz_grades', array('quiz' => $quiz->id, 'userid' => $user->id));
echo $OUTPUT->heading(get_string('totalgrade', 'report_usergrades') . ': ' . $total_grade->grade, 6);
}
}
}
}
}
} else {
echo $OUTPUT->notification(get_string('nouserselected', 'report_usergrades'), 'notifyproblem');
}
} else {
// Display form if no data is submitted
$mform->display();
}
echo $OUTPUT->footer();