moodle-report_usergrades/details.php
Kumi b7014cccd4
fix: Adds localization to user details table headings
Updates table headers to support localization by providing
the localization key for 'field' and 'value' in the user
details section. Improves consistency in string translations
throughout the report.

Enhances user interface by displaying the user table directly
on the page using html_writer, improving readability.
2024-11-21 20:59:55 +01:00

104 lines
4.8 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');
// User details
echo $OUTPUT->heading(get_string('userdetails', 'report_usergrades'), 3);
$user_table = new html_table();
$user_table->head = array(get_string('field', 'report_usergrades'), get_string('value', 'report_usergrades'));
$user_table->data[] = array(get_string('username', 'report_usergrades'), $user->username);
$user_table->data[] = array(get_string('firstname', 'report_usergrades'), $user->firstname);
$user_table->data[] = array(get_string('lastname', 'report_usergrades'), $user->lastname);
$user_table->data[] = array(get_string('email', 'report_usergrades'), $user->email);
echo html_writer::table($user_table);
foreach ($courses as $course) {
echo $OUTPUT->heading($course->fullname, 3);
$quizzes = $DB->get_records('quiz', array('course' => $course->id));
if ($quizzes) {
echo $OUTPUT->heading(get_string('quizzes', 'report_usergrades'), 4);
foreach ($quizzes as $quiz) {
$quiz_questions = $DB->get_records('quiz_slots', array('quizid' => $quiz->id));
$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_records('question_attempt_steps', array('questionattemptid' => $question_attempt->id));
foreach ($question_grades as $question_grade) {
if ($question_grade->fraction) {
$attempt_table->data[] = array($question->name . ': ' . $question->questiontext, $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();