. /** * This file is responsible for serving the CSS of each theme. * * It should not be linked to directly. Instead, it gets included by * theme/themename/styles.php. See theme/standard/styles.php as an example. * * In this script, we are serving the styles for theme $themename, but we are * serving them on behalf of theme $fortheme. * * To understand this, image that the currently selected theme is standardwhite. * This theme uses both its own stylesheets, and also the ones from the standard theme. * So, when we are serving theme/standard/styles.php, we need to use the config in * theme/standardwhite/config.php to control the settings. This is controled by the * for=... parameter in the URL. * * In case you are wondering, in the above scenario, we have to serve the standard * theme CSS with a URL like theme/standard/styles.php, so that relative links from * the CSS to images in the theme folder will work. * * @package moodlecore * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ if (empty($themename)) { die('Direct access to this script is forbidden.'); // This script should only be required by theme/themename/styles.php. } // These may already be defined if we got here via style_sheet_setup in lib/deprecatedlib.php if (!defined('NO_MOODLE_COOKIES')) { define('NO_MOODLE_COOKIES', true); // Session not used here } if (!defined('NO_UPGRADE_CHECK')) { define('NO_UPGRADE_CHECK', true); // Ignore upgrade check } require_once(dirname(__FILE__) . '/../config.php'); $fortheme = required_param('for', PARAM_FILE); $pluginsheets = optional_param('pluginsheets', '', PARAM_BOOL); $CACHE_LIFETIME = 1800; // Cache stylesheets for half an hour. $DEFAULT_SHEET_LIST = array('styles_layout', 'styles_fonts', 'styles_color'); // Fix for IE6 caching - we don't want the filemtime('styles.php'), instead use now. $lastmodified = time(); // Set the correct content type. (Should we also be specifying charset here?) header('Content-type: text/css'); if (!debugging('', DEBUG_DEVELOPER)) { // Do not send caching headers for developer. (This makes it easy to edit themes. // You don't have to keep clearing the browser cache.) header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $lastmodified) . ' GMT'); header('Expires: ' . gmdate("D, d M Y H:i:s", $lastmodified + $CACHE_LIFETIME) . ' GMT'); header('Cache-Control: max-age=' . $lifetime); header('Pragma: '); } if (!empty($showdeprecatedstylesheetsetupwarning)) { echo <<force_theme($fortheme); // We will build up a list of CSS file path names, then concatenate them all. $files = array(); // If this theme wants plugin sheets, include them. Do this first, so styles // here can be overridden by theme CSS. if ($pluginsheets) { foreach ($THEME->pluginsheets as $plugintype) { $files += get_sheets_for_plugin_type($plugintype); } } // Now work out which stylesheets we shold be serving from this theme. if ($themename == $fortheme) { $themesheets = $THEME->sheets; } else if (!empty($THEME->parent) && $themename == $THEME->parent) { if ($THEME->parentsheets === true) { // Use all the sheets we have. $themesheets = $DEFAULT_SHEET_LIST; } else if (!empty($THEME->parentsheets)) { $themesheets = $THEME->parentsheets; } else { $themesheets = array(); } } else if ($themename == 'standard') { if ($THEME->standardsheets === true) { // Use all the sheets we have. $themesheets = $DEFAULT_SHEET_LIST; } else if (!empty($THEME->standardsheets)) { $themesheets = $THEME->standardsheets; } else { $themesheets = array(); } } // Conver the theme stylessheet names to file names. foreach ($themesheets as $sheet) { $files[] = $CFG->themedir . '/' . $themename . '/' . $sheet . '.css'; } if (empty($files)) { echo " The $fortheme theme does not require anything from the $themename theme. */\n\n"; exit; } // Output a commen with a summary of the included files. echo <<dirroot . '/', $CFG->themedir . '/'); foreach ($files as $file) { echo ' * ' . str_replace($toreplace, '', $file) . "\n"; } echo " */\n\n"; if (!empty($THEME->cssoutputfunction)) { call_user_func($THEME->cssoutputfunction, $files, $toreplace); } else { foreach ($files as $file) { $shortname = str_replace($toreplace, '', $file); echo '/******* ' . $shortname . " start *******/\n\n"; @include_once($file); echo '/******* ' . $shortname . " end *******/\n\n"; } } function get_sheets_for_plugin_type($type) { $files = array(); $mods = get_plugin_list($type); foreach ($mods as $moddir) { $file = $moddir . '/styles.php'; if (file_exists($file)) { $files[] = $file; } } return $files; }