View source
<?php
function advagg_process_html_css(&$variables) {
return;
$schema = advagg_get_server_schema();
$css_var = $variables['css'];
$css_orig = $css_var;
if (!variable_get('advagg_only_css_from_variables', ADVAGG_ONLY_CSS_FROM_VARIABLES)) {
$css_func = drupal_add_css(CSS_DEFAULT);
advagg_css_array_fixer($css_func);
}
else {
$css_func = array();
}
$css = array_merge($css_var, $css_func);
$css_func_inline = advagg_add_css_inline();
if (!empty($css_func_inline)) {
$css = advagg_merge_inline_css($css, $css_func_inline);
}
$css_conditional_styles = !empty($variables['conditional_styles']) ? $variables['conditional_styles'] : '';
$css_styles = $variables['styles'];
if (variable_get('advagg_use_full_cache', ADVAGG_USE_FULL_CACHE)) {
$cid = 'advagg_processor:css:' . md5(serialize(array(
$css,
$css_conditional_styles,
))) . ':' . $schema . ':' . $_SERVER['HTTP_HOST'] . ':' . variable_get('advagg_css_render_function', ADVAGG_CSS_RENDER_FUNCTION) . ':' . substr(variable_get('css_js_query_string', '0'), 0, 1);
$cache = cache_get($cid, 'cache_advagg_bundle_reuse');
}
elseif (isset($cid)) {
unset($cid);
}
if (!empty($cache->data)) {
$variables['styles'] = $cache->data;
}
else {
$processed_css = advagg_process_css($css);
if (!empty($processed_css)) {
$variables['styles'] = $processed_css;
}
$variables['styles'] .= $css_conditional_styles;
if (isset($cid) && variable_get('advagg_use_full_cache', ADVAGG_USE_FULL_CACHE) && lock_acquire($cid)) {
cache_set($cid, $variables['styles'], 'cache_advagg_bundle_reuse', CACHE_TEMPORARY);
lock_release($cid);
}
}
}
function advagg_process_css($css = NULL, $noagg = FALSE) {
global $conf;
$original_css = $css;
if (!isset($css)) {
$css = drupal_add_css(CSS_DEFAULT);
}
if (empty($css)) {
return FALSE;
}
list($preprocess_css, $scheme, $query_string) = advagg_process_css_js_prep($noagg, 'css');
drupal_alter('advagg_css_pre', $css, $preprocess_css, $scheme);
$external_no_preprocess = array();
$module_no_preprocess = array();
$output_no_preprocess = array();
$output_preprocess = array();
$theme_no_preprocess = array();
$inline_no_preprocess = array();
$files_included = array();
$files_aggregates_included = array();
$inline_included = array();
foreach ($css as $media => $types) {
$files_included[$media] = array();
$files_aggregates_included[$media] = array();
$inline_included[$media] = array();
foreach ($types as $type => $files) {
if ($type == 'module') {
$theme_styles = array();
foreach (array_keys($css[$media]['theme']) as $theme_style) {
$theme_styles[] = basename($theme_style);
}
}
foreach ($types[$type] as $file => $preprocess) {
if ($type == 'module' && in_array(str_replace('-rtl.css', '.css', basename($file)), $theme_styles)) {
unset($types[$type][$file]);
continue;
}
if ($type == 'inline') {
if (is_array($preprocess)) {
foreach ($preprocess as $suffix => $blob) {
$blob = advagg_drupal_load_stylesheet_content($blob, $preprocess);
drupal_alter('advagg_css_inline', $blob);
$inline_no_preprocess[] = array(
'media' => $media,
'data' => $blob,
'prefix' => $file,
'suffix' => $suffix,
);
$inline_included[$media][] = $blob;
}
}
unset($types[$type][$file]);
continue;
}
$prefix = '';
$suffix = '';
$values = array(
$file,
NULL,
$prefix,
$suffix,
);
drupal_alter('advagg_css_extra', $values);
list($file, $null, $prefix, $suffix) = $values;
if ($type == 'inline') {
$file = advagg_drupal_load_stylesheet_content($file, $preprocess);
drupal_alter('advagg_css_inline', $file);
$inline_no_preprocess[] = array(
'media' => $media,
'data' => $file,
'prefix' => $prefix,
'suffix' => $suffix,
);
$inline_included[$media][] = $file;
unset($types[$type][$file]);
continue;
}
if ($type == 'external') {
$external_no_preprocess[] = array(
'media' => $media,
'href' => $file,
'prefix' => $prefix,
'suffix' => $suffix,
);
$files_included[$media][$file] = TRUE;
unset($types[$type][$file]);
continue;
}
if (advagg_file_exists($file)) {
if (!$preprocess || !($scheme === 'public' && $preprocess_css)) {
$file_uri = advagg_build_uri($file) . $query_string;
$files_included[$media][$file] = $preprocess;
if (!$preprocess && $type == 'module') {
$module_no_preprocess[] = array(
'media' => $media,
'href' => $file_uri,
'prefix' => $prefix,
'suffix' => $suffix,
);
}
elseif (!$preprocess && $type == 'theme') {
$theme_no_preprocess[] = array(
'media' => $media,
'href' => $file_uri,
'prefix' => $prefix,
'suffix' => $suffix,
);
}
else {
$output_no_preprocess[] = array(
'media' => $media,
'href' => $file_uri,
'prefix' => $prefix,
'suffix' => $suffix,
);
}
}
}
}
}
if ($scheme == 'public' && $preprocess_css) {
$files_aggregates_included[$media] = $files_included[$media];
$files = array();
foreach ($types as $type) {
foreach ($type as $file => $cache) {
if ($cache) {
$files[] = $file;
$files_included[$media][$file] = TRUE;
unset($files_aggregates_included[$file]);
}
}
}
if (!empty($files)) {
$preprocess_files = advagg_css_js_file_builder('css', $files, $query_string);
if (!empty($preprocess_files)) {
$good = TRUE;
foreach ($preprocess_files as $preprocess_file => $extra) {
if (empty($preprocess_file)) {
continue;
}
if ($extra !== FALSE && is_array($extra)) {
$prefix = $extra['prefix'];
$suffix = $extra['suffix'];
$output_preprocess[] = array(
'media' => $media,
'href' => advagg_build_uri($preprocess_file),
'prefix' => $prefix,
'suffix' => $suffix,
);
$files_aggregates_included[$media][$preprocess_file] = $extra;
}
else {
$good = FALSE;
break;
}
}
}
if (empty($good)) {
watchdog('advagg', 'CSS aggregation failed. %filename could not be saved correctly.', array(
'%filename' => $preprocess_file,
), WATCHDOG_ERROR);
$data = advagg_process_css($original_css, TRUE);
return $data;
}
}
}
}
$function = variable_get('advagg_css_render_function', ADVAGG_CSS_RENDER_FUNCTION);
return $function($external_no_preprocess, $module_no_preprocess, $output_no_preprocess, $output_preprocess, $theme_no_preprocess, $inline_no_preprocess, $inline_included, $files_included, $files_aggregates_included);
}
function advagg_unlimited_css_builder($external_no_preprocess, $module_no_preprocess, $output_no_preprocess, $output_preprocess, $theme_no_preprocess, $inline_no_preprocess, $files_included, $files_aggregates_included, $inline_included) {
global $user;
$styles = '';
$files = array_merge($external_no_preprocess, $module_no_preprocess, $output_no_preprocess, $output_preprocess, $theme_no_preprocess, $inline_no_preprocess);
if (count($files) < variable_get('advagg_css_count_threshold', ADVAGG_CSS_COUNT_THRESHOLD)) {
advagg_unlimited_css_traditional($files, $styles);
}
elseif (variable_get('advagg_css_logged_in_ie_detect', ADVAGG_CSS_LOGGED_IN_IE_DETECT) && $user->uid != 0) {
$is_ie = FALSE;
if (isset($_SERVER['HTTP_USER_AGENT'])) {
if (stristr($_SERVER['HTTP_USER_AGENT'], 'microsoft internet explorer') || stristr($_SERVER['HTTP_USER_AGENT'], 'msie') || stristr($_SERVER['HTTP_USER_AGENT'], 'mspie')) {
$is_ie = TRUE;
}
}
else {
$is_ie = TRUE;
}
if ($is_ie) {
advagg_unlimited_css_import(array_merge($external_no_preprocess, $module_no_preprocess, $output_no_preprocess), $styles);
advagg_unlimited_css_import($output_preprocess, $styles);
advagg_unlimited_css_import($theme_no_preprocess, $styles);
advagg_unlimited_css_traditional($inline_no_preprocess, $styles);
}
else {
advagg_unlimited_css_traditional($files, $styles);
}
}
else {
advagg_unlimited_css_import(array_merge($external_no_preprocess, $module_no_preprocess, $output_no_preprocess), $styles);
advagg_unlimited_css_import($output_preprocess, $styles);
advagg_unlimited_css_import($theme_no_preprocess, $styles);
advagg_unlimited_css_traditional($inline_no_preprocess, $styles);
}
return $styles;
}
function advagg_unlimited_css_traditional($files, &$styles) {
$last_prefix = '';
$last_suffix = '';
foreach ($files as $css_file) {
$media = $css_file['media'];
$prefix = empty($css_file['prefix']) ? '' : $css_file['prefix'] . "\n";
$suffix = empty($css_file['suffix']) ? '' : $css_file['suffix'];
if (isset($css_file['href'])) {
$href = $css_file['href'];
if ($prefix != $last_prefix) {
$styles .= $last_suffix . "\n" . $prefix . '<link type="text/css" rel="stylesheet" media="' . $media . '" href="' . $href . '" />' . "\n";
}
else {
$styles .= '<link type="text/css" rel="stylesheet" media="' . $media . '" href="' . $href . '" />' . "\n";
}
}
else {
$data = $css_file['data'];
if ($prefix != $last_prefix) {
$styles .= $last_suffix . "\n" . $prefix . '<style type="text/css" media="' . $media . '">' . "\n" . $data . "\n" . '</style>' . "\n";
}
else {
$styles .= '<style type="text/css" media="' . $media . '">' . "\n" . $data . "\n" . '</style>' . "\n";
}
}
$last_prefix = $prefix;
$last_suffix = $suffix;
}
$styles .= empty($last_suffix) ? '' : $last_suffix . "\n";
}
function advagg_unlimited_css_import($files, &$styles) {
$counter = 0;
$media = NULL;
$import = '';
foreach ($files as $css_file) {
$media_new = $css_file['media'];
$href = $css_file['href'];
if ($media_new != $media || $counter > variable_get('advagg_css_count_threshold', ADVAGG_CSS_COUNT_THRESHOLD)) {
if ($media && !empty($import)) {
$styles .= "\n" . '<style type="text/css" media="' . $media . '">' . "\n" . $import . '</style>';
$import = '';
}
$counter = 0;
$media = $media_new;
}
$import .= '@import "' . $href . '";' . "\n";
$counter++;
}
if ($media && !empty($import)) {
$styles .= "\n" . '<style type="text/css" media="' . $media . '">' . "\n" . $import . '</style>';
}
}