MDL-30789 add new update_status() method to enrol plugins and improve enrol cache...
authorPetr Skoda <commits@skodak.org>
Sun, 18 Dec 2011 16:02:16 +0000 (17:02 +0100)
committerPetr Skoda <commits@skodak.org>
Sun, 18 Dec 2011 16:30:17 +0000 (17:30 +0100)
enrol/instances.php
lib/enrollib.php

index fe5e74b..3f8b2db 100644 (file)
@@ -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);
             }
         }
index 53c8010..515a4c7 100644 (file)
@@ -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();
     }
 
     /**