$csscontent = $theme->get_css_content_editor(); css_send_uncached_css($csscontent); } $chunkurl = new moodle_url($CFG->httpswwwroot . '/theme/styles_debug.php', array('theme' => $themename, 'type' => $type, 'subtype' => $subtype, 'sheet' => $sheet, 'usesvg' => $usesvg)); // We need some kind of caching here because otherwise the page navigation becomes // way too slow in theme designer mode. Feel free to create full cache definition later... $key = "{$type} {$subtype} {$sheet} {$usesvg}"; $cache = cache::make_from_params(cache_store::MODE_APPLICATION, 'core', 'themedesigner', array('theme' => $themename)); if ($content = $cache->get($key)) { if ($content['created'] > time() - THEME_DESIGNER_CACHE_LIFETIME) { $csscontent = $content['data']; // We need to chunk the content. if ($chunk !== null) { $chunks = css_chunk_by_selector_count($csscontent, $chunkurl->out(false)); $csscontent = $chunk === 0 ? end($chunks) : $chunks[$chunk - 1]; } css_send_uncached_css($csscontent); } } $csscontent = $theme->get_css_content_debug($type, $subtype, $sheet); $cache->set($key, array('data' => $csscontent, 'created' => time())); // We need to chunk the content. if ($chunk !== null) { // The chunks are ordered so that the last chunk is the one containing the @import, and so // the first one to be included. All the other chunks are set in the array before that one. // See {@link css_chunk_by_selector_count()} for more details. $chunks = css_chunk_by_selector_count($csscontent, $chunkurl->out(false)); $csscontent = $chunk === 0 ? end($chunks) : $chunks[$chunk - 1]; } css_send_uncached_css($csscontent);
// making them slightly evil. foreach (array_keys($css['parents']) as $sheet) { $sendcss[] = "@import url(styles_debug.php?theme=$themename&type=$type&subtype=$subtype&sheet=$sheet);"; } } else { // Build up the CSS for that parent so we can serve it as one file. foreach ($css[$subtype][$sheet] as $parent=>$css) { $sendcss[] = $css; } } css_send_uncached_css($sendcss); } else if ($subtype === 'theme') { css_send_uncached_css($css['theme']); } } else if ($type === 'plugin') { if (isset($css['plugins'][$subtype])) { css_send_uncached_css($css['plugins'][$subtype]); } } else if ($type === 'parent') { if (isset($css['parents'][$subtype][$sheet])) { css_send_uncached_css($css['parents'][$subtype][$sheet]); } } else if ($type === 'theme') { if (isset($css['theme'][$sheet])) { css_send_uncached_css($css['theme'][$sheet]); } } css_send_css_not_found();
foreach ($css as $key => $value) { foreach ($value as $val) { if (is_array($val)) { foreach ($val as $k => $v) { $cssfiles[] = $v; } } else { $cssfiles[] = $val; } } } css_store_css($theme, "{$candidatedir}/all.css", $cssfiles, true, $chunkurl); } // verify nothing failed in cache file creation clearstatcache(); if (!file_exists($candidatesheet)) { // We need to send at least something, IE does not get it chunked properly but who cares. $css = ''; foreach ($cssfiles as $file) { $css .= file_get_contents($file) . "\n"; } css_send_uncached_css($css, false); } else { if (!$cache) { // Do not pollute browser caches if invalid revision requested. css_send_uncached_css(file_get_contents($candidatesheet), false); } else { // This is the expected result! css_send_cached_css($candidatesheet, $etag); } }