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_grade = $DB->get_record('question_attempt_steps', array('questionattemptid' => $question_attempt->id)); $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();