enrol MDL-22854 New ajaxified enrolment interface
[moodle.git] / enrol / users.php
index e2fced2..15b8415 100644 (file)
 /**
  * Main course enrolment management UI, this is not compatible with frontpage course.
  *
- * @package    core
- * @subpackage enrol
+ * @package    moodlecore
  * @copyright  2010 Petr Skoda {@link http://skodak.org}
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
 require('../config.php');
+require_once("$CFG->dirroot/enrol/locallib.php");
 require_once("$CFG->dirroot/enrol/users_forms.php");
+require_once("$CFG->dirroot/enrol/renderer.php");
 require_once("$CFG->dirroot/group/lib.php");
 
 $id      = required_param('id', PARAM_INT); // course id
 $action  = optional_param('action', '', PARAM_ACTION);
-$confirm = optional_param('confirm', 0, PARAM_BOOL);
-
-$ifilter = optional_param('ifilter', 0, PARAM_INT); // only one instance
-$page    = optional_param('page', 0, PARAM_INT);
-$perpage = optional_param('perpage', 20, PARAM_INT);
-$sort    = optional_param('sort', 'lastname', PARAM_ALPHA);
-$dir     = optional_param('dir', 'ASC', PARAM_ALPHA);
+$filter  = optional_param('ifilter', 0, PARAM_INT);
 
+$PAGE->set_url(new moodle_url('/enrol/users.php', array('id'=>$id)));
 
 $course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST);
 $context = get_context_instance(CONTEXT_COURSE, $course->id, MUST_EXIST);
 
-require_login($course);
-require_capability('moodle/course:enrolreview', $context);
-
 if ($course->id == SITEID) {
-    redirect("$CFG->wwwroot/");
-}
-
-$managegroups = has_capability('moodle/course:managegroups', $context);
-$instances = enrol_get_instances($course->id, true);
-$plugins   = enrol_get_plugins(true);
-$inames    = array();
-foreach ($instances as $k=>$i) {
-    if (!isset($plugins[$i->enrol])) {
-        // weird, some broken stuff in plugin
-        unset($instances[$k]);
-        continue;
-    }
-    $inames[$k] = $plugins[$i->enrol]->get_instance_name($i);
-}
-
-// validate paging params
-if ($ifilter != 0 and !isset($instances[$ifilter])) {
-    $ifilter = 0;
-}
-if ($perpage < 3) {
-    $perpage = 3;
-}
-if ($page < 0) {
-    $page = 0;
-}
-if (!in_array($dir, array('ASC', 'DESC'))) {
-    $dir = 'ASC';
-}
-if (!in_array($sort, array('firstname', 'lastname', 'email', 'lastseen'))) {
-    $dir = 'lastname';
+    redirect(new moodle_url('/'));
 }
 
-$PAGE->set_url('/enrol/users.php', array('id'=>$course->id, 'page'=>$page, 'sort'=>$sort, 'dir'=>$dir, 'perpage'=>$perpage, 'ifilter'=>$ifilter));
+require_login($course);
+require_capability('moodle/course:enrolreview', $context);
 $PAGE->set_pagelayout('admin');
 
-//lalala- nav hack
-navigation_node::override_active_url(new moodle_url('/enrol/users.php', array('id'=>$course->id)));
+$manager = new course_enrolment_manager($course, $filter);
+$table = new course_enrolment_table($manager, $PAGE->url);
+$pageurl = new moodle_url($PAGE->url, $manager->get_url_params()+$table->get_url_params());
 
+// Check if there is an action to take
+if ($action) {
 
-$allroles   = get_all_roles();
-$allroles   = role_fix_names($allroles, $context);
-$assignable = get_assignable_roles($context, ROLENAME_ALIAS, false); // verifies unassign access control too
-$allgroups  = groups_get_all_groups($course->id);
-foreach ($allgroups as $gid=>$group) {
-    $allgroups[$gid]->name = format_string($group->name);
-}
+    // Check if the page is confirmed (and sesskey is correct)
+    $confirm = optional_param('confirm', false, PARAM_BOOL) && confirm_sesskey();
+
+    $actiontaken = false;
+    $pagetitle = '';
+    $pageheading = '';
+    $mform = null;
+    $pagecontent = null;
 
-if ($action) {
     switch ($action) {
         case 'unenrol':
-            $ue = required_param('ue', PARAM_INT);
-            if (!$ue = $DB->get_record('user_enrolments', array('id'=>$ue))) {
-                break;
-            }
-            $user = $DB->get_record('user', array('id'=>$ue->userid), '*', MUST_EXIST);
-            if (!isset($instances[$ue->enrolid])) {
-                break;
-            }
-            $instance = $instances[$ue->enrolid];
-            $plugin = $plugins[$instance->enrol];
-            if (!$plugin->allow_unenrol($instance) or !has_capability("enrol/$instance->enrol:unenrol", $context)) {
-                break;
-            }
-
-            if ($confirm and confirm_sesskey()) {
-                $plugin->unenrol_user($instance, $ue->userid);
-                redirect($PAGE->url);
-
+            $ue = $DB->get_record('user_enrolments', array('id'=>required_param('ue', PARAM_INT)), '*', MUST_EXIST);
+            if ($confirm && $manager->unenrol_user($ue)) {
+                redirect($pageurl);
             } else {
-                $yesurl = new moodle_url($PAGE->url, array('action'=>'unenrol', 'ue'=>$ue->id, 'confirm'=>1, 'sesskey'=>sesskey()));
+                $user = $DB->get_record('user', array('id'=>$ue->userid), '*', MUST_EXIST);
+                $yesurl = new moodle_url($pageurl, array('action'=>'unenrol', 'ue'=>$ue->id, 'confirm'=>1, 'sesskey'=>sesskey()));
                 $message = get_string('unenrolconfirm', 'enrol', array('user'=>fullname($user, true), 'course'=>format_string($course->fullname)));
-                $PAGE->set_title(get_string('unenrol', 'enrol'));
-                echo $OUTPUT->header();
-                echo $OUTPUT->heading(get_string('unenrol', 'enrol'));
-                echo $OUTPUT->confirm($message, $yesurl, $PAGE->url);
-                echo $OUTPUT->footer();
-                die;
+                $pagetitle = get_string('unenrol', 'enrol');
+                $pagecontent = $OUTPUT->confirm($message, $yesurl, $pageurl);
             }
+            $actiontaken = true;
             break;
 
         case 'unassign':
             $role = required_param('role', PARAM_INT);
             $user = required_param('user', PARAM_INT);
-            if (!isset($assignable[$role])) {
-                break;
-            }
-            $role = $allroles[$role];
-            $user = $DB->get_record('user', array('id'=>$user), '*', MUST_EXIST);
-
-            if ($confirm and confirm_sesskey()) {
-                role_unassign($role->id, $user->id, $context->id, '', NULL);
-                redirect($PAGE->url);
-
+            if ($confirm && $manager->unassign_role_from_user($user, $role)) {
+                redirect($pageurl);
             } else {
-                $yesurl = new moodle_url($PAGE->url, array('action'=>'unassign', 'role'=>$role->id, 'user'=>$user->id, 'confirm'=>1, 'sesskey'=>sesskey()));
+                $user = $DB->get_record('user', array('id'=>$user), '*', MUST_EXIST);
+                $allroles = $manager->get_all_roles();
+                $role = $allroles[$role];
+                $yesurl = new moodle_url($pageurl, array('action'=>'unassign', 'role'=>$role->id, 'user'=>$user->id, 'confirm'=>1, 'sesskey'=>sesskey()));
                 $message = get_string('unassignconfirm', 'role', array('user'=>fullname($user, true), 'role'=>$role->localname));
-                $PAGE->set_title(get_string('unassignarole', 'role', $role->localname));
-                echo $OUTPUT->header();
-                echo $OUTPUT->heading(get_string('unassignarole', 'role', $role->localname));
-                echo $OUTPUT->confirm($message, $yesurl, $PAGE->url);
-                echo $OUTPUT->footer();
-                die;
+                $pagetitle = get_string('unassignarole', 'role', $role->localname);
+                $pagecontent = $OUTPUT->confirm($message, $yesurl, $pageurl);
             }
+            $actiontaken = true;
             break;
 
         case 'assign':
@@ -159,363 +101,119 @@ if ($action) {
                 break; // no roles without enrolments here in this script
             }
 
-            $mform = new enrol_users_assign_form(NULL, array('user'=>$user, 'course'=>$course, 'assignable'=>$assignable));
-
-            if ($mform->is_cancelled()) {
-                redirect($PAGE->url);
-
-            } else if ($data = $mform->get_data()) {
-                if ($data->roleid) {
-                    role_assign($data->roleid, $user->id, $context->id, '', NULL);
-                }
-                redirect($PAGE->url);
+            $mform = new enrol_users_assign_form(NULL, array('user'=>$user, 'course'=>$course, 'assignable'=>$manager->get_assignable_roles()));
+            $mform->set_data($pageurl->params());
+            $data = $mform->get_data();
+            if ($mform->is_cancelled() || ($data && $manager->assign_role_to_user($data->roleid, $user->id))) {
+                redirect($pageurl);
+            } else {
+                $pagetitle = get_string('assignroles', 'role');
             }
-
-            $PAGE->set_title(get_string('assignroles', 'role'));
-            echo $OUTPUT->header();
-            echo $OUTPUT->heading(get_string('assignroles', 'role'));
-            $mform->display();
-            echo $OUTPUT->footer();
-            die;
+            $actiontaken = true;
+            break;
 
         case 'removemember':
-            $group = required_param('group', PARAM_INT);
-            $user  = required_param('user', PARAM_INT);
-            if (!$managegroups) {
-                break;
-            }
-            if (!isset($allgroups[$group])) {
-                break;
-            }
-            $group = $allgroups[$group];
-            $user  = $DB->get_record('user', array('id'=>$user), '*', MUST_EXIST);
-
-            if ($confirm and confirm_sesskey()) {
-                groups_remove_member($group, $user);
-                redirect($PAGE->url);
-
+            $groupid = required_param('group', PARAM_INT);
+            $userid  = required_param('user', PARAM_INT);
+            $user = $DB->get_record('user', array('id'=>$userid), '*', MUST_EXIST);
+            if ($confirm && $manager->remove_user_from_group($user, $groupid)) {
+                redirect($pageurl);
             } else {
-                $yesurl = new moodle_url($PAGE->url, array('action'=>'removemember', 'group'=>$group->id, 'user'=>$user->id, 'confirm'=>1, 'sesskey'=>sesskey()));
+                $group = $manager->get_group($groupid);
+                if (!$group) {
+                    break;
+                }
+                $yesurl = new moodle_url($pageurl, array('action'=>'removemember', 'group'=>$groupid, 'user'=>$userid, 'confirm'=>1, 'sesskey'=>sesskey()));
                 $message = get_string('removefromgroupconfirm', 'group', array('user'=>fullname($user, true), 'group'=>$group->name));
-                $PAGE->set_title(get_string('removefromgroup', 'group', $group->name));
-                echo $OUTPUT->header();
-                echo $OUTPUT->heading(get_string('removefromgroup', 'group', $group->name));
-                echo $OUTPUT->confirm($message, $yesurl, $PAGE->url);
-                echo $OUTPUT->footer();
-                die;
+                $pagetitle = get_string('removefromgroup', 'group', $group->name);
+                $pagecontent = $OUTPUT->confirm($message, $yesurl, $pageurl);
             }
+            $actiontaken = true;
             break;
 
         case 'addmember':
-            $user = required_param('user', PARAM_INT);
-            $user = $DB->get_record('user', array('id'=>$user), '*', MUST_EXIST);
-
-            if (!$managegroups) {
-                break;
-            }
-            if (!is_enrolled($context, $user)) {
-                break; // no roles without enrolments here in this script
-            }
-
-            $mform = new enrol_users_addmember_form(NULL, array('user'=>$user, 'course'=>$course, 'allgroups'=>$allgroups));
-
-            if ($mform->is_cancelled()) {
-                redirect($PAGE->url);
-
-            } else if ($data = $mform->get_data()) {
-                if ($data->groupid) {
-                    groups_add_member($data->groupid, $user->id);
-                }
-                redirect($PAGE->url);
+            $userid = required_param('user', PARAM_INT);
+            $user = $DB->get_record('user', array('id'=>$userid), '*', MUST_EXIST);
+
+            $mform = new enrol_users_addmember_form(NULL, array('user'=>$user, 'course'=>$course, 'allgroups'=>$manager->get_all_groups()));
+            $mform->set_data($pageurl->params());
+            $data = $mform->get_data();
+            if ($mform->is_cancelled() || ($data && $manager->add_user_to_group($user, $data->groupid))) {
+                redirect($pageurl);
+            } else {
+                $pagetitle = get_string('addgroup', 'group');
             }
-
-            $PAGE->set_title(get_string('addgroup', 'group'));
-            echo $OUTPUT->header();
-            echo $OUTPUT->heading(get_string('addgroup', 'group'));
-            $mform->display();
-            echo $OUTPUT->footer();
-            die;
+            $actiontaken = true;
+            break;
 
         case 'edit':
             $ue = required_param('ue', PARAM_INT);
             if (!$ue = $DB->get_record('user_enrolments', array('id'=>$ue))) {
+                $actiontaken = false;
                 break;
             }
             $user = $DB->get_record('user', array('id'=>$ue->userid), '*', MUST_EXIST);
-            if (!isset($instances[$ue->enrolid])) {
-                break;
-            }
-            $instance = $instances[$ue->enrolid];
-            $plugin = $plugins[$instance->enrol];
-            if (!$plugin->allow_unenrol($instance) or !has_capability("enrol/$instance->enrol:unenrol", $context)) {
-                break;
-            }
 
             $mform = new enrol_users_edit_form(NULL, array('user'=>$user, 'course'=>$course, 'ue'=>$ue));
-
-            if ($mform->is_cancelled()) {
-                redirect($PAGE->url);
-
-            } else if ($data = $mform->get_data()) {
-                if (!isset($data->status)) {
-                    $status = $ue->status;
-                }
-                $plugin->update_user_enrol($instance, $ue->userid, $data->status, $data->timestart, $data->timeend);
-                redirect($PAGE->url);
+            $mform->set_data($pageurl->params());
+            $data = $mform->get_data();
+            if ($mform->is_cancelled() || ($data && $manager->edit_enrolment($ue, $data))) {
+                redirect($pageurl);
+            } else {
+                $pagetitle = fullname($user);
             }
-
-            $PAGE->set_title(fullname($user));
-            echo $OUTPUT->header();
-            echo $OUTPUT->heading(fullname($user));
-            $mform->display();
-            echo $OUTPUT->footer();
-            die;
-    }
-}
-
-
-echo $OUTPUT->header();
-echo $OUTPUT->heading(get_string('enrolledusers', 'enrol'));
-$PAGE->set_title(get_string('enrolledusers', 'enrol'));
-
-notify('NOTICE TO TESTERS: This interface will shortly be replaced with a new one.');   // TODO FIXME REMOVE THIS
-
-if ($ifilter) {
-    $instancessql = " = :ifilter";
-    $params = array('ifilter'=>$ifilter);
-} else {
-    if ($instances) {
-        list($instancessql, $params) = $DB->get_in_or_equal(array_keys($instances), SQL_PARAMS_NAMED);
-    } else {
-        // no enabled instances, oops, we should probably say something
-        $instancessql = "= :never";
-        $params = array('never'=>-1);
-    }
-}
-
-$sqltotal = "SELECT COUNT(DISTINCT u.id)
-               FROM {user} u
-               JOIN {user_enrolments} ue ON (ue.userid = u.id  AND ue.enrolid $instancessql)
-               JOIN {enrol} e ON (e.id = ue.enrolid)";
-$totalusers = $DB->count_records_sql($sqltotal, $params);
-
-$ufields = user_picture::fields('u');
-$sql = "SELECT DISTINCT $ufields, ul.timeaccess AS lastseen
-          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 {user_lastaccess} ul ON (ul.courseid = e.courseid AND ul.userid = u.id)";
-if ($sort === 'firstname') {
-    $sql .= " ORDER BY u.firstname $dir, u.lastname $dir";
-} else if ($sort === 'lastname') {
-    $sql .= " ORDER BY u.lastname $dir, u.firstname $dir";
-} else if ($sort === 'email') {
-    $sql .= " ORDER BY u.email $dir, u.lastname $dir, u.firstname $dir";
-} else if ($sort === 'lastseen') {
-    $sql .= " ORDER BY ul.timeaccess $dir, u.lastname $dir, u.firstname $dir";
-}
-
-$pagingbar = new paging_bar($totalusers, $page, $perpage, $PAGE->url, 'page');
-
-$users = $DB->get_records_sql($sql, $params, $page*$perpage, $perpage);
-
-$strfirstname = get_string('firstname');
-$strlastname  = get_string('lastname');
-$stremail     = get_string('email');
-$strlastseen  = get_string('lastaccess');
-
-if ($dir === 'ASC') {
-    $diricon = html_writer::empty_tag('img', array('alt'=>'', 'src'=>$OUTPUT->pix_url('t/down')));
-    $newdir = 'DESC';
-} else {
-    $diricon  = html_writer::empty_tag('img', array('alt'=>'', 'src'=>$OUTPUT->pix_url('t/up')));
-    $newdir = 'ASC';
-}
-
-$table = new html_table();
-$table->head = array();
-if ($sort === 'firstname') {
-    $h = html_writer::link(new moodle_url($PAGE->url, array('dir'=>$newdir)), $strfirstname);
-    $h .= " $diricon / ";
-    $h .= html_writer::link(new moodle_url($PAGE->url, array('sort'=>'lastname')), $strlastname);
-} else if ($sort === 'lastname') {
-    $newdir = ($dir === 'ASC') ? 'DESC' : 'ASC';
-    $h = html_writer::link(new moodle_url($PAGE->url, array('sort'=>'firstname')), $strfirstname);
-    $h .= " / ";
-    $h .= html_writer::link(new moodle_url($PAGE->url, array('dir'=>$newdir)), $strlastname);
-    $h .= " $diricon";
-} else {
-    $h = html_writer::link(new moodle_url($PAGE->url, array('sort'=>'firstname')), $strfirstname);
-    $h .= " / ";
-    $h .= html_writer::link(new moodle_url($PAGE->url, array('sort'=>'lastname')), $strlastname);
-}
-$table->head[] = $h;
-if ($sort === 'email') {
-    $h = html_writer::link(new moodle_url($PAGE->url, array('dir'=>$newdir)), $stremail);
-    $h .= " $diricon";
-} else {
-    $h = html_writer::link(new moodle_url($PAGE->url, array('sort'=>'email')), $stremail);
-}
-$table->head[] = $h;
-if ($sort === 'lastseen') {
-    $h = html_writer::link(new moodle_url($PAGE->url, array('dir'=>$newdir)), $strlastseen);
-    $h .= " $diricon";
-} else {
-    $h = html_writer::link(new moodle_url($PAGE->url, array('sort'=>'lastseen')), $strlastseen);
-}
-$table->head[] = $h;
-$table->head[] = get_string('roles', 'role');
-$table->head[] = get_string('groups', 'group');
-$table->head[] = get_string('enrolmentinstances', 'enrol');
-
-$table->align = array('left', 'left', 'left', 'left', 'left', 'left');
-$table->width = "95%";
-foreach ($users as $user) {
-    $picture = $OUTPUT->user_picture($user, array('courseid'=>$course->id));
-
-    if ($user->lastseen) {
-        $strlastaccess = userdate($user->lastseen);
-    } else {
-        $strlastaccess = get_string('never');
+            $actiontaken = true;
+            break;
     }
-    $fullname = fullname($user, true);
 
-    // get list of roles
-    $roles = array();
-    $ras = get_user_roles($context, $user->id, true, 'c.contextlevel DESC, r.sortorder ASC');
-    foreach ($ras as $ra) {
-        if ($ra->contextid != $context->id) {
-            if (!isset($roles[$ra->roleid])) {
-                $roles[$ra->roleid] = null;
-            }
-            // higher ras, course always takes precedence
-            continue;
-        }
-        if (isset($roles[$ra->roleid]) and $roles[$ra->roleid] === false) {
-            continue;
+    if ($actiontaken) {
+        if (empty($pageheading)) {
+            $pageheading = $pagetitle;
         }
-        $roles[$ra->roleid] = ($ra->itemid == 0 and $ra->component === '');
-    }
-    foreach ($roles as $rid=>$unassignable) {
-        if ($unassignable and isset($assignable[$rid])) {
-            $icon = html_writer::empty_tag('img', array('alt'=>get_string('unassignarole', 'role', $allroles[$rid]->localname), 'src'=>$OUTPUT->pix_url('t/delete')));
-            $url = new moodle_url($PAGE->url, array('action'=>'unassign', 'role'=>$rid, 'user'=>$user->id));
-            $roles[$rid] = $allroles[$rid]->localname . html_writer::link($url, $icon);
-        } else {
-            $roles[$rid] = $allroles[$rid]->localname;
-        }
-    }
-    $addrole = '';
-    if ($assignable) {
-        foreach ($assignable as $rid=>$unused) {
-            if (!isset($roles[$rid])) {
-                //candidate for role assignment
-                $icon = html_writer::empty_tag('img', array('alt'=>get_string('assignroles', 'role'), 'src'=>$OUTPUT->pix_url('t/add')));
-                $url = new moodle_url($PAGE->url, array('action'=>'assign', 'user'=>$user->id));
-                $addrole .= html_writer::link($url, $icon);
-                break;
-            }
-        }
-    }
-    $roles = implode(', ', $roles);
-    if ($addrole) {
-        $roles = $roles . '<div>'.$addrole.'</div>';
-    }
-
-    $groups = array();
-    $usergroups = groups_get_all_groups($course->id, $user->id, 0, 'g.id');
-    foreach($usergroups as $gid=>$unused) {
-        $group = $allgroups[$gid];
-        if ($managegroups) {
-            $icon = html_writer::empty_tag('img', array('alt'=>get_string('removefromgroup', 'group', $group->name), 'src'=>$OUTPUT->pix_url('t/delete')));
-            $url = new moodle_url($PAGE->url, array('action'=>'removemember', 'group'=>$gid, 'user'=>$user->id));
-            $groups[] = $group->name . html_writer::link($url, $icon);
+        $PAGE->set_title($pagetitle);
+        $PAGE->set_heading($pageheading);
+        echo $OUTPUT->header();
+        echo $OUTPUT->heading(fullname($user));
+        if (!is_null($mform)) {
+            $mform->display();
         } else {
-            $groups[] = $group->name;
-        }
-    }
-    $groups = implode(', ', $groups);
-    if ($managegroups and (count($usergroups) < count($allgroups))) {
-        $icon = html_writer::empty_tag('img', array('alt'=>get_string('addgroup', 'group'), 'src'=>$OUTPUT->pix_url('t/add')));
-        $url = new moodle_url($PAGE->url, array('action'=>'addmember', 'user'=>$user->id));
-        $groups .= '<div>'.html_writer::link($url, $icon).'</div>';
-    }
-
-
-    // get list of enrol instances
-    $now = time();
-    $edits = array();
-    $params['userid'] = $user->id;
-    $ues = $DB->get_records_select('user_enrolments', "enrolid $instancessql AND userid = :userid", $params);
-    foreach ($ues as $ue) {
-        $instance = $instances[$ue->enrolid];
-        $plugin   = $plugins[$instance->enrol];
-
-        $edit = $inames[$instance->id];
-
-        $dimmed = false;
-        if ($ue->timestart and $ue->timeend) {
-            $edit .= '&nbsp;('.get_string('periodstartend', 'enrol', array('start'=>userdate($ue->timestart), 'end'=>userdate($ue->timeend))).')';
-            $dimmed = ($now < $ue->timestart and $now > $ue->timeend);
-        } else if ($ue->timestart) {
-            $edit .= '&nbsp;('.get_string('periodstart', 'enrol', userdate($ue->timestart)).')';
-            $dimmed = ($now < $ue->timestart);
-        } else if ($ue->timeend) {
-            $edit .= '&nbsp;('.get_string('periodend', 'enrol', userdate($ue->timeend)).')';
-            $dimmed = ($now > $ue->timeend);
-        }
-
-        if ($dimmed or $ue->status != ENROL_USER_ACTIVE) {
-            $edit = html_writer::tag('span', $edit, array('class'=>'dimmed_text'));
-        }
-
-        if ($plugin->allow_unenrol($instance) and has_capability("enrol/$instance->enrol:unenrol", $context)) {
-            $icon = html_writer::empty_tag('img', array('alt'=>get_string('unenrol', 'enrol'), 'src'=>$OUTPUT->pix_url('t/delete')));
-            $url = new moodle_url($PAGE->url, array('action'=>'unenrol', 'ue'=>$ue->id));
-            $edit .= html_writer::link($url, $icon);
-        }
-
-        if ($plugin->allow_manage($instance) and has_capability("enrol/$instance->enrol:manage", $context)) {
-            $icon = html_writer::empty_tag('img', array('alt'=>get_string('edit'), 'src'=>$OUTPUT->pix_url('t/edit')));
-            $url = new moodle_url($PAGE->url, array('action'=>'edit', 'ue'=>$ue->id));
-            $edit .= html_writer::link($url, $icon);
+            echo $pagecontent;
         }
-
-        $edits[] = $edit;
+        echo $OUTPUT->footer();
+        exit;
     }
-    $edits = implode('<br />', $edits);
-
-    $table->data[] = array("$picture <a href=\"$CFG->wwwroot/user/view.php?id=$user->id&amp;course=$course->id\">$fullname</a>", $user->email, $strlastaccess, $roles, $groups, $edits);
 }
 
-$ifilters = new single_select($PAGE->url, 'ifilter', array(0=>get_string('all')) + $inames, $ifilter, array());
-$ifilters->set_label(get_string('enrolmentinstances', 'enrol'));
 
-echo $OUTPUT->render($ifilters);
-echo $OUTPUT->render($pagingbar);
-echo html_writer::table($table);
-echo $OUTPUT->render($pagingbar);
+$fields = array(
+    'userdetails' => array (
+        'picture' => false,
+        'firstname' => get_string('firstname'),
+        'lastname' => get_string('lastname'),
+        'email' => get_string('email')
+    ),
+    'lastseen' => get_string('lastaccess'),
+    'role' => get_string('roles', 'role'),
+    'group' => get_string('groups', 'group'),
+    'enrol' => get_string('enrolmentinstances', 'enrol')
+);
+$table->set_fields($fields);
+
+$renderer = $PAGE->get_renderer('core_enrol');
+$canassign = has_capability('moodle/role:assign', $manager->get_context());
+$users = $manager->get_users_for_display($renderer, $pageurl, $table->sort, $table->sortdirection, $table->page, $table->perpage);
+foreach ($users as $userid=>&$user) {
+    $user['picture'] = $OUTPUT->render($user['picture']);
+    $user['role'] = $renderer->user_roles_and_actions($userid, $user['roles'], $manager->get_assignable_roles(), $canassign, $pageurl);
+    $user['group'] = $renderer->user_groups_and_actions($userid, $user['groups'], $manager->get_all_groups(), has_capability('moodle/course:managegroups', $manager->get_context()), $pageurl);
+    $user['enrol'] = $renderer->user_enrolments_and_actions($userid, $user['enrolments'], $pageurl);
+}
+$table->set_users($users);
 
-// print enrol link or selection
-$links = array();
-foreach($instances as $instance) {
-    $plugin = $plugins[$instance->enrol];
-    if ($link = $plugin->get_manual_enrol_link($instance)) {
-        $links[$instance->id] = $link;
-    }
-}
-if (count($links) == 1) {
-    $link = reset($links);
-    echo $OUTPUT->single_button($link, get_string('enrolusers', 'enrol_manual'), 'get');
-
-} else if (count($links) > 1) {
-    $options = array();
-    foreach ($links as $i=>$link) {
-        $options[$link->out(false)] = $inames[$i];
-    }
-    echo $OUTPUT->url_select($options, '', array(''=>get_string('enrolusers', 'enrol_manual').'...'));
-}
+$PAGE->set_title(get_string('enrolledusers', 'enrol'));
+$PAGE->set_heading($PAGE->course->fullname);
 
+echo $OUTPUT->header();
+echo $OUTPUT->heading(get_string('enrolledusers', 'enrol'));
+echo $renderer->render($table);
 echo $OUTPUT->footer();
-
-