moodle-report_usergrades/index.php
Kumi f89cf45a8e
feat: Add user grades report functionality
Introduces a new report to display grades for selected users.
Includes a user selection form and grade display logic.
Sets up plugin metadata and localization strings.

Enables administrators to view a user's grades across courses.

Includes default plugin settings and version information.
2024-11-19 16:06:49 +01:00

71 lines
2.4 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');
// Set up the page context and other configurations
admin_externalpage_setup('report_usergrades');
/**
* Form class for user selection
*/
class usergrades_form extends moodleform {
public function definition() {
$mform = $this->_form;
// User selector
$user_selector = new user_selector('userid', array('multiselect' => false));
$user_selector->set_label(get_string('user'));
$user_selector->get_view($mform);
// Add form action buttons
$this->add_action_buttons(false, get_string('showgrades', 'report_usergrades'));
}
}
// 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 ($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);
$table = new flexible_table('user-grades-report');
$table->define_baseurl($CFG->wwwroot.'/report/usergrades/index.php');
$table->define_columns(array('course', 'activity', 'grade'));
$table->define_headers(array('Course', 'Activity', 'Grade'));
$table->setup();
foreach ($courses as $course) {
$grade_items = grade_item::fetch_all(array('courseid' => $course->id));
foreach ($grade_items as $item) {
$grade = grade_grade::fetch(array('itemid' => $item->id, 'userid' => $user->id));
$gradename = $item->get_name();
$grade_display = $grade ? $grade->str_grade : '-';
$table->add_data(array(format_string($course->fullname), format_string($gradename), $grade_display));
}
}
$table->finish_output();
} else {
echo $OUTPUT->notification(get_string('nouserselected', 'report_usergrades'), 'notifyproblem');
}
} else {
// Display form if no data is submitted
$mform->display();
}
echo $OUTPUT->footer();