parent
3ce77a35e5
commit
bf22ed7bdb
@ -1,64 +0,0 @@ |
||||
<?php |
||||
|
||||
abstract class OC_Minimizer { |
||||
public function generateETag($files) { |
||||
$fullpath_files = array(); |
||||
foreach($files as $file_info) { |
||||
$fullpath_files[] = $file_info[0] . '/' . $file_info[2]; |
||||
} |
||||
return OC_Cache::generateCacheKeyFromFiles($fullpath_files); |
||||
} |
||||
|
||||
abstract public function minimizeFiles($files); |
||||
|
||||
public function output($files, $cache_key) { |
||||
header('Content-Type: '.$this->contentType); |
||||
OC_Response::enableCaching(); |
||||
$etag = $this->generateETag($files); |
||||
$cache_key .= '-'.$etag; |
||||
|
||||
$gzout = false; |
||||
$cache = OC_Cache::getGlobalCache(); |
||||
if (!OC_Request::isNoCache() && (!defined('DEBUG') || !DEBUG)) { |
||||
OC_Response::setETagHeader($etag); |
||||
$gzout = $cache->get($cache_key.'.gz'); |
||||
} |
||||
|
||||
if (!$gzout) { |
||||
$out = $this->minimizeFiles($files); |
||||
$gzout = gzencode($out); |
||||
$cache->set($cache_key.'.gz', $gzout); |
||||
OC_Response::setETagHeader($etag); |
||||
} |
||||
// on some systems (e.g. SLES 11, but not Ubuntu) mod_deflate and zlib compression will compress the output twice. |
||||
// This results in broken core.css and core.js. To avoid it, we switch off zlib compression. |
||||
// Since mod_deflate is still active, Apache will compress what needs to be compressed, i.e. no disadvantage. |
||||
if(function_exists('apache_get_modules') && ini_get('zlib.output_compression') && in_array('mod_deflate', apache_get_modules())) { |
||||
ini_set('zlib.output_compression', 'Off'); |
||||
} |
||||
if ($encoding = OC_Request::acceptGZip()) { |
||||
header('Content-Encoding: '.$encoding); |
||||
$out = $gzout; |
||||
} else { |
||||
$out = gzdecode($gzout); |
||||
} |
||||
header('Content-Length: '.strlen($out)); |
||||
echo $out; |
||||
} |
||||
|
||||
public function clearCache() { |
||||
$cache = OC_Cache::getGlobalCache(); |
||||
$cache->clear('core.css'); |
||||
$cache->clear('core.js'); |
||||
} |
||||
} |
||||
|
||||
if (!function_exists('gzdecode')) { |
||||
function gzdecode($data, $maxlength=null, &$filename='', &$error='') |
||||
{ |
||||
if (strcmp(substr($data, 0, 9),"\x1f\x8b\x8\0\0\0\0\0\0")) { |
||||
return null; // Not the GZIP format we expect (See RFC 1952) |
||||
} |
||||
return gzinflate(substr($data, 10, -8)); |
||||
} |
||||
} |
||||
@ -1,38 +0,0 @@ |
||||
<?php |
||||
|
||||
require_once 'mediawiki/CSSMin.php'; |
||||
|
||||
class OC_Minimizer_CSS extends OC_Minimizer |
||||
{ |
||||
protected $contentType = 'text/css'; |
||||
|
||||
public function minimizeFiles($files) { |
||||
$css_out = ''; |
||||
$webroot = (string) OC::$WEBROOT; |
||||
foreach($files as $file_info) { |
||||
$file = $file_info[0] . '/' . $file_info[2]; |
||||
$css_out .= '/* ' . $file . ' */' . "\n"; |
||||
$css = file_get_contents($file); |
||||
|
||||
$in_root = false; |
||||
foreach(OC::$APPSROOTS as $app_root) { |
||||
if(strpos($file, $app_root['path'].'/') === 0) { |
||||
$in_root = rtrim($webroot.$app_root['url'], '/'); |
||||
break; |
||||
} |
||||
} |
||||
if ($in_root !== false) { |
||||
$css = str_replace('%appswebroot%', $in_root, $css); |
||||
$css = str_replace('%webroot%', $webroot, $css); |
||||
} |
||||
$remote = $file_info[1]; |
||||
$remote .= '/'; |
||||
$remote .= dirname($file_info[2]); |
||||
$css_out .= CSSMin::remap($css, dirname($file), $remote, true); |
||||
} |
||||
if (!defined('DEBUG') || !DEBUG) { |
||||
$css_out = CSSMin::minify($css_out); |
||||
} |
||||
return $css_out; |
||||
} |
||||
} |
||||
@ -1,21 +0,0 @@ |
||||
<?php |
||||
|
||||
require_once 'mediawiki/JavaScriptMinifier.php'; |
||||
|
||||
class OC_Minimizer_JS extends OC_Minimizer |
||||
{ |
||||
protected $contentType = 'application/javascript'; |
||||
|
||||
public function minimizeFiles($files) { |
||||
$js_out = ''; |
||||
foreach($files as $file_info) { |
||||
$file = $file_info[0] . '/' . $file_info[2]; |
||||
$js_out .= '/* ' . $file . ' */' . "\n"; |
||||
$js_out .= file_get_contents($file); |
||||
} |
||||
if (!defined('DEBUG') || !DEBUG) { |
||||
$js_out = JavaScriptMinifier::minify($js_out); |
||||
} |
||||
return $js_out; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue