Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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
}