MDL-68652 core_grades: Refactor grades functions.
get_gradable_users now has extra param to retrieve only active users. Grade reports hase their own grade_report::get_gradable_users since they decided whether to inlcude active users from report preferences
This commit is contained in:
committed by
Ilya Tregubov
parent
d18acd7025
commit
175eb51e18
+2
-9
@@ -786,17 +786,10 @@ function grade_get_plugin_info($courseid, $active_type, $active_plugin) {
|
||||
*
|
||||
* @param int $courseid The course ID.
|
||||
* @param int|null $groupid The group ID (optional).
|
||||
* @param bool $onlyactiveenrol Include only active enrolments.
|
||||
* @return array $users A list of enrolled gradable users.
|
||||
*/
|
||||
function get_gradable_users(int $courseid, ?int $groupid = null): array {
|
||||
global $CFG;
|
||||
|
||||
$context = context_course::instance($courseid);
|
||||
// Create a graded_users_iterator because it will properly check the groups etc.
|
||||
$defaultgradeshowactiveenrol = !empty($CFG->grade_report_showonlyactiveenrol);
|
||||
$onlyactiveenrol = get_user_preferences('grade_report_showonlyactiveenrol', $defaultgradeshowactiveenrol) ||
|
||||
!has_capability('moodle/course:viewsuspendedusers', $context);
|
||||
|
||||
function get_gradable_users(int $courseid, ?int $groupid = null, bool $onlyactiveenrol = false): array {
|
||||
$course = get_course($courseid);
|
||||
$gui = new graded_users_iterator($course, null, $groupid);
|
||||
$gui->require_active_enrolment($onlyactiveenrol);
|
||||
|
||||
@@ -932,5 +932,26 @@ abstract class grade_report {
|
||||
|
||||
return $modnames;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a valid list of gradable users in a course.
|
||||
*
|
||||
* @param int $courseid The course ID.
|
||||
* @param int|null $groupid The group ID (optional).
|
||||
* @return array $users A list of enrolled gradable users.
|
||||
*/
|
||||
public static function get_gradable_users(int $courseid, ?int $groupid = null): array {
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot . '/grade/lib.php');
|
||||
|
||||
$context = context_course::instance($courseid);
|
||||
// Create a graded_users_iterator because it will properly check the groups etc.
|
||||
$defaultgradeshowactiveenrol = !empty($CFG->grade_report_showonlyactiveenrol);
|
||||
$onlyactiveenrol = get_user_preferences('grade_report_showonlyactiveenrol', $defaultgradeshowactiveenrol) ||
|
||||
!has_capability('moodle/course:viewsuspendedusers', $context);
|
||||
|
||||
return get_gradable_users($courseid, $groupid, $onlyactiveenrol);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
namespace gradereport_singleview\local\screen;
|
||||
|
||||
use grade_report;
|
||||
use gradereport_singleview\local\ui\range;
|
||||
use gradereport_singleview\local\ui\bulk_insert;
|
||||
use grade_grade;
|
||||
@@ -151,7 +152,7 @@ class grade extends tablelike implements selectable_items, filterable_items {
|
||||
*/
|
||||
public function init($selfitemisempty = false) {
|
||||
|
||||
$this->items = $this->load_users();
|
||||
$this->items = grade_report::get_gradable_users($this->courseid, $this->groupid);
|
||||
$this->totalitemcount = count($this->items);
|
||||
|
||||
if ($selfitemisempty) {
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
namespace gradereport_singleview\local\screen;
|
||||
|
||||
use context_course;
|
||||
use grade_report;
|
||||
use moodle_url;
|
||||
use html_writer;
|
||||
use grade_structure;
|
||||
@@ -33,6 +34,7 @@ use grade_item;
|
||||
use stdClass;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
require_once($CFG->dirroot . '/grade/report/lib.php');
|
||||
|
||||
/**
|
||||
* Abstract class used as a base for the 3 screens.
|
||||
|
||||
@@ -102,7 +102,7 @@ class user extends tablelike implements selectable_items {
|
||||
public function init($selfitemisempty = false) {
|
||||
|
||||
if (!$selfitemisempty) {
|
||||
$validusers = $this->load_users();
|
||||
$validusers = \grade_report::get_gradable_users($this->courseid, $this->groupid);
|
||||
if (!isset($validusers[$this->itemid])) {
|
||||
// If the passed user id is not valid, show the first user from the list instead.
|
||||
$this->item = reset($validusers);
|
||||
|
||||
@@ -27,6 +27,7 @@ define('NO_OUTPUT_BUFFERING', true);
|
||||
require_once('../../../config.php');
|
||||
require_once($CFG->dirroot.'/lib/gradelib.php');
|
||||
require_once($CFG->dirroot.'/grade/lib.php');
|
||||
require_once($CFG->dirroot.'/grade/report/lib.php');
|
||||
|
||||
$courseid = required_param('id', PARAM_INT);
|
||||
$groupid = optional_param('group', null, PARAM_INT);
|
||||
@@ -90,7 +91,8 @@ switch ($itemtype) {
|
||||
// If there is a stored user item (last viewed) in a session variable, bypass the user select zero state
|
||||
// and display this user item. Also, make sure that the stored last viewed user is part of the current
|
||||
// list of gradable users in this course.
|
||||
if ($lastvieweduseritemid && array_key_exists($lastvieweduseritemid, get_gradable_users($courseid, $currentgroup))) {
|
||||
if ($lastvieweduseritemid &&
|
||||
array_key_exists($lastvieweduseritemid, grade_report::get_gradable_users($courseid, $currentgroup))) {
|
||||
$itemtype = 'user';
|
||||
$itemid = $lastvieweduseritemid;
|
||||
} else {
|
||||
@@ -103,7 +105,7 @@ switch ($itemtype) {
|
||||
}
|
||||
// If the item id (user id) cannot be defined or the user id is not part of the list of gradable users,
|
||||
// display the user select zero state.
|
||||
if (is_null($itemid) || !array_key_exists($itemid, get_gradable_users($courseid, $currentgroup))) {
|
||||
if (is_null($itemid) || !array_key_exists($itemid, grade_report::get_gradable_users($courseid, $currentgroup))) {
|
||||
$itemtype = 'user_select';
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -113,7 +113,7 @@ if (has_capability('moodle/grade:viewall', $context)) {
|
||||
$userid = $lastvieweduserid;
|
||||
}
|
||||
|
||||
$gradableusers = get_gradable_users($courseid, $currentgroup);
|
||||
$gradableusers = grade_report::get_gradable_users($courseid, $currentgroup);
|
||||
// Validate whether the requested user is a valid gradable user in this course. If, not display the user select
|
||||
// zero state.
|
||||
if (empty($gradableusers) || ($userid && !array_key_exists($userid, $gradableusers))) {
|
||||
|
||||
@@ -751,7 +751,7 @@ class lib_test extends \advanced_testcase {
|
||||
// Now, let's suspend the enrolment of student2.
|
||||
$this->getDataGenerator()->enrol_user($student2->id, $course->id, 'student', 'manual', 0, 0, ENROL_USER_SUSPENDED);
|
||||
// Should return only the active gradable users (student1 and student3).
|
||||
$gradableusers = get_gradable_users($course->id);
|
||||
$gradableusers = \grade_report::get_gradable_users($course->id);
|
||||
$this->assertEqualsCanonicalizing([$student1->id, $student3->id], array_keys($gradableusers));
|
||||
|
||||
// Give teacher 'viewsuspendedusers' capability and set a preference to display suspended users.
|
||||
@@ -761,17 +761,17 @@ class lib_test extends \advanced_testcase {
|
||||
|
||||
$this->setUser($teacher);
|
||||
// Should return all gradable users (including suspended enrolments).
|
||||
$gradableusers = get_gradable_users($course->id);
|
||||
$gradableusers = \grade_report::get_gradable_users($course->id);
|
||||
$this->assertEqualsCanonicalizing([$student1->id, $student2->id, $student3->id], array_keys($gradableusers));
|
||||
|
||||
// Reactivate the course enrolment of student2.
|
||||
$this->getDataGenerator()->enrol_user($student2->id, $course->id, 'student', 'manual', 0, 0, ENROL_USER_ACTIVE);
|
||||
$this->setAdminUser();
|
||||
// Should return all gradable users from group1 (student1 and student2).
|
||||
$gradableusers = get_gradable_users($course->id, $group1->id);
|
||||
$gradableusers = \grade_report::get_gradable_users($course->id, $group1->id);
|
||||
$this->assertEqualsCanonicalizing([$student1->id, $student2->id], array_keys($gradableusers));
|
||||
// Should return all gradable users from group2 (student3).
|
||||
$gradableusers = get_gradable_users($course->id, $group2->id);
|
||||
$gradableusers = \grade_report::get_gradable_users($course->id, $group2->id);
|
||||
$this->assertEqualsCanonicalizing([$student3->id], array_keys($gradableusers));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ This file describes API changes in /grade/* ;
|
||||
Information provided here is intended especially for developers.
|
||||
|
||||
=== 4.2.3 ===
|
||||
* The function get_gradable_users() in grade/lib.php has extra param now to retrieve only active enrolments.
|
||||
* The grade `itemname` property contained in the return structure of the following external methods is now PARAM_CLEANHTML:
|
||||
- `core_grades_get_gradeitems`
|
||||
- `gradereport_user_get_grade_items`
|
||||
|
||||
Reference in New Issue
Block a user