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 dans advagg_js_compress/advagg_js_compress.admin.inc
Form builder; Configure advagg settings.
advagg_js_compress_batch_callback dans advagg_js_compress/advagg_js_compress.module
The batch callback.
advagg_js_compress_cron dans advagg_js_compress/advagg_js_compress.module
Implements hook_cron().
drush_advagg_js_compress dans advagg_js_compress/advagg_js_compress.drush.inc
Callback function for drush advagg-js-compress.

Fichier

advagg_js_compress/advagg_js_compress.module, line 467

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,
    );
}