diff --git a/lang/en/cache.php b/lang/en/cache.php index e811f039859..6226dd0469c 100644 --- a/lang/en/cache.php +++ b/lang/en/cache.php @@ -60,6 +60,7 @@ $string['cachedef_navigation_expandcourse'] = 'Navigation expandable courses'; $string['cachedef_observers'] = 'Event observers'; $string['cachedef_plugin_functions'] = 'Plugins available callbacks'; $string['cachedef_plugin_manager'] = 'Plugin info manager'; +$string['cachedef_postprocessedcss'] = 'Post processed CSS'; $string['cachedef_tagindexbuilder'] = 'Search results for tagged items'; $string['cachedef_questiondata'] = 'Question definitions'; $string['cachedef_repositories'] = 'Repositories instances data'; diff --git a/lib/db/caches.php b/lib/db/caches.php index 42d98d42aab..8e18971cc05 100644 --- a/lib/db/caches.php +++ b/lib/db/caches.php @@ -328,4 +328,11 @@ $definitions = array( 'staticaccelerationsize' => 1 ), + // Caches processed CSS. + 'postprocessedcss' => array( + 'mode' => cache_store::MODE_APPLICATION, + 'simplekeys' => true, + 'simpledata' => true, + 'staticacceleration' => false, + ), ); diff --git a/lib/outputlib.php b/lib/outputlib.php index 5fe61d348db..34b54e617b9 100644 --- a/lib/outputlib.php +++ b/lib/outputlib.php @@ -60,6 +60,9 @@ function theme_reset_all_caches() { $cache->purge(); } + // Purge compiled post processed css. + cache::make('core', 'postprocessedcss')->purge(); + if ($PAGE) { $PAGE->reload_theme(); } @@ -907,6 +910,44 @@ class theme_config { return $csscontent; } + /** + * Set post processed CSS content cache. + * + * @param string $csscontent The post processed CSS content. + * @return bool True if the content was successfully cached. + */ + public function set_css_content_cache($csscontent) { + + $cache = cache::make('core', 'postprocessedcss'); + $key = $this->get_css_cache_key(); + + return $cache->set($key, $csscontent); + } + + /** + * Return cached post processed CSS content. + * + * @return bool|string The cached css content or false if not found. + */ + public function get_css_cached_content() { + + $key = $this->get_css_cache_key(); + $cache = cache::make('core', 'postprocessedcss'); + + return $cache->get($key); + } + + /** + * Generate the css content cache key. + * + * @return string The post processed css cache key. + */ + public function get_css_cache_key() { + $nosvg = (!$this->use_svg_icons()) ? 'nosvg_' : ''; + $rtlmode = ($this->rtlmode == true) ? 'rtl' : 'ltr'; + + return $nosvg . $this->name . '_' . $rtlmode; + } /** * Get the theme designer css markup, diff --git a/theme/styles.php b/theme/styles.php index 2fe8ec10876..9d7a39c6e9d 100644 --- a/theme/styles.php +++ b/theme/styles.php @@ -168,7 +168,10 @@ if ($type === 'editor') { } // Older IEs require smaller chunks. - $csscontent = $theme->get_css_content(); + if (!$csscontent = $theme->get_css_cached_content()) { + $csscontent = $theme->get_css_content(); + $theme->set_css_content_cache($csscontent); + } $relroot = preg_replace('|^http.?://[^/]+|', '', $CFG->wwwroot); if (!empty($slashargument)) { diff --git a/version.php b/version.php index e90db3493dd..597192ca5a9 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2017060800.00; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2017060800.01; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes.