Implements hook_advagg_get_info_on_files_alter().

Used to make sure the info is up to date in the cache.

Related topics

File

advagg_js_compress/advagg_js_compress.advagg.inc, line 23

Code

function advagg_js_compress_advagg_get_info_on_files_alter(&$return, $cached_data, $bypass_cache) {
    $compressor_list = advagg_js_compress_get_enabled_compressors(array(), -1);
    // Get cache ids.
    $cache_ids = array();
    foreach ($return as $filename => &$info) {
        if (empty($info['fileext']) || $info['fileext'] !== 'js') {
            continue;
        }
        // Check the cache.
        $cache_id = 'advagg:js_compress:info:' . $info['filename_hash'];
        $cache_id .= !empty($info['content_hash']) ? ':' . $info['content_hash'] : '';
        $cache_ids[$filename] = $cache_id;
        // Verify current data.
        $advagg_js_compress = array();
        if (!empty($info['advagg_js_compress'])) {
            foreach ($info['advagg_js_compress'] as $values) {
                $array_key = array_search($values['name'], $compressor_list);
                if ($array_key !== FALSE) {
                    $cache_hits_data[$array_key] = $values;
                }
            }
        }
        ksort($advagg_js_compress);
        $info['advagg_js_compress'] = $advagg_js_compress;
    }
    unset($info);
    // If no cache ids are found bail out.
    if (empty($cache_ids)) {
        return;
    }
    // Get cached values.
    $values = array_values($cache_ids);
    $cache_hits = cache_get_multiple($values, 'cache_advagg_info');
    $compressors = advagg_js_compress_get_enabled_compressors();
    $advagg_get_info_on_file_cached_data = drupal_static('advagg_get_info_on_file');
    // Add cached values into $return.
    $filenames_info = array();
    foreach ($cache_ids as $filename => $cache_id) {
        $info =& $return[$filename];
        // Add in cached values.
        if (!empty($cache_hits[$cache_id]) && isset($cache_hits[$cache_id]->data)) {
            // Verify cache data.
            $cache_hits_data = array();
            foreach ($cache_hits[$cache_id]->data as $values) {
                $array_key = array_search($values['name'], $compressor_list);
                if ($array_key !== FALSE) {
                    $cache_hits_data[$array_key] = $values;
                }
            }
            ksort($cache_hits_data);
            $info['advagg_js_compress'] = array_replace($info['advagg_js_compress'], $cache_hits_data);
        }
        // Generate missing values if needed.
        foreach ($compressors as $id => $name) {
            if (empty($info['advagg_js_compress'][$id])) {
                $filenames_info[$filename] = $info;
                break;
            }
            // Generate values if bypass cache is set and hashes do not match.
            if ($bypass_cache && (empty($advagg_get_info_on_file_cached_data[$info['cache_id']]['content_hash']) || $info['content_hash'] !== $advagg_get_info_on_file_cached_data[$info['cache_id']]['content_hash'])) {
                $filenames_info[$filename] = $info;
                break;
            }
        }
    }
    // Do nothing if compressors are disabled or cache level does not equal 0.
    if (empty($compressors) || variable_get('advagg_cache_level', ADVAGG_CACHE_LEVEL) != 0) {
        return;
    }
    if (!empty($filenames_info)) {
        $results = advagg_js_compress_run_mutiple_tests($filenames_info, $compressors);
        foreach ($results as $filename => $data) {
            $info =& $return[$filename];
            if (!empty($info['advagg_js_compress'])) {
                $data += $info['advagg_js_compress'];
            }
            $info['advagg_js_compress'] = $data;
        }
    }
}