function load_css() { CSS::load(); }
/** * Sets the initial variables, checks if we need to process the css * and then sends whichever file to the browser. * * @return void * @author Anthony Short **/ public static function setup($url_params) { static $run; # This function can only be run once if ($run === TRUE) { return; } # Change into the system directory chdir(SYSPATH); # Load the include paths self::include_paths(TRUE); # Recache is off by default $recache = false; # Set the user agent self::$user_agent = !empty($_SERVER['HTTP_USER_AGENT']) ? trim($_SERVER['HTTP_USER_AGENT']) : ''; # Set timezone date_default_timezone_set('UTC'); # Define Scaffold error constant define('E_SCAFFOLD', 42); # Set error handler set_error_handler(array('CSScaffold', 'exception_handler')); # Set exception handler set_exception_handler(array('CSScaffold', 'exception_handler')); if (!isset($url_params['request'])) { throw new Scaffold_Exception('core.no_file_requested'); } # Get rid of those pesky slashes $requested_file = trim_slashes($url_params['request']); # Remove anything about .css - like /typography/ $requested_file = preg_replace('/\\.css(.*)$/', '.css', $requested_file); # Remove the start of the url if it exists (http://www.example.com) $requested_file = preg_replace('/https?\\:\\/\\/[^\\/]+/i', '', $requested_file); # Add our requested file var to the array $request['file'] = $requested_file; # Path to the file, relative to the css directory $request['relative_file'] = ltrim(str_replace(CSSURL, '/', $requested_file), '/'); # Path to the directory containing the file, relative to the css directory $request['relative_dir'] = pathinfo($request['relative_file'], PATHINFO_DIRNAME); # Find the server path to the requested file if (file_exists(DOCROOT . $requested_file)) { # The request is sent with the absolute path most of the time $request['path'] = DOCROOT . $requested_file; } else { # Otherwise we'll try to find it inside the CSS directory $request['path'] = self::find_file($request['relative_dir'] . '/', basename($requested_file, '.css'), FALSE, 'css'); } # If they've put a param in the url, consider it set to 'true' foreach ($url_params as $key => $value) { if (!in_array($key, self::$system_url_params)) { if ($value == "") { self::config_set('core.options.' . $key, true); } else { self::config_set('core.options.' . $key, $value); } } } # If the file doesn't exist if (!file_exists($request['path'])) { throw new Scaffold_Exception("core.doesnt_exist", $request['file']); } # or if it's not a css file if (!is_css($requested_file)) { throw new Scaffold_Exception("core.not_css", $requested_file); } # or if the requested file wasn't from the css directory if (!substr(pathinfo($request['path'], PATHINFO_DIRNAME), 0, strlen(CSSPATH))) { throw new Scaffold_Exception("core.outside_css_directory"); } # Make sure the files/folders are writeable if (!is_dir(CACHEPATH) || !is_writable(CACHEPATH)) { throw new Scaffold_Exception("core.missing_cache", CACHEPATH); } # Send it off to the config self::config_set('core.request', $request); # Get the modified time of the CSS file self::config_set('core.request.mod_time', filemtime(self::config('core.request.path'))); # Set the recache to true if needed if (self::config('core.always_recache') or isset($url_params['recache'])) { $recache = true; } # Set it back to false if it's locked if (self::config('core.cache_lock') === true || IN_PRODUCTION) { $recache = false; } # Load the modules. self::load_addons(self::$modules, 'modules'); # Load the plugins $plugins = self::config('core.plugins'); # If the plugin is disabled, remove it. foreach ($plugins as $key => $value) { if ($value !== false) { self::$plugins[] = $key; } } # Now we can load them self::load_addons(self::$plugins, PLUGINS); # Prepare the cache, and tell it if we want to recache self::cache_set($recache); # Work in the same directory as the requested CSS file chdir(dirname($request['path'])); # Load the CSS file into the object CSS::load(file_get_contents(self::config('core.request.path'))); # Setup is complete, prevent it from being run again $run = TRUE; }
/** * Sets the initial variables, checks if we need to process the css * and then sends whichever file to the browser. * * @return void * @author Anthony Short **/ public static function run($get, $config = array(), $path = array()) { static $run; # This function can only be run once if ($run === TRUE) { return; } # If we want to debug (turn on errors and FirePHP) if ($config['debug']) { # Set the error reporting level. error_reporting(E_ALL & ~E_STRICT); # Set error handler set_error_handler(array('CSScaffold', 'exception_handler')); # Set exception handler set_exception_handler(array('CSScaffold', 'exception_handler')); # Turn on FirePHP FB::setEnabled(true); } else { # Turn off errors error_reporting(0); FB::setEnabled(false); } # The default options $default_config = array('debug' => false, 'in_production' => false, 'force_recache' => false, 'show_header' => true, 'auto_include_mixins' => true, 'override_import' => false, 'absolute_urls' => false, 'use_css_constants' => false, 'minify_css' => true, 'constants' => array(), 'disabled_plugins' => array()); # Merge them with our set options $config = array_merge($default_config, $config); # The default paths $default_paths = array('document_root' => $_SERVER['DOCUMENT_ROOT'], 'css' => '../', 'system' => 'system', 'cache' => 'cache'); # Merge them with our set options $path = array_merge($default_paths, $path); # Set the options and paths in the config self::config_set('core', $config); # Set the paths in the config self::config_set('core.path.docroot', fix_path($path['document_root'])); self::config_set('core.path.system', fix_path($path['system'])); self::config_set('core.path.cache', fix_path($path['cache'])); self::config_set('core.path.css', fix_path($path['css'])); self::config_set('core.url.css', str_replace(self::config('core.path.docroot'), '/', self::config('core.path.css'))); self::config_set('core.url.system', str_replace(self::config('core.path.docroot'), '/', SYSPATH)); # Load the include paths self::include_paths(TRUE); # Change into the system directory chdir(SYSPATH); # Set the output if (isset($get['output'])) { self::config_set('core.output', $get['output']); } # Parse the $_GET['request'] and set it in the config self::config_set('core.request', self::parse_request($get['request'])); # Get the modified time of the CSS file self::config_set('core.request.mod_time', filemtime(self::config('core.request.path'))); # Tell CSScaffold where to cache and tell if we want to recache self::cache_set(self::config('core.path.cache')); # Set it back to false if it's locked if ($config['in_production'] and file_exists(self::$cached_file)) { $recache = false; } elseif ($config['force_recache'] or isset($get['recache']) or self::config('core.cache.mod_time') <= self::config('core.request.mod_time')) { $recache = true; self::cache_clear(); } # Load the modules self::load_modules($config['disabled_plugins']); # Work in the same directory as the requested CSS file chdir(dirname(self::config('core.request.path'))); # Create a new CSS object CSS::load(self::config('core.request.path')); # Parse it if ($recache) { self::parse_css(); } # Log to Firebug FB::group('CSScaffold Settings'); FB::log(self::config('core')); FB::groupEnd(); # Output it self::output(CSS::$css); # Setup is complete, prevent it from being run again $run = TRUE; }