Implements hook_advagg_save_aggregate_alter().
Used to add in a .gz file if none exits.
Sujets associés
Fichier
-
./
advagg.advagg.inc, line 20
Code
function advagg_advagg_save_aggregate_alter(array &$files_to_save, array $aggregate_settings, array $other_parameters) {
// * @param array $files_to_save
// * Array($uri => $contents).
// * @param array $aggregate_settings
// * Array of settings.
// * @param array $other_parameters
// * Array of containing $files and $type.
$file_types = array();
// Handle gzip.
if (!empty($aggregate_settings['variables']['advagg_gzip'])) {
// Use zopfli_encode if it exists.
// See https://github.com/kjdev/php-ext-zopfli
if (function_exists('zopfli_encode') && defined('ZOPFLI_GZIP') && empty($aggregate_settings['variables']['advagg_no_zopfli'])) {
$file_types['.gz'] = array(
'zopfli_encode',
15,
constant('ZOPFLI_GZIP'),
);
}
else {
$file_types['.gz'] = array(
'gzencode',
9,
FORCE_GZIP,
);
}
}
// Handle brotli.
// See https://github.com/kjdev/php-ext-brotli
if (!empty($aggregate_settings['variables']['advagg_brotli']) && defined('BROTLI_TEXT') && function_exists('brotli_compress')) {
$file_types['.br'] = array(
'brotli_compress',
11,
constant('BROTLI_TEXT'),
);
}
if (empty($file_types)) {
return;
}
// Special S3 handling.
$s3fs = FALSE;
$files_to_save_keys = array_keys($files_to_save);
foreach ($files_to_save_keys as $uri) {
$wrapper = file_stream_wrapper_get_instance_by_uri($uri);
if ($wrapper && get_class($wrapper) === 'S3fsStreamWrapper') {
$s3fs = TRUE;
break;
}
}
foreach ($file_types as $ext => $settings) {
// See if a file already exists with this extension.
$ext_exists = FALSE;
foreach ($files_to_save as $uri => $contents) {
// See if this uri contains $ext near the end of it.
if (strlen($uri) > 91 + strlen(ADVAGG_SPACE) * 3) {
$pos = strripos($uri, $ext, 91 + strlen(ADVAGG_SPACE) * 3);
}
else {
$pos = strripos($uri, $ext);
}
if (!empty($pos)) {
$len = strlen($uri);
// $ext file exists, exit loop.
if ($pos == $len - 3) {
$ext_exists = TRUE;
break;
}
}
}
// If a $ext file does not exist, create one.
if (!$ext_exists) {
// Use the first file in the array.
$data = reset($files_to_save);
$uri = key($files_to_save);
// Compress it and add it to the $files_to_save array.
$callback = $settings[0];
$settings[0] = $data;
$compressed = call_user_func_array($callback, $settings);
if (!empty($compressed)) {
if ($s3fs && $ext === '.gz') {
// Only serve gzip files from S3.
$files_to_save[$uri] = $compressed;
}
elseif ($s3fs && $ext === '.br' && !isset($file_types['.gz'])) {
// Only serve br files from S3.
$files_to_save[$uri] = $compressed;
}
else {
$files_to_save[$uri . $ext] = $compressed;
}
}
}
}
}