MDL-33293 use time() instead of counter for theme and JS revisions
authorPetr Skoda <commits@skodak.org>
Wed, 23 May 2012 09:11:13 +0000 (11:11 +0200)
committerPetr Skoda <commits@skodak.org>
Wed, 23 May 2012 09:11:13 +0000 (11:11 +0200)
This should help on sites that reset database, reinstall or switch databases.

lib/outputlib.php
lib/outputrequirementslib.php

index 7cd7abe..dfe8796 100644 (file)
@@ -37,16 +37,24 @@ require_once($CFG->libdir.'/outputrequirementslib.php');
 /**
  * Invalidate all server and client side caches.
  *
- * This method deletes the phsyical directory that is used to cache the theme
+ * This method deletes the physical directory that is used to cache the theme
  * files used for serving.
- * Because it deletes the main theme cache directoy all themes are reset by
+ * Because it deletes the main theme cache directory all themes are reset by
  * this function.
  */
 function theme_reset_all_caches() {
     global $CFG;
     require_once("$CFG->libdir/filelib.php");
 
-    set_config('themerev', empty($CFG->themerev) ? 1 : $CFG->themerev+1);
+    $next = time();
+    if (isset($CFG->themerev) and $next <= $CFG->themerev and $CFG->themerev - $next < 60*60) {
+        // This resolves problems when reset is requested repeatedly within 1s,
+        // the < 1h condition prevents accidental switching to future dates
+        // because we might not recover from it.
+        $next = $CFG->themerev+1;
+    }
+
+    set_config('themerev', $next); // time is unique even when you reset/switch database
     fulldelete("$CFG->cachedir/theme");
 }
 
index bdf3b81..aa8755e 100644 (file)
@@ -1264,6 +1264,14 @@ function js_reset_all_caches() {
     global $CFG;
     require_once("$CFG->libdir/filelib.php");
 
-    set_config('jsrev', empty($CFG->jsrev) ? 1 : $CFG->jsrev+1);
+    $next = time();
+    if (isset($CFG->jsrev) and $next <= $CFG->jsrev and $CFG->jsrev - $next < 60*60) {
+        // This resolves problems when reset is requested repeatedly within 1s,
+        // the < 1h condition prevents accidental switching to future dates
+        // because we might not recover from it.
+        $next = $CFG->jsrev+1;
+    }
+
+    set_config('jsrev', $next);
     fulldelete("$CFG->cachedir/js");
 }