From af7177dbcb09ca93f72fd3f059b43d85d7464b6e Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Sun, 18 Dec 2011 17:02:16 +0100 Subject: [PATCH] MDL-30789 add new update_status() method to enrol plugins and improve enrol cache invalidation --- enrol/instances.php | 15 ++++++--------- lib/enrollib.php | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/enrol/instances.php b/enrol/instances.php index fe5e74b48a7..3f8b2dbccdd 100644 --- a/enrol/instances.php +++ b/enrol/instances.php @@ -98,7 +98,6 @@ if ($canconfig and $action and confirm_sesskey()) { if ($confirm) { $plugin->delete_instance($instance); - $context->mark_dirty(); // invalidate all enrol caches redirect($PAGE->url); } @@ -113,19 +112,17 @@ if ($canconfig and $action and confirm_sesskey()) { } else if ($action === 'disable') { $instance = $instances[$instanceid]; - if ($instance->status == ENROL_INSTANCE_ENABLED) { - $instance->status = ENROL_INSTANCE_DISABLED; - $DB->update_record('enrol', $instance); - $context->mark_dirty(); // invalidate all enrol caches + $plugin = $plugins[$instance->enrol]; + if ($instance->status != ENROL_INSTANCE_DISABLED) { + $plugin->update_status($instance, ENROL_INSTANCE_DISABLED); redirect($PAGE->url); } } else if ($action === 'enable') { $instance = $instances[$instanceid]; - if ($instance->status == ENROL_INSTANCE_DISABLED) { - $instance->status = ENROL_INSTANCE_ENABLED; - $DB->update_record('enrol', $instance); - $context->mark_dirty(); // invalidate all enrol caches + $plugin = $plugins[$instance->enrol]; + if ($instance->status != ENROL_INSTANCE_ENABLED) { + $plugin->update_status($instance, ENROL_INSTANCE_ENABLED); redirect($PAGE->url); } } diff --git a/lib/enrollib.php b/lib/enrollib.php index 53c80100925..515a4c7ade8 100644 --- a/lib/enrollib.php +++ b/lib/enrollib.php @@ -1553,6 +1553,26 @@ abstract class enrol_plugin { return null; } + /** + * Update instance status + * + * Override when plugin needs to do some action when enabled or disabled. + * + * @param stdClass $instance + * @param int $newstatus ENROL_INSTANCE_ENABLED, ENROL_INSTANCE_DISABLED + * @return void + */ + public function update_status($instance, $newstatus) { + global $DB; + + $instance->status = $newstatus; + $DB->update_record('enrol', $instance); + + // invalidate all enrol caches + $context = context_course::instance($instance->courseid); + $context->mark_dirty(); + } + /** * Delete course enrol plugin instance, unenrol all users. * @param object $instance @@ -1579,6 +1599,10 @@ abstract class enrol_plugin { // finally drop the enrol row $DB->delete_records('enrol', array('id'=>$instance->id)); + + // invalidate all enrol caches + $context = context_course::instance($instance->courseid); + $context->mark_dirty(); } /**