Skip to content

Commit

Permalink
MDL-76445 gradereport_singleview: Deprecate load_users()
Browse files Browse the repository at this point in the history
Replaces current usages of
\gradereport_singleview\local\screen::load_users() with
get_gradable_users() and deprecates load_users(). The only
remaining calls of this method are unit test related.
  • Loading branch information
Mihail Geshoski committed Jun 13, 2023
1 parent 41ec352 commit c95c632
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 22 deletions.
2 changes: 1 addition & 1 deletion grade/report/singleview/classes/local/screen/grade.php
Expand Up @@ -151,7 +151,7 @@ public function original_definition(): array {
*/
public function init($selfitemisempty = false) {

$this->items = $this->load_users();
$this->items = get_gradable_users($this->courseid, $this->groupid);
$this->totalitemcount = count($this->items);

if ($selfitemisempty) {
Expand Down
27 changes: 7 additions & 20 deletions grade/report/singleview/classes/local/screen/screen.php
Expand Up @@ -405,28 +405,15 @@ public function supports_next_prev(): bool {

/**
* Load a valid list of users for this gradebook as the screen "items".
* @return array $users A list of enroled users.
*
* @deprecated since Moodle 4.3
* @return array A list of enroled users.
*/
protected function load_users(): array {
global $CFG;

// Create a graded_users_iterator because it will properly check the groups etc.
$defaultgradeshowactiveenrol = !empty($CFG->grade_report_showonlyactiveenrol);
$showonlyactiveenrol = get_user_preferences('grade_report_showonlyactiveenrol', $defaultgradeshowactiveenrol);
$showonlyactiveenrol = $showonlyactiveenrol || !has_capability('moodle/course:viewsuspendedusers', $this->context);

require_once($CFG->dirroot.'/grade/lib.php');
$gui = new \graded_users_iterator($this->course, null, $this->groupid);
$gui->require_active_enrolment($showonlyactiveenrol);
$gui->init();

// Flatten the users.
$users = [];
while ($user = $gui->next_user()) {
$users[$user->user->id] = $user->user;
}
$gui->close();
return $users;
debugging('The function ' . __FUNCTION__ . '() is deprecated. Please use get_gradable_users() instead.',
DEBUG_DEVELOPER);

return get_gradable_users($this->courseid, $this->groupid);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion grade/report/singleview/classes/local/screen/user.php
Expand Up @@ -102,7 +102,7 @@ public function item_type(): string {
public function init($selfitemisempty = false) {

if (!$selfitemisempty) {
$validusers = $this->load_users();
$validusers = 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);
Expand Down
5 changes: 5 additions & 0 deletions grade/report/singleview/tests/screen_test.php
Expand Up @@ -63,11 +63,13 @@ public function test_load_users() {
grade_regrade_final_grades($course->id);
$screentest = new gradereport_singleview_screen_testable($course->id, 0, $group->id);
$groupusers = $screentest->test_load_users();
$this->assertDebuggingCalled('The function load_users() is deprecated. Please use get_gradable_users() instead.');
$this->assertCount(2, $groupusers);

// Now, let's suspend the enrolment of a user. Should return only one user.
$this->getDataGenerator()->enrol_user($user2->id, $course->id, $roleteacher->id, 'manual', 0, 0, ENROL_USER_SUSPENDED);
$users = $screentest->test_load_users();
$this->assertDebuggingCalled('The function load_users() is deprecated. Please use get_gradable_users() instead.');
$this->assertCount(1, $users);

// Change the viewsuspendedusers capabilities and set the user preference to display suspended users.
Expand All @@ -77,18 +79,21 @@ public function test_load_users() {
$this->setUser($teacher);
$screentest = new gradereport_singleview_screen_testable($course->id, 0, $group->id);
$users = $screentest->test_load_users();
$this->assertDebuggingCalled('The function load_users() is deprecated. Please use get_gradable_users() instead.');
$this->assertCount(2, $users);

// Change the capability again, now the user can't see the suspended enrolments.
assign_capability('moodle/course:viewsuspendedusers', CAP_PROHIBIT, $roleteacher->id, $coursecontext, true);
set_user_preference('grade_report_showonlyactiveenrol', false, $teacher);
accesslib_clear_all_caches_for_unit_testing();
$users = $screentest->test_load_users();
$this->assertDebuggingCalled('The function load_users() is deprecated. Please use get_gradable_users() instead.');
$this->assertCount(1, $users);

// Now, activate the user enrolment again. We shall get 2 users now.
$this->getDataGenerator()->enrol_user($user2->id, $course->id, $roleteacher->id, 'manual', 0, 0, ENROL_USER_ACTIVE);
$users = $screentest->test_load_users();
$this->assertDebuggingCalled('The function load_users() is deprecated. Please use get_gradable_users() instead.');
$this->assertCount(2, $users);
}
}
2 changes: 2 additions & 0 deletions grade/report/upgrade.txt
Expand Up @@ -3,6 +3,8 @@ information provided here is intended especially for developers.

=== 4.3 ===

* The load_users() method in the gradereport_singleview\local\screen class has been deprecated. Please use
get_gradable_users() instead.
* The \gradereport_singleview\local\screen\select has been deprecated. This class generates the output for the initial
view to select the single view item type (user or grade item) which is no longer actively used as we do not provide
direct links to it.
Expand Down

0 comments on commit c95c632

Please sign in to comment.