Differences Between: [Versions 310 and 403]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * This file is responsible for serving the one huge CSS of each theme. 19 * 20 * @package core 21 * @copyright 2009 Petr Skoda (skodak) {@link http://skodak.org} 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 26 // disable moodle specific debug messages and any errors in output, 27 // comment out when debugging or better look into error log! 28 define('NO_DEBUG_DISPLAY', true); 29 30 // we need just the values from config.php and minlib.php 31 define('ABORT_AFTER_CONFIG', true); 32 require('../config.php'); // this stops immediately at the beginning of lib/setup.php 33 require_once("$CFG->dirroot/lib/jslib.php"); 34 35 if ($slashargument = min_get_slash_argument()) { 36 $slashargument = ltrim($slashargument, '/'); 37 if (substr_count($slashargument, '/') < 2) { 38 header('HTTP/1.0 404 not found'); 39 die('Slash argument must contain both a revision and a file path'); 40 } 41 // image must be last because it may contain "/" 42 list($themename, $rev, $type) = explode('/', $slashargument, 3); 43 $themename = min_clean_param($themename, 'SAFEDIR'); 44 $rev = min_clean_param($rev, 'INT'); 45 $type = min_clean_param($type, 'SAFEDIR'); 46 47 } else { 48 $themename = min_optional_param('theme', 'standard', 'SAFEDIR'); 49 $rev = min_optional_param('rev', -1, 'INT'); 50 $type = min_optional_param('type', 'head', 'RAW'); 51 } 52 53 if (!min_is_revision_valid_and_current($rev)) { 54 // If the rev is invalid, normalise it to -1 to disable all caching. 55 $rev = -1; 56 } 57 58 if ($type !== 'head' and $type !== 'footer') { 59 header('HTTP/1.0 404 not found'); 60 die('Theme was not found, sorry.'); 61 } 62 63 if (file_exists("$CFG->dirroot/theme/$themename/config.php")) { 64 // exists 65 } else if (!empty($CFG->themedir) and file_exists("$CFG->themedir/$themename/config.php")) { 66 // exists 67 } else { 68 header('HTTP/1.0 404 not found'); 69 die('Theme was not found, sorry.'); 70 } 71 72 $candidate = "$CFG->localcachedir/theme/$rev/$themename/javascript_$type.js"; 73 $etag = sha1("$rev/$themename/$type"); 74 75 if ($rev > 0 and file_exists($candidate)) { 76 if (!empty($_SERVER['HTTP_IF_NONE_MATCH']) || !empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { 77 // we do not actually need to verify the etag value because our files 78 // never change in cache because we increment the rev parameter 79 js_send_unmodified(filemtime($candidate), $etag); 80 } 81 js_send_cached($candidate, $etag); 82 } 83 84 //================================================================================= 85 // ok, now we need to start normal moodle script, we need to load all libs and $DB 86 define('ABORT_AFTER_CONFIG_CANCEL', true); 87 88 define('NO_MOODLE_COOKIES', true); // Session not used here 89 define('NO_UPGRADE_CHECK', true); // Ignore upgrade check 90 91 require("$CFG->dirroot/lib/setup.php"); 92 93 $theme = theme_config::load($themename); 94 $themerev = theme_get_revision(); 95 96 if ($themerev <= 0 or $rev != $themerev) { 97 // Do not send caching headers if they do not request current revision, 98 // we do not want to pollute browser caches with outdated JS. 99 js_send_uncached($theme->javascript_content($type)); 100 } 101 102 make_localcache_directory('theme', false); 103 104 js_write_cache_file_content($candidate, core_minify::js_files($theme->javascript_files($type))); 105 // Verify nothing failed in cache file creation. 106 clearstatcache(); 107 if (file_exists($candidate)) { 108 js_send_cached($candidate, $etag); 109 } 110 111 js_send_uncached($theme->javascript_content($type));
title
Description
Body
title
Description
Body
title
Description
Body
title
Body