Kumi
6692dbb617
Adjusts the logic to iterate over question grades, ensuring all entries for a given question attempt are included in the attempts table instead of only the first one. This fixes data representation issues in the attempts interface.
94 lines
4.2 KiB
PHP
94 lines
4.2 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'));
|
|
|
|
$question_usages = $DB->get_records('question_usages', array('id' => $attempt->uniqueid));
|
|
|
|
foreach ($question_usages as $question_usage) {
|
|
$question_attempts = $DB->get_records('question_attempts', array('questionusageid' => $question_usage->id));
|
|
|
|
foreach ($question_attempts as $question_attempt) {
|
|
$question = $questions[$question_attempt->questionid];
|
|
$response = $question_attempt->responsesummary;
|
|
|
|
$question_grades = $DB->get_record('question_attempt_steps', array('questionattemptid' => $question_attempt->id));
|
|
|
|
foreach ($question_grades as $question_grade) {
|
|
$attempt_table->data[] = array($question->name, $response, $question_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 . ' / ' . $quiz->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();
|