MDL-40358 Administration: Added group and status filter on user enrolment page

This commit is contained in:
Rajesh Taneja 2013-07-01 14:20:21 +08:00
parent 0ea1fbbb55
commit aa5132140b
3 changed files with 65 additions and 2 deletions

View File

@ -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;
}

View File

@ -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)));

View File

@ -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.