function advagg_js_compress_all_js_files_list in Advanced CSS/JS Aggregation 7.2
Get all js files and js files that are not compressed.
Return value
array Array($list, $redo_list).
4 calls to advagg_js_compress_all_js_files_list()
- advagg_js_compress_admin_settings_form in advagg_js_compress/
advagg_js_compress.admin.inc - Form builder; Configure advagg settings.
- advagg_js_compress_batch_callback in advagg_js_compress/
advagg_js_compress.module - The batch callback.
- advagg_js_compress_cron in advagg_js_compress/
advagg_js_compress.module - Implements hook_cron().
- drush_advagg_js_compress in advagg_js_compress/
advagg_js_compress.drush.inc - Callback function for drush advagg-js-compress.
File
- advagg_js_compress/
advagg_js_compress.module, line 467 - Advanced CSS/JS aggregation js compression module.
Code
function advagg_js_compress_all_js_files_list() {
// Get all files stored in the database.
$result = db_select('advagg_files', 'af')
->fields('af')
->condition('filetype', 'js')
->orderBy('filename', 'ASC')
->execute();
if (empty($result)) {
return array();
}
module_load_include('inc', 'advagg_js_compress', 'advagg_js_compress.advagg');
$compressor_list = advagg_js_compress_get_enabled_compressors(array(), -1);
$compressor_list_count = count($compressor_list);
// Check if files have been compressed.
module_load_include('inc', 'advagg', 'advagg');
$redo_list = array();
$failed_redo_list = array();
$list = array();
$cache_ids = array();
foreach ($result as $row) {
$row = (array) $row;
// Check cache for jsmin info.
$info = advagg_get_info_on_file($row['filename']);
if ($info['filesize'] == 0) {
continue;
}
$list[$row['filename']] = $info;
// Get the cache id as well.
$cache_id = 'advagg:js_compress:info:' . $info['filename_hash'];
$cache_id .= !empty($info['content_hash']) ? ':' . $info['content_hash'] : '';
$cache_ids[$cache_id] = $row['filename'];
}
// Check for soon to expire cache ids.
$values = array_keys($cache_ids);
$cache_hits = cache_get_multiple($values, 'cache_advagg_info');
$ttl = variable_get('advagg_js_compress_refresh_before_cache_ttl', ADVAGG_JS_COMPRESS_REFRESH_BEFORE_CACHE_TTL);
foreach ($cache_hits as $cache) {
if (!empty($cache->expire) && $cache->expire - $ttl < REQUEST_TIME) {
$info = $list[$cache_ids[$cache->cid]];
$redo_list[$info['data']] = $info;
}
}
foreach ($list as $info) {
// No jsmin info or incomplete data => rerun compression tests.
if (empty($info['advagg_js_compress']) || count($info['advagg_js_compress']) !== $compressor_list_count) {
$redo_list[$info['data']] = $info;
continue;
}
$empty_ratio_count = 0;
$bad_compression_count = 0;
foreach ($info['advagg_js_compress'] as $values) {
if (empty($values['ratio'])) {
if ($values['code'] != -1) {
$empty_ratio_count++;
}
else {
$bad_compression_count++;
}
}
}
// More than one compressor has an empty ratio.
if ($empty_ratio_count > 1) {
$failed_redo_list[$info['data']] = $info;
}
// All failed; try again.
if ($bad_compression_count == count($info['advagg_js_compress'])) {
$failed_redo_list[$info['data']] = $info;
}
}
$redo_list = array_merge($redo_list, $failed_redo_list);
$reversed_needle = strrev('.min.js');
$advagg_js_compressor_file_settings = variable_get('advagg_js_compressor_file_settings', []);
foreach ($redo_list as $key => $info) {
// Filter out file if the compressor is disabled.
$filename = str_replace([
'/',
'.',
], [
'__',
'--',
], $key);
if (isset($advagg_js_compressor_file_settings[$filename]) && $advagg_js_compressor_file_settings[$filename] == 0) {
unset($redo_list[$key]);
continue;
}
// Filter out .min.js if they have already been ran.
if (stripos(strrev($info['data']), $reversed_needle) === 0 && !empty($info['advagg_js_compress'][2]['ratio'])) {
unset($redo_list[$key]);
continue;
}
// Filter out file if it is empty.
$data = file_get_contents($info['data']);
if (empty($data)) {
unset($redo_list[$key]);
continue;
}
// Filter out file if it only contains a small amount of whitespace.
$count_ws = strlen($data);
$count = strlen(preg_replace('/\\s/', '', $data));
if ($count / $count_ws > 0.97) {
unset($redo_list[$key]);
continue;
}
}
shuffle($redo_list);
return array(
$list,
$redo_list,
);
}