// Limit to users with a gradeable role.
list($gradebookrolessql, $gradebookrolesparams) = $DB->get_in_or_equal(explode(',', $this->gradebookroles), SQL_PARAMS_NAMED, 'grbr0');
+ // Check the status of showing only active enrolments.
+ $coursecontext = $this->context->get_course_context(true);
+ $defaultgradeshowactiveenrol = !empty($CFG->grade_report_showonlyactiveenrol);
+ $showonlyactiveenrol = get_user_preferences('grade_report_showonlyactiveenrol', $defaultgradeshowactiveenrol);
+ $showonlyactiveenrol = $showonlyactiveenrol || !has_capability('moodle/course:viewsuspendedusers', $coursecontext);
+
// Limit to users with an active enrollment.
- list($enrolledsql, $enrolledparams) = get_enrolled_sql($this->context);
+ list($enrolledsql, $enrolledparams) = get_enrolled_sql($this->context, '', 0, $showonlyactiveenrol);
// Fields we need from the user table.
$userfields = user_picture::fields('u', get_extra_user_fields($this->context));
$this->userselect = "AND g.userid $usql";
$this->userselect_params = $uparams;
- // Add a flag to each user indicating whether their enrolment is active.
- $sql = "SELECT ue.userid
- FROM {user_enrolments} ue
- JOIN {enrol} e ON e.id = ue.enrolid
- WHERE ue.userid $usql
- AND ue.status = :uestatus
- AND e.status = :estatus
- AND e.courseid = :courseid
- AND ue.timestart < :now1 AND (ue.timeend = 0 OR ue.timeend > :now2)
- GROUP BY ue.userid";
- $coursecontext = $this->context->get_course_context(true);
- $time = time();
- $params = array_merge($uparams, array('estatus' => ENROL_INSTANCE_ENABLED, 'uestatus' => ENROL_USER_ACTIVE,
- 'courseid' => $coursecontext->instanceid, 'now1' => $time, 'now2' => $time));
- $useractiveenrolments = $DB->get_records_sql($sql, $params);
-
- $defaultgradeshowactiveenrol = !empty($CFG->grade_report_showonlyactiveenrol);
- $showonlyactiveenrol = get_user_preferences('grade_report_showonlyactiveenrol', $defaultgradeshowactiveenrol);
- $showonlyactiveenrol = $showonlyactiveenrol || !has_capability('moodle/course:viewsuspendedusers', $coursecontext);
+ // First flag everyone as not suspended.
foreach ($this->users as $user) {
- // If we are showing only active enrolments, then remove suspended users from list.
- if ($showonlyactiveenrol && !array_key_exists($user->id, $useractiveenrolments)) {
- unset($this->users[$user->id]);
- } else {
+ $this->users[$user->id]->suspendedenrolment = false;
+ }
+
+ // If we want to mix both suspended and not suspended users, let's find out who is suspended.
+ if (!$showonlyactiveenrol) {
+ $sql = "SELECT ue.userid
+ FROM {user_enrolments} ue
+ JOIN {enrol} e ON e.id = ue.enrolid
+ WHERE ue.userid $usql
+ AND ue.status = :uestatus
+ AND e.status = :estatus
+ AND e.courseid = :courseid
+ AND ue.timestart < :now1 AND (ue.timeend = 0 OR ue.timeend > :now2)
+ GROUP BY ue.userid";
+
+ $time = time();
+ $params = array_merge($uparams, array('estatus' => ENROL_INSTANCE_ENABLED, 'uestatus' => ENROL_USER_ACTIVE,
+ 'courseid' => $coursecontext->instanceid, 'now1' => $time, 'now2' => $time));
+ $useractiveenrolments = $DB->get_records_sql($sql, $params);
+
+ foreach ($this->users as $user) {
$this->users[$user->id]->suspendedenrolment = !array_key_exists($user->id, $useractiveenrolments);
}
}