Created
November 23, 2010 13:49
-
-
Save rodrigorm/711782 to your computer and use it in GitHub Desktop.
CakePHP CSS and JS preprocessor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* CSS Functions | |
* | |
* PHP versions 4 and 5 | |
* | |
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | |
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) | |
* | |
* Licensed under The MIT License | |
* Redistributions of files must retain the above copyright notice. | |
* | |
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) | |
* @link http://cakephp.org CakePHP(tm) Project | |
* @package cake | |
* @subpackage cake.app.webroot | |
* @since CakePHP(tm) v 0.2.9 | |
* @license MIT License (http://www.opensource.org/licenses/mit-license.php) | |
*/ | |
if (!defined('CAKE_CORE_INCLUDE_PATH')) { | |
header('HTTP/1.1 404 Not Found'); | |
exit('File Not Found'); | |
} | |
/** | |
* Ensure required files are included | |
*/ | |
if (!class_exists('File')) { | |
require LIBS . 'file.php'; | |
} | |
/** | |
* Make clean CSS | |
* | |
* @param unknown_type $path | |
* @param unknown_type $name | |
* @return unknown | |
*/ | |
function make_clean_css($path, $name) { | |
App::import('Vendor', 'csspp' . DS . 'csspp'); | |
$baseDir = Configure::read('App.www_root') . 'css' . DS; | |
$csspp = new CSSPP(str_replace($baseDir, '', $path), $baseDir, array('expanders' => false)); | |
if (Configure::read('debug') !== 0) { | |
$csspp->setOption('imports', false); | |
$csspp->setOption('minify', false); | |
} | |
return (string)$csspp; | |
} | |
/** | |
* Write CSS cache | |
* | |
* @param unknown_type $path | |
* @param unknown_type $content | |
* @return unknown | |
*/ | |
function write_css_cache($path, $content) { | |
if (Configure::read('debug') !== 0) { | |
return true; | |
} | |
if (!is_dir(dirname($path))) { | |
mkdir(dirname($path)); | |
} | |
$cache = new File($path); | |
return $cache->write($content); | |
} | |
if (preg_match('|\.\.|', $url) || !preg_match('|^ccss/(.+)$|i', $url, $regs)) { | |
exit('Wrong file name.'); | |
} | |
$filename = 'css/' . $regs[1]; | |
$filepath = CSS . $regs[1]; | |
$cachepath = Configure::read('App.www_root') . 'ccss' . DS . str_replace(array('/','\\'), DS, $regs[1]); | |
if (!file_exists($filepath)) { | |
exit('Wrong file name.'); | |
} | |
if (file_exists($cachepath) && Configure::read('debug') == 0) { | |
$templateModified = filemtime($filepath); | |
$cacheModified = filemtime($cachepath); | |
if ($templateModified > $cacheModified) { | |
$output = make_clean_css($filepath, $filename); | |
write_css_cache($cachepath, $output); | |
} else { | |
$output = file_get_contents($cachepath); | |
} | |
} else { | |
$output = make_clean_css($filepath, $filename); | |
write_css_cache($cachepath, $output); | |
$templateModified = time(); | |
} | |
header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT'); | |
header("Content-Type: text/css"); | |
header("Expires: " . gmdate("D, j M Y H:i:s", time() + DAY) . " GMT"); | |
header("Cache-Control: max-age=86400, must-revalidate"); // HTTP/1.1 | |
header("Pragma: cache"); // HTTP/1.0 | |
print $output; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment