MDL-59148 core: save css file totemp directory
authorSimey Lameze <simey@moodle.com>
Tue, 13 Jun 2017 02:36:27 +0000 (10:36 +0800)
committerDavid Monllao <david.monllao@gmail.com>
Wed, 28 Jun 2017 16:24:49 +0000 (18:24 +0200)
Save a copy of the css file on the temp directory
to be used as a fallback when waiting for a theme to be compiled
and is not versioned in any way.

theme/styles.php

index 36daa03..85be315 100644 (file)
@@ -97,27 +97,32 @@ if (file_exists("$CFG->dirroot/theme/$themename/config.php")) {
 
 $candidatedir = "$CFG->localcachedir/theme/$rev/$themename/css";
 $etag = "$rev/$themename/$type/$themesubrev";
-$candidatename = ($themesubrev > 0) ? "{$type}_{$themesubrev}" : $type;
+$candidatesheet = "{$candidatedir}/{$type}";
+if ($themesubrev > 0) {
+    $candidatesheet .= "_{$themesubrev}";
+}
 if (!$usesvg) {
     // Add to the sheet name, one day we'll be able to just drop this.
-    $candidatedir .= '/nosvg';
+    $candidatesheet .= "-nosvg";
     $etag .= '/nosvg';
 }
 
 if ($chunk !== null) {
-    $etag .= '/chunk'.$chunk;
-    $candidatename .= '.'.$chunk;
+    $etag .= "/chunk{$chunk}";
+    $chunkedcandidatesheet = "{$candidatesheet}.{$chunk}.css";
+    $candidatesheet = "{$candidatesheet}.css";
+} else {
+    $candidatesheet = $chunkedcandidatesheet = "{$candidatesheet}.css";
 }
-$candidatesheet = "$candidatedir/$candidatename.css";
 $etag = sha1($etag);
 
-if (file_exists($candidatesheet)) {
+if (file_exists($chunkedcandidatesheet)) {
     if (!empty($_SERVER['HTTP_IF_NONE_MATCH']) || !empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
         // We do not actually need to verify the etag value because our files
         // never change in cache because we increment the rev counter.
-        css_send_unmodified(filemtime($candidatesheet), $etag);
+        css_send_unmodified(filemtime($chunkedcandidatesheet), $etag);
     }
-    css_send_cached_css($candidatesheet, $etag);
+    css_send_cached_css($chunkedcandidatesheet, $etag);
 }
 
 // Ok, now we need to start normal moodle script, we need to load all libs and $DB.
@@ -146,18 +151,23 @@ if ($themerev <= 0 or $themerev != $rev or $themesubrev != $currentthemesubrev)
 
     $candidatedir = "$CFG->localcachedir/theme/$rev/$themename/css";
     $etag = "$rev/$themename/$type/$themesubrev";
-    $candidatename = ($themesubrev > 0) ? "{$type}_{$themesubrev}" : $type;
+    $candidatesheet = "{$candidatedir}/{$type}";
+    if ($themesubrev > 0) {
+        $candidatesheet .= "_{$themesubrev}";
+    }
     if (!$usesvg) {
         // Add to the sheet name, one day we'll be able to just drop this.
-        $candidatedir .= '/nosvg';
+        $candidatesheet .= "-nosvg";
         $etag .= '/nosvg';
     }
 
     if ($chunk !== null) {
-        $etag .= '/chunk'.$chunk;
-        $candidatename .= '.'.$chunk;
+        $etag .= "/chunk{$chunk}";
+        $chunkedcandidatesheet = "{$candidatesheet}.{$chunk}.css";
+        $candidatesheet = "{$candidatesheet}.css";
+    } else {
+        $candidatesheet = $chunkedcandidatesheet = "{$candidatesheet}.css";
     }
-    $candidatesheet = "$candidatedir/$candidatename.css";
     $etag = sha1($etag);
 }
 
@@ -165,7 +175,7 @@ make_localcache_directory('theme', false);
 
 if ($type === 'editor') {
     $csscontent = $theme->get_css_content_editor();
-    css_store_css($theme, "$candidatedir/editor.css", $csscontent, false);
+    css_store_css($theme, $candidatesheet, $csscontent, false);
 
 } else {
     // Fetch a lock whilst the CSS is fetched as this can be slow and CPU intensive.
@@ -173,16 +183,16 @@ if ($type === 'editor') {
     $lockfactory = \core\lock\lock_config::get_lock_factory('core_theme_get_css_content');
     $lock = $lockfactory->get_lock($themename, rand(90, 120));
 
-    if (file_exists($candidatesheet)) {
+    if (file_exists($chunkedcandidatesheet)) {
         // The file was built while we waited for the lock, we release the lock and serve the file.
         if ($lock) {
             $lock->release();
         }
 
         if ($cache) {
-            css_send_cached_css($candidatesheet, $etag);
+            css_send_cached_css($chunkedcandidatesheet, $etag);
         } else {
-            css_send_uncached_css(file_get_contents($candidatesheet));
+            css_send_uncached_css(file_get_contents($chunkedcandidatesheet));
         }
     }
 
@@ -207,8 +217,7 @@ if ($type === 'editor') {
             $chunkurl = "{$relroot}/theme/styles.php?theme={$themename}&rev={$rev}&type=$type&svg=0";
         }
     }
-
-    css_store_css($theme, "$candidatedir/$candidatename.css", $csscontent, true, $chunkurl);
+    css_store_css($theme, $candidatesheet, $csscontent, true, $chunkurl);
 
     if ($lock) {
         // Now that the CSS has been generated and/or stored, release the lock.
@@ -222,9 +231,9 @@ if (!$cache) {
     // let's ignore legacy IE breakage here too.
     css_send_uncached_css($csscontent);
 
-} else if ($chunk !== null and file_exists($candidatesheet)) {
+} else if ($chunk !== null and file_exists($chunkedcandidatesheet)) {
     // Greetings stupid legacy IEs!
-    css_send_cached_css($candidatesheet, $etag);
+    css_send_cached_css($chunkedcandidatesheet, $etag);
 
 } else {
     // Real browsers - this is the expected result!