MDL-41042 coursecat: better handle changes in coursecontact
authorMarina Glancy <marina@moodle.com>
Fri, 14 Aug 2015 04:27:26 +0000 (12:27 +0800)
committerMarina Glancy <marina@moodle.com>
Wed, 7 Oct 2015 02:15:19 +0000 (10:15 +0800)
lib/adminlib.php
lib/coursecatlib.php
lib/db/caches.php

index debcc5f..e3a5847 100644 (file)
@@ -4922,6 +4922,8 @@ class admin_setting_special_coursecontact extends admin_setting_pickroles {
         parent::__construct('coursecontact', get_string('coursecontact', 'admin'),
             get_string('coursecontact_desc', 'admin'),
             array('editingteacher'));
+        $this->set_updatedcallback(create_function('',
+                "cache::make('core', 'coursecontacts')->purge();"));
     }
 }
 
index ee93258..69f3b8c 100644 (file)
@@ -708,16 +708,7 @@ class coursecat implements renderable, cacheable_object, IteratorAggregate {
         }
         $managerroles = explode(',', $CFG->coursecontact);
         $cache = cache::make('core', 'coursecontacts');
-        $cacheddata = $cache->get_many(array_merge(array('basic'), array_keys($courses)));
-        // Check if cache was set for the current course contacts and it is not yet expired.
-        if (empty($cacheddata['basic']) || $cacheddata['basic']['roles'] !== $CFG->coursecontact ||
-                $cacheddata['basic']['lastreset'] < time() - self::CACHE_COURSE_CONTACTS_TTL) {
-            // Reset cache.
-            $keys = $DB->get_fieldset_select('course', 'id', '');
-            $cache->delete_many($keys);
-            $cache->set('basic', array('roles' => $CFG->coursecontact, 'lastreset' => time()));
-            $cacheddata = $cache->get_many(array_merge(array('basic'), array_keys($courses)));
-        }
+        $cacheddata = $cache->get_many(array_keys($courses));
         $courseids = array();
         foreach (array_keys($courses) as $id) {
             if ($cacheddata[$id] !== false) {
index 89406de..7d90e55 100644 (file)
@@ -189,6 +189,7 @@ $definitions = array(
         'mode' => cache_store::MODE_APPLICATION,
         'staticacceleration' => true,
         'simplekeys' => true,
+        'ttl' => 3600,
     ),
     // Used to store data for repositories to avoid repetitive DB queries within one request.
     'repositories' => array(