Merge branch 'MDL-40471_master' of https://github.com/totara/openbadges
[moodle.git] / enrol / meta / lib.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  * Meta course enrolment plugin.
19  *
20  * @package    enrol_meta
21  * @copyright  2010 Petr Skoda {@link http://skodak.org}
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 /**
28  * Meta course enrolment plugin.
29  * @author Petr Skoda
30  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
31  */
32 class enrol_meta_plugin extends enrol_plugin {
34     /**
35      * Returns localised name of enrol instance
36      *
37      * @param stdClass $instance (null is accepted too)
38      * @return string
39      */
40     public function get_instance_name($instance) {
41         global $DB;
43         if (empty($instance)) {
44             $enrol = $this->get_name();
45             return get_string('pluginname', 'enrol_'.$enrol);
46         } else if (empty($instance->name)) {
47             $enrol = $this->get_name();
48             $course = $DB->get_record('course', array('id'=>$instance->customint1));
49             $coursename = format_string(get_course_display_name_for_list($course));
50             return get_string('pluginname', 'enrol_' . $enrol) . ' (' . $coursename . ')';
51         } else {
52             return format_string($instance->name);
53         }
54     }
56     /**
57      * Returns link to page which may be used to add new instance of enrolment plugin in course.
58      * @param int $courseid
59      * @return moodle_url page url
60      */
61     public function get_newinstance_link($courseid) {
62         $context = context_course::instance($courseid, MUST_EXIST);
63         if (!has_capability('moodle/course:enrolconfig', $context) or !has_capability('enrol/meta:config', $context)) {
64             return NULL;
65         }
66         // multiple instances supported - multiple parent courses linked
67         return new moodle_url('/enrol/meta/addinstance.php', array('id'=>$courseid));
68     }
70     /**
71      * Does this plugin allow manual unenrolment of a specific user?
72      * Yes, but only if user suspended...
73      *
74      * @param stdClass $instance course enrol instance
75      * @param stdClass $ue record from user_enrolments table
76      *
77      * @return bool - true means user with 'enrol/xxx:unenrol' may unenrol this user, false means nobody may touch this user enrolment
78      */
79     public function allow_unenrol_user(stdClass $instance, stdClass $ue) {
80         if ($ue->status == ENROL_USER_SUSPENDED) {
81             return true;
82         }
84         return false;
85     }
87     /**
88      * Gets an array of the user enrolment actions
89      *
90      * @param course_enrolment_manager $manager
91      * @param stdClass $ue A user enrolment object
92      * @return array An array of user_enrolment_actions
93      */
94     public function get_user_enrolment_actions(course_enrolment_manager $manager, $ue) {
95         $actions = array();
96         $context = $manager->get_context();
97         $instance = $ue->enrolmentinstance;
98         $params = $manager->get_moodlepage()->url->params();
99         $params['ue'] = $ue->id;
100         if ($this->allow_unenrol_user($instance, $ue) && has_capability('enrol/meta:unenrol', $context)) {
101             $url = new moodle_url('/enrol/unenroluser.php', $params);
102             $actions[] = new user_enrolment_action(new pix_icon('t/delete', ''), get_string('unenrol', 'enrol'), $url, array('class'=>'unenrollink', 'rel'=>$ue->id));
103         }
104         return $actions;
105     }
107     /**
108      * Called after updating/inserting course.
109      *
110      * @param bool $inserted true if course just inserted
111      * @param stdClass $course
112      * @param stdClass $data form data
113      * @return void
114      */
115     public function course_updated($inserted, $course, $data) {
116         global $CFG;
118         if (!$inserted) {
119             // sync cohort enrols
120             require_once("$CFG->dirroot/enrol/meta/locallib.php");
121             enrol_meta_sync($course->id);
122         } else {
123             // cohorts are never inserted automatically
124         }
125     }
127     /**
128      * Update instance status
129      *
130      * @param stdClass $instance
131      * @param int $newstatus ENROL_INSTANCE_ENABLED, ENROL_INSTANCE_DISABLED
132      * @return void
133      */
134     public function update_status($instance, $newstatus) {
135         global $CFG;
137         parent::update_status($instance, $newstatus);
139         require_once("$CFG->dirroot/enrol/meta/locallib.php");
140         enrol_meta_sync($instance->courseid);
141     }
143     /**
144      * Called for all enabled enrol plugins that returned true from is_cron_required().
145      * @return void
146      */
147     public function cron() {
148         global $CFG;
150         require_once("$CFG->dirroot/enrol/meta/locallib.php");
151         enrol_meta_sync();
152     }