?
Path : /home/admin/public_html/old/plugins/system/t3/includes/lessphp/less/ |
Current File : /home/admin/public_html/old/plugins/system/t3/includes/lessphp/less/cache.php |
<?php require_once( dirname(__FILE__).'/version.php'); /** * Utility for handling the generation and caching of css files * * @package Less * @subpackage cache * */ class Less_Cache{ public static $cache_dir = false; // directory less.php can use for storing data /** * Save and reuse the results of compiled less files. * The first call to Get() will generate css and save it. * Subsequent calls to Get() with the same arguments will return the same css filename * * @param array $less_files Array of .less files to compile * @param array $parser_options Array of compiler options * @param boolean $use_cache Set to false to regenerate the css file * @return string Name of the css file */ public static function Get( $less_files, $parser_options = array(), $use_cache = true ){ //check $cache_dir if( isset($parser_options['cache_dir']) ){ Less_Cache::$cache_dir = $parser_options['cache_dir']; } if( empty(Less_Cache::$cache_dir) ){ throw new Exception('cache_dir not set'); } self::CheckCacheDir(); // generate name for compiled css file $less_files = (array)$less_files; $hash = md5(json_encode($less_files)); $list_file = Less_Cache::$cache_dir.'lessphp_'.$hash.'.list'; if( $use_cache === true ){ // check cached content if( file_exists($list_file) ){ $list = explode("\n",file_get_contents($list_file)); $compiled_name = self::CompiledName($list); $compiled_file = Less_Cache::$cache_dir.$compiled_name; if( file_exists($compiled_file) ){ @touch($list_file); @touch($compiled_file); return $compiled_name; } } } $compiled = self::Cache( $less_files, $parser_options ); if( !$compiled ){ return false; } //save the file list $cache = implode("\n",$less_files); file_put_contents( $list_file, $cache ); //save the css $compiled_name = self::CompiledName( $less_files ); file_put_contents( Less_Cache::$cache_dir.$compiled_name, $compiled ); //clean up self::CleanCache(); return $compiled_name; } /** * Force the compiler to regenerate the cached css file * * @param array $less_files Array of .less files to compile * @param array $parser_options Array of compiler options * @return string Name of the css file */ public static function Regen( $less_files, $parser_options = array() ){ return self::Get( $less_files, $parser_options, false ); } public static function Cache( &$less_files, $parser_options = array() ){ // get less.php if it exists $file = dirname(__FILE__) . '/Less.php'; if( file_exists($file) && !class_exists('Less_Parser') ){ require_once($file); } $parser_options['cache_dir'] = Less_Cache::$cache_dir; $parser = new Less_Parser($parser_options); // combine files foreach($less_files as $file_path => $uri_or_less ){ //treat as less markup if there are newline characters if( strpos($uri_or_less,"\n") !== false ){ $parser->Parse( $uri_or_less ); continue; } $parser->ParseFile( $file_path, $uri_or_less ); } $compiled = $parser->getCss(); $less_files = $parser->allParsedFiles(); return $compiled; } private static function CompiledName( $files ){ //save the file list $temp = array(Less_Version::cache_version); foreach($files as $file){ $temp[] = filemtime($file)."\t".filesize($file)."\t".$file; } return 'lessphp_'.sha1(json_encode($temp)).'.css'; } public static function SetCacheDir( $dir ){ Less_Cache::$cache_dir = $dir; } public static function CheckCacheDir(){ Less_Cache::$cache_dir = str_replace('\\','/',Less_Cache::$cache_dir); Less_Cache::$cache_dir = rtrim(Less_Cache::$cache_dir,'/').'/'; if( !file_exists(Less_Cache::$cache_dir) ){ if( !mkdir(Less_Cache::$cache_dir) ){ throw new Less_Exception_Parser('Less.php cache directory couldn\'t be created: '.Less_Cache::$cache_dir); } }elseif( !is_dir(Less_Cache::$cache_dir) ){ throw new Less_Exception_Parser('Less.php cache directory doesn\'t exist: '.Less_Cache::$cache_dir); }elseif( !is_writable(Less_Cache::$cache_dir) ){ throw new Less_Exception_Parser('Less.php cache directory isn\'t writable: '.Less_Cache::$cache_dir); } } public static function CleanCache(){ static $clean = false; if( $clean ){ return; } $files = scandir(Less_Cache::$cache_dir); if( $files ){ $check_time = time() - 604800; foreach($files as $file){ if( strpos($file,'lessphp_') !== 0 ){ continue; } $full_path = Less_Cache::$cache_dir.'/'.$file; if( filemtime($full_path) > $check_time ){ continue; } unlink($full_path); } } $clean = true; } }