Пример #1
0
 public function test_js_files()
 {
     global $CFG;
     $testfile1 = "{$CFG->tempdir}/test1.js";
     $testfile2 = "{$CFG->tempdir}/test2.js";
     $testfile3 = "{$CFG->tempdir}/test3.js";
     $js1 = "\nfunction hm()\n{\n}\n";
     $js2 = "function oh(){}";
     file_put_contents($testfile1, $js1);
     file_put_contents($testfile2, $js2);
     $files = array($testfile1, $testfile2);
     $this->assertSame("function hm(){};\nfunction oh(){}", core_minify::js_files($files));
     $files = array($testfile1, $testfile2, $testfile3);
     $this->assertStringStartsWith("function hm(){};\nfunction oh(){};\n\n\n// Cannot read JS file ", @core_minify::js_files($files));
     unlink($testfile1);
     unlink($testfile2);
 }
Пример #2
0
/**
 * Minify JavaScript files.
 *
 * @deprecated since 2.6
 *
 * @param array $files
 * @return string
 */
function js_minify($files)
{
    debugging('js_minify() is deprecated, use core_minify::js_files() or core_minify::js() instead.');
    return core_minify::js_files($files);
}
Пример #3
0
 /**
  * Allow setting of the config function described in {@see set_config_function} from a file.
  * The contents of this file are then passed to set_config_function.
  *
  * When jsrev is positive, the function is minified and stored in a MUC cache for subsequent uses.
  *
  * @param $file The path to the JavaScript function used for YUI configuration.
  * @return String the name of the function to use in the group pattern configuration.
  */
 public function set_config_source($file)
 {
     global $CFG;
     $cache = cache::make('core', 'yuimodules');
     // Attempt to get the metadata from the cache.
     $keyname = 'configfn_' . $file;
     $fullpath = $CFG->dirroot . '/' . $file;
     if (!isset($CFG->jsrev) || $CFG->jsrev == -1) {
         $cache->delete($keyname);
         $configfn = file_get_contents($fullpath);
     } else {
         $configfn = $cache->get($keyname);
         if ($configfn === false) {
             require_once $CFG->libdir . '/jslib.php';
             $configfn = core_minify::js_files(array($fullpath));
             $cache->set($keyname, $configfn);
         }
     }
     return $this->set_config_function($configfn);
 }
Пример #4
0
if ($rev > 0 and file_exists($candidate)) {
    if (!empty($_SERVER['HTTP_IF_NONE_MATCH']) || !empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
        // we do not actually need to verify the etag value because our files
        // never change in cache because we increment the rev parameter
        js_send_unmodified(filemtime($candidate), $etag);
    }
    js_send_cached($candidate, $etag);
}
//=================================================================================
// ok, now we need to start normal moodle script, we need to load all libs and $DB
define('ABORT_AFTER_CONFIG_CANCEL', true);
define('NO_MOODLE_COOKIES', true);
// Session not used here
define('NO_UPGRADE_CHECK', true);
// Ignore upgrade check
require "{$CFG->dirroot}/lib/setup.php";
$theme = theme_config::load($themename);
$themerev = theme_get_revision();
if ($themerev <= 0 or $rev != $themerev) {
    // Do not send caching headers if they do not request current revision,
    // we do not want to pollute browser caches with outdated JS.
    js_send_uncached($theme->javascript_content($type));
}
make_localcache_directory('theme', false);
js_write_cache_file_content($candidate, core_minify::js_files($theme->javascript_files($type)));
// Verify nothing failed in cache file creation.
clearstatcache();
if (file_exists($candidate)) {
    js_send_cached($candidate, $etag);
}
js_send_uncached($theme->javascript_content($type));
Пример #5
0
    // If-Modified-Since requests so there is no need to handle them specially.
    header('Expires: ' . date('r', time() + 365 * 24 * 3600));
    header('Cache-Control: max-age=' . 365 * 24 * 3600);
    // Pragma is set to no-cache by default so must be overridden.
    header('Pragma:');
}
// Get the right MIME type.
$mimetype = mimeinfo('type', $file);
// For JS files, these can be minified and stored in cache.
if ($mimetype === 'application/x-javascript' && $allowcache) {
    // The cached file is stored without version number etc. This is okay
    // because $CFG->cachedir is cleared each time there is a plugin update,
    // such as a new version of a tinymce plugin.
    // Flatten filename and include cache location.
    $cache = $CFG->cachedir . '/editor_tinymce/pluginjs';
    $cachefile = $cache . '/' . $tinymceplugin . str_replace('/', '_', $innerpath);
    // If it doesn't exist, minify it and save to that location.
    if (!file_exists($cachefile)) {
        $content = core_minify::js_files(array($file));
        js_write_cache_file_content($cachefile, $content);
    }
    $file = $cachefile;
} else {
    if ($mimetype === 'text/html') {
        header('X-UA-Compatible: IE=edge');
    }
}
// Serve file.
header('Content-Length: ' . filesize($file));
header('Content-Type: ' . $mimetype);
readfile($file);
Пример #6
0
    $jsfiles[] = $jsfile;
}
if (!$jsfiles) {
    // bad luck - no valid files
    die;
}
$etag = sha1($rev . implode(',', $jsfiles));
// Use the caching only for meaningful revision numbers which prevents future cache poisoning.
if ($rev > 0 and $rev < time() + 60 * 60) {
    $candidate = $CFG->localcachedir . '/js/' . $etag;
    if (file_exists($candidate)) {
        if (!empty($_SERVER['HTTP_IF_NONE_MATCH']) || !empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
            // we do not actually need to verify the etag value because our files
            // never change in cache because we increment the rev parameter
            js_send_unmodified(filemtime($candidate), $etag);
        }
        js_send_cached($candidate, $etag);
    } else {
        js_write_cache_file_content($candidate, core_minify::js_files($jsfiles));
        // verify nothing failed in cache file creation
        clearstatcache();
        if (file_exists($candidate)) {
            js_send_cached($candidate, $etag);
        }
    }
}
$content = '';
foreach ($jsfiles as $jsfile) {
    $content .= file_get_contents($jsfile) . "\n";
}
js_send_uncached($content, $etag);