MDL-24322 grrr, fixing my previous commit, sorry Eloy
[moodle.git] / enrol / manual / lib.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
18 /**
19  * Manual enrolment plugin main library file.
20  *
21  * @package    enrol
22  * @subpackage manual
23  * @copyright  2010 Petr Skoda {@link http://skodak.org}
24  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25  */
27 defined('MOODLE_INTERNAL') || die();
29 class enrol_manual_plugin extends enrol_plugin {
31     public function roles_protected() {
32         // users may tweak the roles later
33         return false;
34     }
36     public function allow_enrol(stdClass $instance) {
37         // users with enrol cap may unenrol other users manually manually
38         return true;
39     }
41     public function allow_unenrol(stdClass $instance) {
42         // users with unenrol cap may unenrol other users manually manually
43         return true;
44     }
46     public function allow_manage(stdClass $instance) {
47         // users with manage cap may tweak period and status
48         return true;
49     }
51     /**
52      * Returns link to manual enrol UI if exists.
53      * Does the access control tests automatically.
54      *
55      * @param object $instance
56      * @return moodle_url
57      */
58     public function get_manual_enrol_link($instance) {
59         $name = $this->get_name();
60         if ($instance->enrol !== $name) {
61             throw new coding_exception('invalid enrol instance!');
62         }
64         if (!enrol_is_enabled($name)) {
65             return NULL;
66         }
68         $context = get_context_instance(CONTEXT_COURSE, $instance->courseid, MUST_EXIST);
70         if (!has_capability('enrol/manual:manage', $context) or !has_capability('enrol/manual:enrol', $context) or !has_capability('enrol/manual:unenrol', $context)) {
71             return NULL;
72         }
74         return new moodle_url('/enrol/manual/manage.php', array('enrolid'=>$instance->id, 'id'=>$instance->courseid));
75     }
77     /**
78      * Returns enrolment instance manage link.
79      *
80      * By defaults looks for manage.php file and tests for manage capability.
81      *
82      * @param object $instance
83      * @return moodle_url;
84      */
85     public function add_course_navigation($instancesnode, stdClass $instance) {
86         if ($instance->enrol !== 'manual') {
87              throw new coding_exception('Invalid enrol instance type!');
88         }
90         $context = get_context_instance(CONTEXT_COURSE, $instance->courseid);
91         if (has_capability('enrol/manual:config', $context)) {
92             $managelink = new moodle_url('/enrol/manual/edit.php', array('courseid'=>$instance->courseid));
93             $instancesnode->add($this->get_instance_name($instance), $managelink, navigation_node::TYPE_SETTING);
94         }
95     }
97     /**
98      * Returns edit icons for the page with list of instances
99      * @param stdClass $instance
100      * @return array
101      */
102     public function get_action_icons(stdClass $instance) {
103         global $OUTPUT;
105         if ($instance->enrol !== 'manual') {
106             throw new coding_exception('invalid enrol instance!');
107         }
108         $context = get_context_instance(CONTEXT_COURSE, $instance->courseid);
110         $icons = array();
112         if (has_capability('enrol/manual:manage', $context)) {
113             $managelink = new moodle_url("/enrol/manual/manage.php", array('enrolid'=>$instance->id));
114             $icons[] = $OUTPUT->action_icon($managelink, new pix_icon('i/users', get_string('enrolusers', 'enrol_manual'), 'core', array('class'=>'iconsmall')));
115         }
116         if (has_capability('enrol/manual:config', $context)) {
117             $editlink = new moodle_url("/enrol/manual/edit.php", array('courseid'=>$instance->courseid));
118             $icons[] = $OUTPUT->action_icon($editlink, new pix_icon('i/edit', get_string('edit'), 'core', array('class'=>'icon')));
119         }
121         return $icons;
122     }
124     /**
125      * Returns link to page which may be used to add new instance of enrolment plugin in course.
126      * @param int $courseid
127      * @return moodle_url page url
128      */
129     public function get_newinstance_link($courseid) {
130         global $DB;
132         $context = get_context_instance(CONTEXT_COURSE, $courseid, MUST_EXIST);
134         if (!has_capability('moodle/course:enrolconfig', $context) or !has_capability('enrol/manual:config', $context)) {
135             return NULL;
136         }
138         if ($DB->record_exists('enrol', array('courseid'=>$courseid, 'enrol'=>'manual'))) {
139             return NULL;
140         }
142         return new moodle_url('/enrol/manual/edit.php', array('courseid'=>$courseid));
143     }
145     /**
146      * Add new instance of enrol plugin with default settings.
147      * @param object $course
148      * @return int id of new instance, null if can not be created
149      */
150     public function add_default_instance($course) {
151         $fields = array('status'=>$this->get_config('status'), 'enrolperiod'=>$this->get_config('enrolperiod', 0), 'roleid'=>$this->get_config('roleid', 0));
152         return $this->add_instance($course, $fields);
153     }
155     /**
156      * Add new instance of enrol plugin.
157      * @param object $course
158      * @param array instance fields
159      * @return int id of new instance, null if can not be created
160      */
161     public function add_instance($course, array $fields = NULL) {
162         global $DB;
164         if ($DB->record_exists('enrol', array('courseid'=>$course->id, 'enrol'=>'manual'))) {
165             // only one instance allowed, sorry
166             return NULL;
167         }
169         return parent::add_instance($course, $fields);
170     }