MDL-21437 data - checkbox and multimenu fields search working + require all too
[moodle.git] / enrol / users.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Main course enrolment management UI, this is not compatible with frontpage course.
19  *
20  * @package    core
21  * @subpackage enrol
22  * @copyright  2010 Petr Skoda {@link http://skodak.org}
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26 require('../config.php');
27 require_once("$CFG->dirroot/enrol/locallib.php");
28 require_once("$CFG->dirroot/enrol/users_forms.php");
29 require_once("$CFG->dirroot/enrol/renderer.php");
30 require_once("$CFG->dirroot/group/lib.php");
32 $id      = required_param('id', PARAM_INT); // course id
33 $action  = optional_param('action', '', PARAM_ACTION);
34 $filter  = optional_param('ifilter', 0, PARAM_INT);
36 $PAGE->set_url(new moodle_url('/enrol/users.php', array('id'=>$id)));
38 $course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST);
39 $context = get_context_instance(CONTEXT_COURSE, $course->id, MUST_EXIST);
41 if ($course->id == SITEID) {
42     redirect(new moodle_url('/'));
43 }
45 require_login($course);
46 require_capability('moodle/course:enrolreview', $context);
47 $PAGE->set_pagelayout('admin');
49 $manager = new course_enrolment_manager($course, $filter);
50 $table = new course_enrolment_users_table($manager, $PAGE->url);
51 $pageurl = new moodle_url($PAGE->url, $manager->get_url_params()+$table->get_url_params());
53 // Check if there is an action to take
54 if ($action) {
56     // Check if the page is confirmed (and sesskey is correct)
57     $confirm = optional_param('confirm', false, PARAM_BOOL) && confirm_sesskey();
59     $actiontaken = false;
60     $pagetitle = '';
61     $pageheading = '';
62     $mform = null;
63     $pagecontent = null;
65     switch ($action) {
66         /**
67          * Unenrols a user from this course
68          */
69         case 'unenrol':
70             $ue = $DB->get_record('user_enrolments', array('id'=>required_param('ue', PARAM_INT)), '*', MUST_EXIST);
71             list ($instance, $plugin) = $manager->get_user_enrolment_components($ue);
72             if ($instance && $plugin && $plugin->allow_unenrol($instance) && has_capability("enrol/$instance->enrol:unenrol", $manager->get_context())) {
73                 if ($confirm && $manager->unenrol_user($ue)) {
74                     redirect($pageurl);
75                 } else {
76                     $user = $DB->get_record('user', array('id'=>$ue->userid), '*', MUST_EXIST);
77                     $yesurl = new moodle_url($pageurl, array('action'=>'unenrol', 'ue'=>$ue->id, 'confirm'=>1, 'sesskey'=>sesskey()));
78                     $message = get_string('unenrolconfirm', 'enrol', array('user'=>fullname($user, true), 'course'=>format_string($course->fullname)));
79                     $pagetitle = get_string('unenrol', 'enrol');
80                     $pagecontent = $OUTPUT->confirm($message, $yesurl, $pageurl);
81                 }
82                 $actiontaken = true;
83             }
84             break;
85         /**
86          * Removes a role from the user with this course
87          */
88         case 'unassign':
89             if (has_capability('moodle/role:assign', $manager->get_context())) {
90                 $role = required_param('role', PARAM_INT);
91                 $user = required_param('user', PARAM_INT);
92                 if ($confirm && $manager->unassign_role_from_user($user, $role)) {
93                     redirect($pageurl);
94                 } else {
95                     $user = $DB->get_record('user', array('id'=>$user), '*', MUST_EXIST);
96                     $allroles = $manager->get_all_roles();
97                     $role = $allroles[$role];
98                     $yesurl = new moodle_url($pageurl, array('action'=>'unassign', 'role'=>$role->id, 'user'=>$user->id, 'confirm'=>1, 'sesskey'=>sesskey()));
99                     $message = get_string('unassignconfirm', 'role', array('user'=>fullname($user, true), 'role'=>$role->localname));
100                     $pagetitle = get_string('unassignarole', 'role', $role->localname);
101                     $pagecontent = $OUTPUT->confirm($message, $yesurl, $pageurl);
102                 }
103                 $actiontaken = true;
104             }
105             break;
106         /**
107          * Assigns a new role to a user enrolled within this course.
108          * A user must be enrolled in the course in order for this script to action
109          */
110         case 'assign':
111             $user = $DB->get_record('user', array('id'=>required_param('user', PARAM_INT)), '*', MUST_EXIST);
112             if (is_enrolled($context, $user) && has_capability('moodle/role:assign', $manager->get_context())) {
113                 $mform = new enrol_users_assign_form(NULL, array('user'=>$user, 'course'=>$course, 'assignable'=>$manager->get_assignable_roles()));
114                 $mform->set_data($pageurl->params());
115                 $data = $mform->get_data();
116                 if ($mform->is_cancelled() || ($data && array_key_exists($data->roleid, $manager->get_assignable_roles()) && $manager->assign_role_to_user($data->roleid, $user->id))) {
117                     redirect($pageurl);
118                 } else {
119                     $pagetitle = get_string('assignroles', 'role');
120                 }
121                 $actiontaken = true;
122             }
123             break;
124         /**
125          * Removes the user from the given group
126          */
127         case 'removemember':
128             if (has_capability('moodle/course:managegroups', $manager->get_context())) {
129                 $groupid = required_param('group', PARAM_INT);
130                 $userid  = required_param('user', PARAM_INT);
131                 $user = $DB->get_record('user', array('id'=>$userid), '*', MUST_EXIST);
132                 if ($confirm && $manager->remove_user_from_group($user, $groupid)) {
133                     redirect($pageurl);
134                 } else {
135                     $group = $manager->get_group($groupid);
136                     if (!$group) {
137                         break;
138                     }
139                     $yesurl = new moodle_url($pageurl, array('action'=>'removemember', 'group'=>$groupid, 'user'=>$userid, 'confirm'=>1, 'sesskey'=>sesskey()));
140                     $message = get_string('removefromgroupconfirm', 'group', array('user'=>fullname($user, true), 'group'=>$group->name));
141                     $pagetitle = get_string('removefromgroup', 'group', $group->name);
142                     $pagecontent = $OUTPUT->confirm($message, $yesurl, $pageurl);
143                 }
144                 $actiontaken = true;
145             }
146             break;
147         /**
148          * Makes the user a member of a given group
149          */
150         case 'addmember':
151             if (has_capability('moodle/course:managegroups', $manager->get_context())) {
152                 $userid = required_param('user', PARAM_INT);
153                 $user = $DB->get_record('user', array('id'=>$userid), '*', MUST_EXIST);
155                 $mform = new enrol_users_addmember_form(NULL, array('user'=>$user, 'course'=>$course, 'allgroups'=>$manager->get_all_groups()));
156                 $mform->set_data($pageurl->params());
157                 $data = $mform->get_data();
158                 if ($mform->is_cancelled() || ($data && $manager->add_user_to_group($user, $data->groupid))) {
159                     redirect($pageurl);
160                 } else {
161                     $pagetitle = get_string('addgroup', 'group');
162                 }
163                 $actiontaken = true;
164             }
165             break;
166         /**
167          * Edits the details of a users enrolment in the course
168          */
169         case 'edit':
170             $ue = $DB->get_record('user_enrolments', array('id'=>required_param('ue', PARAM_INT)), '*', MUST_EXIST);
171             list($instance, $plugin) = $manager->get_user_enrolment_components($ue);
172             if ($instance && $plugin && $plugin->allow_manage($instance) && has_capability("enrol/$instance->enrol:manage", $manager->get_context())) {
173                 $user = $DB->get_record('user', array('id'=>$ue->userid), '*', MUST_EXIST);
174                 $mform = new enrol_users_edit_form(NULL, array('user'=>$user, 'course'=>$course, 'ue'=>$ue));
175                 $mform->set_data($pageurl->params());
176                 $data = $mform->get_data();
177                 if ($mform->is_cancelled() || ($data && $manager->edit_enrolment($ue, $data))) {
178                     redirect($pageurl);
179                 } else {
180                     $pagetitle = fullname($user);
181                 }
182                 $actiontaken = true;
183             }
184             break;
185     }
187     // If we took an action display we need to display something special.
188     if ($actiontaken) {
189         if (empty($pageheading)) {
190             $pageheading = $pagetitle;
191         }
192         $PAGE->set_title($pagetitle);
193         $PAGE->set_heading($pageheading);
194         echo $OUTPUT->header();
195         echo $OUTPUT->heading(fullname($user));
196         if (!is_null($mform)) {
197             $mform->display();
198         } else {
199             echo $pagecontent;
200         }
201         echo $OUTPUT->footer();
202         exit;
203     }
207 $renderer = $PAGE->get_renderer('core_enrol');
208 $fields = array(
209     'userdetails' => array (
210         'picture' => false,
211         'firstname' => get_string('firstname'),
212         'lastname' => get_string('lastname'),
213         'email' => get_string('email')
214     ),
215     'lastseen' => get_string('lastaccess'),
216     'role' => get_string('roles', 'role'),
217     'group' => get_string('groups', 'group'),
218     'enrol' => get_string('enrolmentinstances', 'enrol')
219 );
220 $table->set_fields($fields, $renderer);
222 $canassign = has_capability('moodle/role:assign', $manager->get_context());
223 $users = $manager->get_users_for_display($renderer, $pageurl, $table->sort, $table->sortdirection, $table->page, $table->perpage);
224 foreach ($users as $userid=>&$user) {
225     $user['picture'] = $OUTPUT->render($user['picture']);
226     $user['role'] = $renderer->user_roles_and_actions($userid, $user['roles'], $manager->get_assignable_roles(), $canassign, $pageurl);
227     $user['group'] = $renderer->user_groups_and_actions($userid, $user['groups'], $manager->get_all_groups(), has_capability('moodle/course:managegroups', $manager->get_context()), $pageurl);
228     $user['enrol'] = $renderer->user_enrolments_and_actions($userid, $user['enrolments'], $pageurl);
230 $table->set_total_users($manager->get_total_users());
231 $table->set_users($users);
233 $PAGE->set_title($PAGE->course->fullname.': '.get_string('totalenrolledusers', 'enrol', $manager->get_total_users()));
234 $PAGE->set_heading($PAGE->title);
236 echo $OUTPUT->header();
237 echo $OUTPUT->heading(get_string('enrolledusers', 'enrol'));
238 echo $renderer->render($table);
239 echo $OUTPUT->footer();