mirror of https://github.com/nextcloud/server.git
Merge pull request #7310 from owncloud/no-css-js-delivery-via-php
No css js delivery via phpremotes/origin/ldap_group_count
commit
079d64ce75
@ -1,15 +0,0 @@
|
||||
<?php
|
||||
session_write_close();
|
||||
|
||||
OC_App::loadApps();
|
||||
|
||||
if ($service == 'core.css') {
|
||||
$minimizer = new OC_Minimizer_CSS();
|
||||
$files = OC_TemplateLayout::findStylesheetFiles(OC_Util::$coreStyles);
|
||||
$minimizer->output($files, $service);
|
||||
}
|
||||
else if ($service == 'core.js') {
|
||||
$minimizer = new OC_Minimizer_JS();
|
||||
$files = OC_TemplateLayout::findJavascriptFiles(OC_Util::$coreScripts);
|
||||
$minimizer->output($files, $service);
|
||||
}
|
@ -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