unset($method['delete']);
unset($method['disable']);
- if (!empty($instance) && $todelete) {
+ if ($todelete) {
// Remove the enrolment method.
- foreach ($instances as $instance) {
- if ($instance->enrol == $enrolmethod) {
- $plugin = $enrolmentplugins[$instance->enrol];
-
- // Ensure user is able to delete the instance.
- if ($plugin->can_delete_instance($instance)) {
- $plugin->delete_instance($instance);
- } else {
- $this->error('errorcannotdeleteenrolment',
- new lang_string('errorcannotdeleteenrolment', 'tool_uploadcourse',
- $plugin->get_instance_name($instance)));
- }
+ if ($instance) {
+ $plugin = $enrolmentplugins[$instance->enrol];
- break;
- }
- }
- } else if (!empty($instance) && $todisable) {
- // Disable the enrolment.
- foreach ($instances as $instance) {
- if ($instance->enrol == $enrolmethod) {
- $plugin = $enrolmentplugins[$instance->enrol];
-
- // Ensure user is able to toggle instance status.
- if ($plugin->can_hide_show_instance($instance)) {
- $plugin->update_status($instance, ENROL_INSTANCE_DISABLED);
- } else {
- $this->error('errorcannotdisableenrolment',
- new lang_string('errorcannotdisableenrolment', 'tool_uploadcourse',
- $plugin->get_instance_name($instance)));
- }
-
- break;
+ // Ensure user is able to delete the instance.
+ if ($plugin->can_delete_instance($instance)) {
+ $plugin->delete_instance($instance);
+ } else {
+ $this->error('errorcannotdeleteenrolment',
+ new lang_string('errorcannotdeleteenrolment', 'tool_uploadcourse',
+ $plugin->get_instance_name($instance)));
}
}
} else {
// Create/update enrolment.
$plugin = $enrolmentplugins[$enrolmethod];
- // Ensure user is able to create/update instance.
+ $status = ($todisable) ? ENROL_INSTANCE_DISABLED : ENROL_INSTANCE_ENABLED;
+
+ // Create a new instance if necessary.
if (empty($instance) && $plugin->can_add_instance($course->id)) {
- $instance = new stdClass();
- $instance->id = $plugin->add_default_instance($course);
+ $instanceid = $plugin->add_default_instance($course);
+ $instance = $DB->get_record('enrol', ['id' => $instanceid]);
$instance->roleid = $plugin->get_config('roleid');
- $instance->status = ENROL_INSTANCE_ENABLED;
- } else if (!empty($instance) && $plugin->can_edit_instance($instance)) {
- $plugin->update_status($instance, ENROL_INSTANCE_ENABLED);
- } else {
+ // On creation the user can decide the status.
+ $plugin->update_status($instance, $status);
+ }
+
+ // Check if the we need to update the instance status.
+ if ($instance && $status != $instance->status) {
+ if ($plugin->can_hide_show_instance($instance)) {
+ $plugin->update_status($instance, $status);
+ } else {
+ $this->error('errorcannotdisableenrolment',
+ new lang_string('errorcannotdisableenrolment', 'tool_uploadcourse',
+ $plugin->get_instance_name($instance)));
+ break;
+ }
+ }
+
+ if (empty($instance) || !$plugin->can_edit_instance($instance)) {
$this->error('errorcannotcreateorupdateenrolment',
new lang_string('errorcannotcreateorupdateenrolment', 'tool_uploadcourse',
$plugin->get_instance_name($instance)));