header('Content-type: text/css; charset=' . LANG_CHARSET); if (IS_installed === false) { if (file_exists(S9Y_INCLUDE_PATH . 'templates/' . $serendipity['defaultTemplate'] . '/' . $css_file)) { echo serendipity_printStylesheet('templates/' . $serendipity['defaultTemplate'] . '/' . $css_file, 'templates/' . $serendipity['defaultTemplate'] . '/' . $css_file); } die; } // Use output buffering to capture all output. This is necessary // because a plugin might call 'echo' directly instead of adding // the desired output to the hook parameter '$out'. ob_start(); // First all of our fallback classes, so they can be overridden by the usual template. $out = serendipity_printStylesheet(serendipity_getTemplateFile('style_fallback.css', 'serendipityPath'), serendipity_getTemplateFile('style_fallback.css', '')); $out .= serendipity_printStylesheet(serendipity_getTemplateFile($css_file, 'serendipityPath'), serendipity_getTemplateFile($css_file, '')); serendipity_plugin_api::hook_event($css_hook, $out); $out .= serendipity_printStylesheet(serendipity_getTemplateFile($css_userfile, 'serendipityPath', true), serendipity_getTemplateFile($css_userfile, '', true)); echo $out; // // Fetch output buffer containing the CSS output and create eTag header // $ob_buffer = ob_get_contents(); if ($ob_buffer) { // Calculate hash for eTag and get request header. The hash value // changes with every modification to any part of the CSS styles. // This includes the installation of a plugin that adds plugin // specific styles. // Send ETag header using the hash value of the CSS code $hashValue = md5($ob_buffer); @header('ETag: "' . $hashValue . '"'); // Compare value of If-None-Match header (if available) to hash value if (!empty($_SERVER['HTTP_IF_NONE_MATCH'])) {
break; case 'serendipity_admin.css': $css_hook = 'css_backend'; $css_file = 'admin/style.css'; break; } function serendipity_printStylesheet($file, $dir = '') { global $serendipity; return "/* {$dir} */\n" . str_replace(array('{TEMPLATE_PATH}', '{LANG_DIRECTION}'), array(dirname($dir) . '/', LANG_DIRECTION), @file_get_contents($file, 1)); } if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { header('Cache-Control: no-cache'); } else { header('Cache-Control:'); header('Pragma:'); header('Expires: ' . gmdate('D, d M Y H:i:s \\G\\M\\T', time() + 3600)); } header('Content-type: text/css; charset=' . LANG_CHARSET); if (IS_installed === false) { if (file_exists(S9Y_INCLUDE_PATH . 'templates/' . $serendipity['defaultTemplate'] . '/' . $css_file)) { echo serendipity_printStylesheet('templates/' . $serendipity['defaultTemplate'] . '/' . $css_file, 'templates/' . $serendipity['defaultTemplate'] . '/' . $css_file); } die; } // First all of our fallback classes, so they can be overridden by the usual template. $out = serendipity_printStylesheet(serendipity_getTemplateFile('style_fallback.css', 'serendipityPath'), serendipity_getTemplateFile('style_fallback.css', '')); $out .= serendipity_printStylesheet(serendipity_getTemplateFile($css_file, 'serendipityPath'), serendipity_getTemplateFile($css_file, '')); serendipity_plugin_api::hook_event($css_hook, $out); echo $out; /* vim: set sts=4 ts=4 expandtab : */