Kumi
e3fd691910
Extracts and refactors user selection logic by moving user selector and form functionality into separate class files. This enhances code modularity and reusability across different parts of the application. Adds a detailed user grades report page that displays quiz attempts and grades for selected users, improving user grade reporting. Updates admin settings to include detailed report page link for navigation ease.
88 lines
3.8 KiB
PHP
88 lines
3.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);
|
|
|
|
foreach ($courses as $course) {
|
|
// Basic information about the course
|
|
echo $OUTPUT->heading($course->fullname, 3);
|
|
|
|
// Fetch the questions in the course
|
|
$questions = $DB->get_records('question', array('course' => $course->id));
|
|
|
|
// 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_question_instances', array('quiz' => $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();
|