function css_emimage_advagg_files_table in CSS Embedded Images 6.2
Implementation of hook_advagg_files_table().
See if any images referenced in a CSS file has changed.
File
- ./
css_emimage.module, line 297 - CSS Embedded Images module.
Code
function css_emimage_advagg_files_table($row, $checksum) {
global $base_path;
// Only operate on CSS files.
if ($row['filetype'] != 'css') {
return;
}
// Load the CSS file.
$images = array();
$css = advagg_build_css_bundle(array(
$row['filename'],
));
// Get file data.
$lock_name = 'advagg_set_file_data_' . $row['filename_md5'];
if (!lock_acquire($lock_name)) {
lock_wait($lock_name);
}
$data = advagg_get_file_data($row['filename_md5']);
// See if CSS file contains an image.
$pattern = '/(background(?:-image)?|list-style(?:-image)?):[^{};)]*?((?:none|url\\([\'"]?(.+?)[\'"]?\\)))([^{};]*)/i';
if (preg_match_all($pattern, $css, $matches) > 0) {
$images = $matches[3];
}
// If no images bail out.
if (empty($images)) {
if (isset($data['css_emimage']) && $data['css_emimage'] == 0) {
lock_release($lock_name);
return;
}
$data['css_emimage'] = 0;
advagg_set_file_data($row['filename_md5'], $data);
lock_release($lock_name);
return;
}
$out = array();
$rebuild = FALSE;
$save = FALSE;
foreach ($images as $filename) {
if (empty($filename)) {
lock_release($lock_name);
continue;
}
// Strip base path from filename.
$filename = preg_replace('/^' . preg_quote($base_path, '/') . '/i', '', $filename);
if (file_exists($filename) == FALSE) {
lock_release($lock_name);
continue;
}
// Get the checksum of each image.
$checksum = advagg_checksum($filename);
if (!empty($data['css_emimage'][$filename])) {
if ($data['css_emimage'][$filename] != $checksum) {
$rebuild = TRUE;
$save = TRUE;
}
}
else {
$save = TRUE;
}
$data['css_emimage'] = array();
$data['css_emimage'][$filename] = $checksum;
}
if ($save) {
advagg_set_file_data($row['filename_md5'], $data);
}
lock_release($lock_name);
return $rebuild;
}