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.
This commit is contained in:
Kumi 2024-11-19 16:06:49 +01:00
commit f89cf45a8e
Signed by: kumi
GPG key ID: ECBCC9082395383F
4 changed files with 90 additions and 0 deletions

71
index.php Normal file
View file

@ -0,0 +1,71 @@
<?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();

View file

@ -0,0 +1,5 @@
$string['pluginname'] = 'User Grades Report';
$string['usergradesreport'] = 'User Grades Report';
$string['nouserselected'] = 'No user selected. Please select a user to view their grades.';
$string['showgrades'] = 'Show Grades';
$string['user'] = 'User';

6
settings.php Normal file
View file

@ -0,0 +1,6 @@
<?php
defined('MOODLE_INTERNAL') || die();
if ($hassiteconfig) { // Needs this condition or there is error on login page
$ADMIN->add('reports', new admin_externalpage('report_usergrades', get_string('pluginname', 'report_usergrades'), "$CFG->wwwroot/report/usergrades/index.php"));
}

8
version.php Normal file
View file

@ -0,0 +1,8 @@
<?php
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'report_usergrades';
$plugin->version = 2024111900;
$plugin->requires = 2022041900;
$plugin->maturity = MATURITY_ALPHA;
$plugin->release = 'v1.0';