Differences Between: [Versions 310 and 403] [Versions 311 and 403] [Versions 39 and 403] [Versions 400 and 403] [Versions 401 and 403] [Versions 402 and 403]
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/>. 16 17 /** 18 * Main course enrolment management UI. 19 * 20 * @package core_enrol 21 * @copyright 2010 Petr Skoda {@link http://skodak.org} 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 require('../config.php'); 26 27 $id = required_param('id', PARAM_INT); // course id 28 $action = optional_param('action', '', PARAM_ALPHANUMEXT); 29 $instanceid = optional_param('instance', 0, PARAM_INT); 30 $confirm = optional_param('confirm', 0, PARAM_BOOL); 31 $confirm2 = optional_param('confirm2', 0, PARAM_BOOL); 32 33 $course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST); 34 $context = context_course::instance($course->id, MUST_EXIST); 35 36 if ($course->id == SITEID) { 37 redirect("$CFG->wwwroot/"); 38 } 39 40 require_login($course); 41 require_capability('moodle/course:enrolreview', $context); 42 43 $canconfig = has_capability('moodle/course:enrolconfig', $context); 44 45 $PAGE->set_url('/enrol/instances.php', array('id'=>$course->id)); 46 $PAGE->set_pagelayout('admin'); 47 $PAGE->set_title(get_string('enrolmentinstances', 'enrol')); 48 $PAGE->set_heading($course->fullname); 49 50 $instances = enrol_get_instances($course->id, false); 51 $plugins = enrol_get_plugins(false); 52 53 if ($canconfig and $action and confirm_sesskey()) { 54 if (isset($instances[$instanceid]) and isset($plugins[$instances[$instanceid]->enrol])) { 55 if ($action === 'up') { 56 $order = array_keys($instances); 57 $order = array_flip($order); 58 $pos = $order[$instanceid]; 59 if ($pos > 0) { 60 $switch = $pos - 1; 61 $resorted = array_values($instances); 62 $temp = $resorted[$pos]; 63 $resorted[$pos] = $resorted[$switch]; 64 $resorted[$switch] = $temp; 65 // now update db sortorder 66 foreach ($resorted as $sortorder=>$instance) { 67 if ($instance->sortorder != $sortorder) { 68 $instance->sortorder = $sortorder; 69 $DB->update_record('enrol', $instance); 70 } 71 } 72 } 73 redirect($PAGE->url); 74 75 } else if ($action === 'down') { 76 $order = array_keys($instances); 77 $order = array_flip($order); 78 $pos = $order[$instanceid]; 79 if ($pos < count($instances) - 1) { 80 $switch = $pos + 1; 81 $resorted = array_values($instances); 82 $temp = $resorted[$pos]; 83 $resorted[$pos] = $resorted[$switch]; 84 $resorted[$switch] = $temp; 85 // now update db sortorder 86 foreach ($resorted as $sortorder=>$instance) { 87 if ($instance->sortorder != $sortorder) { 88 $instance->sortorder = $sortorder; 89 $DB->update_record('enrol', $instance); 90 } 91 } 92 } 93 redirect($PAGE->url); 94 95 } else if ($action === 'delete') { 96 97 $instance = $instances[$instanceid]; 98 $plugin = $plugins[$instance->enrol]; 99 100 if ($plugin->can_delete_instance($instance)) { 101 if ($confirm) { 102 if (enrol_accessing_via_instance($instance)) { 103 if (!$confirm2) { 104 $yesurl = new moodle_url('/enrol/instances.php', 105 array('id' => $course->id, 106 'action' => 'delete', 107 'instance' => $instance->id, 108 'confirm' => 1, 109 'confirm2' => 1, 110 'sesskey' => sesskey())); 111 $displayname = $plugin->get_instance_name($instance); 112 $message = markdown_to_html(get_string('deleteinstanceconfirmself', 113 'enrol', 114 array('name' => $displayname))); 115 echo $OUTPUT->header(); 116 echo $OUTPUT->confirm($message, $yesurl, $PAGE->url); 117 echo $OUTPUT->footer(); 118 die(); 119 } 120 } 121 // Update communication for instance and given action. 122 if (core_communication\api::is_available() && $instance->enrol !== 'guest') { 123 $plugin->update_communication($instance->id, 'remove', $course->id); 124 } 125 $plugin->delete_instance($instance); 126 redirect($PAGE->url); 127 } 128 129 echo $OUTPUT->header(); 130 $yesurl = new moodle_url('/enrol/instances.php', 131 array('id' => $course->id, 132 'action' => 'delete', 133 'instance' => $instance->id, 134 'confirm' => 1, 135 'sesskey' => sesskey())); 136 $displayname = $plugin->get_instance_name($instance); 137 $users = $DB->count_records('user_enrolments', array('enrolid' => $instance->id)); 138 if ($users) { 139 $message = markdown_to_html(get_string('deleteinstanceconfirm', 'enrol', 140 array('name' => $displayname, 141 'users' => $users))); 142 } else { 143 $message = markdown_to_html(get_string('deleteinstancenousersconfirm', 'enrol', 144 array('name' => $displayname))); 145 } 146 echo $OUTPUT->confirm($message, $yesurl, $PAGE->url); 147 echo $OUTPUT->footer(); 148 die(); 149 } 150 151 } else if ($action === 'disable') { 152 153 $instance = $instances[$instanceid]; 154 $plugin = $plugins[$instance->enrol]; 155 if ($plugin->can_hide_show_instance($instance)) { 156 if ($instance->status != ENROL_INSTANCE_DISABLED) { 157 if (enrol_accessing_via_instance($instance)) { 158 if (!$confirm2) { 159 $yesurl = new moodle_url('/enrol/instances.php', 160 array('id' => $course->id, 161 'action' => 'disable', 162 'instance' => $instance->id, 163 'confirm2' => 1, 164 'sesskey' => sesskey())); 165 $displayname = $plugin->get_instance_name($instance); 166 $message = markdown_to_html(get_string('disableinstanceconfirmself', 167 'enrol', 168 array('name' => $displayname))); 169 echo $OUTPUT->header(); 170 echo $OUTPUT->confirm($message, $yesurl, $PAGE->url); 171 echo $OUTPUT->footer(); 172 die(); 173 } 174 } 175 // Update communication for instance and given action. 176 if (core_communication\api::is_available() && $instance->enrol !== 'guest') { 177 $plugin->update_communication($instance->id, 'remove', $course->id); 178 } 179 $plugin->update_status($instance, ENROL_INSTANCE_DISABLED); 180 redirect($PAGE->url); 181 } 182 } 183 184 } else if ($action === 'enable') { 185 186 $instance = $instances[$instanceid]; 187 $plugin = $plugins[$instance->enrol]; 188 if ($plugin->can_hide_show_instance($instance)) { 189 if ($instance->status != ENROL_INSTANCE_ENABLED) { 190 // Update communication for instance and given action. 191 if (core_communication\api::is_available() && $instance->enrol !== 'guest') { 192 $plugin->update_communication($instance->id, 'add', $course->id); 193 } 194 $plugin->update_status($instance, ENROL_INSTANCE_ENABLED); 195 redirect($PAGE->url); 196 } 197 } 198 } 199 } 200 } 201 202 203 echo $OUTPUT->header(); 204 echo $OUTPUT->render_participants_tertiary_nav($course); 205 206 echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthnormal'); 207 208 // display strings 209 $strup = get_string('up'); 210 $strdown = get_string('down'); 211 $strdelete = get_string('delete'); 212 $strenable = get_string('enable'); 213 $strdisable = get_string('disable'); 214 $strmanage = get_string('manageinstance', 'enrol'); 215 216 $table = new html_table(); 217 $table->head = array(get_string('name'), get_string('users'), $strup.'/'.$strdown, get_string('edit')); 218 $table->align = array('left', 'center', 'center', 'center'); 219 $table->width = '100%'; 220 $table->data = array(); 221 222 // iterate through enrol plugins and add to the display table 223 $updowncount = 1; 224 $icount = count($instances); 225 $url = new moodle_url('/enrol/instances.php', array('sesskey'=>sesskey(), 'id'=>$course->id)); 226 foreach ($instances as $instance) { 227 if (!isset($plugins[$instance->enrol])) { 228 continue; 229 } 230 $plugin = $plugins[$instance->enrol]; 231 232 $displayname = $plugin->get_instance_name($instance); 233 if (!enrol_is_enabled($instance->enrol) or $instance->status != ENROL_INSTANCE_ENABLED) { 234 $displayname = html_writer::tag('span', $displayname, array('class'=>'dimmed_text')); 235 } 236 237 $users = $DB->count_records('user_enrolments', array('enrolid'=>$instance->id)); 238 239 $updown = array(); 240 $edit = array(); 241 242 if ($canconfig) { 243 if ($updowncount > 1) { 244 $aurl = new moodle_url($url, array('action'=>'up', 'instance'=>$instance->id)); 245 $updown[] = $OUTPUT->action_icon($aurl, new pix_icon('t/up', $strup, 'core', array('class' => 'iconsmall'))); 246 } else { 247 $updown[] = $OUTPUT->spacer(); 248 } 249 if ($updowncount < $icount) { 250 $aurl = new moodle_url($url, array('action'=>'down', 'instance'=>$instance->id)); 251 $updown[] = $OUTPUT->action_icon($aurl, new pix_icon('t/down', $strdown, 'core', array('class' => 'iconsmall'))); 252 } else { 253 $updown[] = $OUTPUT->spacer(); 254 } 255 ++$updowncount; 256 257 if ($plugin->can_delete_instance($instance)) { 258 $aurl = new moodle_url($url, array('action'=>'delete', 'instance'=>$instance->id)); 259 $edit[] = $OUTPUT->action_icon($aurl, new pix_icon('t/delete', $strdelete, 'core', array('class' => 'iconsmall'))); 260 } 261 262 if (enrol_is_enabled($instance->enrol) && $plugin->can_hide_show_instance($instance)) { 263 if ($instance->status == ENROL_INSTANCE_ENABLED) { 264 $aurl = new moodle_url($url, array('action'=>'disable', 'instance'=>$instance->id)); 265 $edit[] = $OUTPUT->action_icon($aurl, new pix_icon('t/hide', $strdisable, 'core', array('class' => 'iconsmall'))); 266 } else if ($instance->status == ENROL_INSTANCE_DISABLED) { 267 $aurl = new moodle_url($url, array('action'=>'enable', 'instance'=>$instance->id)); 268 $edit[] = $OUTPUT->action_icon($aurl, new pix_icon('t/show', $strenable, 'core', array('class' => 'iconsmall'))); 269 } else { 270 // plugin specific state - do not mess with it! 271 $edit[] = $OUTPUT->pix_icon('t/show', get_string('show')); 272 } 273 274 } 275 } 276 277 // link to instance management 278 if (enrol_is_enabled($instance->enrol) && $canconfig) { 279 if ($icons = $plugin->get_action_icons($instance)) { 280 $edit = array_merge($edit, $icons); 281 } 282 } 283 284 // Add a row to the table. 285 $table->data[] = array($displayname, $users, implode('', $updown), implode('', $edit)); 286 287 } 288 echo html_writer::table($table); 289 290 // access security is in each plugin 291 $candidates = array(); 292 foreach (enrol_get_plugins(true) as $name=>$plugin) { 293 if ($plugin->use_standard_editing_ui()) { 294 if ($plugin->can_add_instance($course->id)) { 295 // Standard add/edit UI. 296 $params = array('type' => $name, 'courseid' => $course->id); 297 $url = new moodle_url('/enrol/editinstance.php', $params); 298 $link = $url->out(false); 299 $candidates[$link] = get_string('pluginname', 'enrol_'.$name); 300 } 301 } else if ($url = $plugin->get_newinstance_link($course->id)) { 302 // Old custom UI. 303 $link = $url->out(false); 304 $candidates[$link] = get_string('pluginname', 'enrol_'.$name); 305 } 306 } 307 308 if ($candidates) { 309 $select = new url_select($candidates); 310 $select->set_label(get_string('addinstance', 'enrol')); 311 echo $OUTPUT->render($select); 312 } 313 314 echo $OUTPUT->box_end(); 315 316 echo $OUTPUT->footer();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body