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 * MNet enrolment plugin 19 * 20 * @package enrol_mnet 21 * @copyright 2010 David Mudrak <david@moodle.com> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 defined('MOODLE_INTERNAL') || die(); 26 27 /** 28 * MNet enrolment plugin implementation for Moodle 2.x enrolment framework 29 */ 30 class enrol_mnet_plugin extends enrol_plugin { 31 32 /** 33 * Returns localised name of enrol instance 34 * 35 * @param object|null $instance enrol_mnet instance 36 * @return string 37 */ 38 public function get_instance_name($instance) { 39 global $DB; 40 41 if (empty($instance)) { 42 $enrol = $this->get_name(); 43 return get_string('pluginname', 'enrol_'.$enrol); 44 45 } else if (empty($instance->name)) { 46 $enrol = $this->get_name(); 47 if ($role = $DB->get_record('role', array('id'=>$instance->roleid))) { 48 $role = role_get_name($role, context_course::instance($instance->courseid, IGNORE_MISSING)); 49 } else { 50 $role = get_string('error'); 51 } 52 if (empty($instance->customint1)) { 53 $host = get_string('remotesubscribersall', 'enrol_mnet'); 54 } else { 55 $host = $DB->get_field('mnet_host', 'name', array('id'=>$instance->customint1)); 56 } 57 return get_string('pluginname', 'enrol_'.$enrol) . ' (' . format_string($host) . ' - ' . $role .')'; 58 59 } else { 60 return format_string($instance->name); 61 } 62 } 63 64 /** 65 * Returns true if a new instance can be added to this course. 66 * 67 * The link is returned only if there are some MNet peers that we publish enrolment service to. 68 * 69 * @param int $courseid id of the course to add the instance to 70 * @return boolean 71 */ 72 public function can_add_instance($courseid) { 73 global $CFG, $DB; 74 require_once($CFG->dirroot.'/mnet/service/enrol/locallib.php'); 75 76 $service = mnetservice_enrol::get_instance(); 77 if (!$service->is_available()) { 78 return false; 79 } 80 $coursecontext = context_course::instance($courseid); 81 if (!has_capability('moodle/course:enrolconfig', $coursecontext)) { 82 return false; 83 } 84 $subscribers = $service->get_remote_subscribers(); 85 if (empty($subscribers)) { 86 return false; 87 } 88 89 return true; 90 } 91 92 /** 93 * Is it possible to delete enrol instance via standard UI? 94 * 95 * @param stdClass $instance 96 * @return bool 97 */ 98 public function can_delete_instance($instance) { 99 $context = context_course::instance($instance->courseid); 100 return has_capability('enrol/mnet:config', $context); 101 } 102 103 /** 104 * Is it possible to hide/show enrol instance via standard UI? 105 * 106 * @param stdClass $instance 107 * @return bool 108 */ 109 public function can_hide_show_instance($instance) { 110 $context = context_course::instance($instance->courseid); 111 return has_capability('enrol/mnet:config', $context); 112 } 113 114 /** 115 * Return an array of valid options for the hosts property. 116 * 117 * @return array 118 */ 119 protected function get_valid_hosts_options() { 120 global $CFG; 121 require_once($CFG->dirroot.'/mnet/service/enrol/locallib.php'); 122 123 $service = mnetservice_enrol::get_instance(); 124 125 $subscribers = $service->get_remote_subscribers(); 126 $hosts = array(0 => get_string('remotesubscribersall', 'enrol_mnet')); 127 foreach ($subscribers as $hostid => $subscriber) { 128 $hosts[$hostid] = $subscriber->appname.': '.$subscriber->hostname.' ('.$subscriber->hosturl.')'; 129 } 130 return $hosts; 131 } 132 133 /** 134 * Return an array of valid options for the roles property. 135 * 136 * @param context $context 137 * @return array 138 */ 139 protected function get_valid_roles_options($context) { 140 $roles = get_assignable_roles($context); 141 return $roles; 142 } 143 144 /** 145 * Add elements to the edit instance form. 146 * 147 * @param stdClass $instance 148 * @param MoodleQuickForm $mform 149 * @param context $context 150 * @return bool 151 */ 152 public function edit_instance_form($instance, MoodleQuickForm $mform, $context) { 153 global $CFG; 154 155 $hosts = $this->get_valid_hosts_options(); 156 $mform->addElement('select', 'customint1', get_string('remotesubscriber', 'enrol_mnet'), $hosts); 157 $mform->addHelpButton('customint1', 'remotesubscriber', 'enrol_mnet'); 158 $mform->addRule('customint1', get_string('required'), 'required', null, 'client'); 159 160 $roles = $this->get_valid_roles_options($context); 161 $mform->addElement('select', 'roleid', get_string('roleforremoteusers', 'enrol_mnet'), $roles); 162 $mform->addHelpButton('roleid', 'roleforremoteusers', 'enrol_mnet'); 163 $mform->addRule('roleid', get_string('required'), 'required', null, 'client'); 164 $mform->setDefault('roleid', $this->get_config('roleid')); 165 166 $mform->addElement('text', 'name', get_string('instancename', 'enrol_mnet')); 167 $mform->addHelpButton('name', 'instancename', 'enrol_mnet'); 168 $mform->setType('name', PARAM_TEXT); 169 } 170 171 /** 172 * We are a good plugin and don't invent our own UI/validation code path. 173 * 174 * @return boolean 175 */ 176 public function use_standard_editing_ui() { 177 return true; 178 } 179 180 /** 181 * Perform custom validation of the data used to edit the instance. 182 * 183 * @param array $data array of ("fieldname"=>value) of submitted data 184 * @param array $files array of uploaded files "element_name"=>tmp_file_path 185 * @param object $instance The instance loaded from the DB 186 * @param context $context The context of the instance we are editing 187 * @return array of "element_name"=>"error_description" if there are errors, 188 * or an empty array if everything is OK. 189 * @return void 190 */ 191 public function edit_instance_validation($data, $files, $instance, $context) { 192 global $DB; 193 $errors = array(); 194 195 $validroles = array_keys($this->get_valid_roles_options($context)); 196 $validhosts = array_keys($this->get_valid_hosts_options()); 197 198 $params = array('enrol' => 'mnet', 'courseid' => $instance->courseid, 'customint1' => $data['customint1']); 199 if ($DB->record_exists('enrol', $params)) { 200 $errors['customint1'] = get_string('error_multiplehost', 'enrol_mnet'); 201 } 202 203 $tovalidate = array( 204 'customint1' => $validhosts, 205 'roleid' => $validroles, 206 'name' => PARAM_TEXT 207 ); 208 $typeerrors = $this->validate_param_types($data, $tovalidate); 209 $errors = array_merge($errors, $typeerrors); 210 211 return $errors; 212 } 213 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body