mirror of
https://github.com/moodle/moodle.git
synced 2025-04-14 04:52:36 +02:00
MDL-40358 Administration: Added group and status filter on user enrolment page
This commit is contained in:
parent
0ea1fbbb55
commit
aa5132140b
@ -61,6 +61,16 @@ class course_enrolment_manager {
|
||||
* @var string
|
||||
*/
|
||||
protected $searchfilter = '';
|
||||
/**
|
||||
* Limits the focus of the manager to users in specified group
|
||||
* @var int
|
||||
*/
|
||||
protected $groupfilter = '';
|
||||
/**
|
||||
* Limits the focus of the manager to users who match status active/inactive
|
||||
* @var int
|
||||
*/
|
||||
protected $statusfilter = '';
|
||||
|
||||
/**
|
||||
* The total number of users enrolled in the course
|
||||
@ -120,15 +130,19 @@ class course_enrolment_manager {
|
||||
* @param string $instancefilter
|
||||
* @param int $rolefilter If non-zero, filters to users with specified role
|
||||
* @param string $searchfilter If non-blank, filters to users with search text
|
||||
* @param int $groupfilter if non-zero, filter users with specified group
|
||||
* @param int $statusfilter if not -1, filter users with active/inactive enrollment.
|
||||
*/
|
||||
public function __construct(moodle_page $moodlepage, $course, $instancefilter = null,
|
||||
$rolefilter = 0, $searchfilter = '') {
|
||||
$rolefilter = 0, $searchfilter = '', $groupfilter = 0, $statusfilter = -1) {
|
||||
$this->moodlepage = $moodlepage;
|
||||
$this->context = context_course::instance($course->id);
|
||||
$this->course = $course;
|
||||
$this->instancefilter = $instancefilter;
|
||||
$this->rolefilter = $rolefilter;
|
||||
$this->searchfilter = $searchfilter;
|
||||
$this->groupfilter = $groupfilter;
|
||||
$this->statusfilter = $statusfilter;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -158,6 +172,7 @@ class course_enrolment_manager {
|
||||
FROM {user} u
|
||||
JOIN {user_enrolments} ue ON (ue.userid = u.id AND ue.enrolid $instancessql)
|
||||
JOIN {enrol} e ON (e.id = ue.enrolid)
|
||||
LEFT JOIN {groups_members} gm ON u.id = gm.userid
|
||||
WHERE $filtersql";
|
||||
$this->totalusers = (int)$DB->count_records_sql($sqltotal, $params);
|
||||
}
|
||||
@ -227,6 +242,7 @@ class course_enrolment_manager {
|
||||
JOIN {user_enrolments} ue ON (ue.userid = u.id AND ue.enrolid $instancessql)
|
||||
JOIN {enrol} e ON (e.id = ue.enrolid)
|
||||
LEFT JOIN {user_lastaccess} ul ON (ul.courseid = e.courseid AND ul.userid = u.id)
|
||||
LEFT JOIN {groups_members} gm ON u.id = gm.userid
|
||||
WHERE $filtersql";
|
||||
if ($sort === 'firstname') {
|
||||
$sql .= " ORDER BY u.firstname $direction, u.lastname $direction";
|
||||
@ -270,6 +286,29 @@ class course_enrolment_manager {
|
||||
$params['roleid'] = $this->rolefilter;
|
||||
}
|
||||
|
||||
// Group condition.
|
||||
if ($this->groupfilter) {
|
||||
$sql .= " AND gm.groupid = :groupid";
|
||||
$params['groupid'] = $this->groupfilter;
|
||||
}
|
||||
|
||||
// Status condition.
|
||||
if ($this->statusfilter === ENROL_USER_ACTIVE) {
|
||||
$sql .= " AND ue.status = :active AND e.status = :enabled AND ue.timestart < :now1
|
||||
AND (ue.timeend = 0 OR ue.timeend > :now2)";
|
||||
$now = round(time(), -2); // rounding helps caching in DB
|
||||
$params += array('enabled' => ENROL_INSTANCE_ENABLED,
|
||||
'active' => ENROL_USER_ACTIVE,
|
||||
'now1' => $now, 'now2' => $now);
|
||||
} else if ($this->statusfilter === ENROL_USER_SUSPENDED) {
|
||||
$sql .= " AND ue.status = :inactive OR e.status = :disabled OR ue.timestart > :now1
|
||||
OR (ue.timeend <> 0 AND ue.timeend < :now2)";
|
||||
$now = round(time(), -2); // rounding helps caching in DB
|
||||
$params += array('disabled' => ENROL_INSTANCE_DISABLED,
|
||||
'inactive' => ENROL_USER_SUSPENDED,
|
||||
'now1' => $now, 'now2' => $now);
|
||||
}
|
||||
|
||||
return array($sql, $params);
|
||||
}
|
||||
|
||||
@ -852,6 +891,12 @@ class course_enrolment_manager {
|
||||
if ($this->searchfilter !== '') {
|
||||
$args['search'] = $this->searchfilter;
|
||||
}
|
||||
if (!empty($this->groupfilter)) {
|
||||
$args['group'] = $this->groupfilter;
|
||||
}
|
||||
if ($this->statusfilter !== -1) {
|
||||
$args['status'] = $this->statusfilter;
|
||||
}
|
||||
return $args;
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,8 @@ $action = optional_param('action', '', PARAM_ALPHANUMEXT);
|
||||
$filter = optional_param('ifilter', 0, PARAM_INT);
|
||||
$search = optional_param('search', '', PARAM_RAW);
|
||||
$role = optional_param('role', 0, PARAM_INT);
|
||||
$fgroup = optional_param('filtergroup', 0, PARAM_INT);
|
||||
$status = optional_param('status', -1, PARAM_INT);
|
||||
|
||||
// When users reset the form, redirect back to first page without other params.
|
||||
if (optional_param('resetbutton', '', PARAM_RAW) !== '') {
|
||||
@ -50,7 +52,7 @@ require_login($course);
|
||||
require_capability('moodle/course:enrolreview', $context);
|
||||
$PAGE->set_pagelayout('admin');
|
||||
|
||||
$manager = new course_enrolment_manager($PAGE, $course, $filter, $role, $search);
|
||||
$manager = new course_enrolment_manager($PAGE, $course, $filter, $role, $search, $fgroup, $status);
|
||||
$table = new course_enrolment_users_table($manager, $PAGE);
|
||||
$PAGE->set_url('/enrol/users.php', $manager->get_url_params()+$table->get_url_params());
|
||||
navigation_node::override_active_url(new moodle_url('/enrol/users.php', array('id' => $id)));
|
||||
|
@ -163,6 +163,22 @@ class enrol_users_filter_form extends moodleform {
|
||||
$mform->addElement('select', 'role', get_string('role'),
|
||||
array(0 => get_string('all')) + $rolenames);
|
||||
|
||||
// Filter by group.
|
||||
$allgroups = $manager->get_all_groups();
|
||||
$groupsmenu[0] = get_string('allparticipants');
|
||||
foreach($allgroups as $gid => $unused) {
|
||||
$groupsmenu[$gid] = $allgroups[$gid]->name;
|
||||
}
|
||||
if (count($groupsmenu) > 1) {
|
||||
$mform->addElement('select', 'filtergroup', get_string('group'), $groupsmenu);
|
||||
}
|
||||
|
||||
// Status active/inactive.
|
||||
$mform->addElement('select', 'status', get_string('status'),
|
||||
array(-1 => get_string('all'),
|
||||
ENROL_USER_ACTIVE => get_string('active'),
|
||||
ENROL_USER_SUSPENDED => get_string('inactive')));
|
||||
|
||||
// Submit button does not use add_action_buttons because that adds
|
||||
// another fieldset which causes the CSS style to break in an unfixable
|
||||
// way due to fieldset quirks.
|
||||
|
Loading…
x
Reference in New Issue
Block a user