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.advagg.inc, line 271

Code

function advagg_advagg_get_info_on_files_alter(&$return, $cached_data, $bypass_cache) {
    // Check for the ie_css_selector_limiter.
    if (variable_get('advagg_ie_css_selector_limiter', ADVAGG_IE_CSS_SELECTOR_LIMITER)) {
        $limit_value = variable_get('advagg_ie_css_selector_limiter_value', ADVAGG_IE_CSS_SELECTOR_LIMITER_VALUE);
        // Get the css path.
        list($css_path) = advagg_get_root_files_dir();
        $css_parts_path = advagg_s3fs_evaluate_no_rewrite_cssjs(FALSE) ? $css_path[0] : $css_path[1];
        $parts_path = $css_parts_path . '/parts/';
        foreach ($return as &$info) {
            // Skip if not a css file.
            if (empty($info['fileext']) || $info['fileext'] !== 'css') {
                continue;
            }
            // Check if this is a split css file.
            if (strpos($info['data'], $parts_path) !== FALSE) {
                $info['split'] = TRUE;
            }
            elseif ($info['linecount'] > $limit_value) {
                advagg_split_css_file($info);
            }
        }
        unset($info);
    }
    // Capture resource_hints.
    if (variable_get('advagg_resource_hints_dns_prefetch', ADVAGG_RESOURCE_HINTS_DNS_PREFETCH) || variable_get('advagg_resource_hints_preconnect', ADVAGG_RESOURCE_HINTS_PRECONNECT) || variable_get('advagg_resource_hints_preload', ADVAGG_RESOURCE_HINTS_PRELOAD)) {
        $aggregate_settings = advagg_current_hooks_hash_array();
        foreach ($return as &$info) {
            // Skip if not a css file.
            if (empty($info['fileext']) || $info['fileext'] !== 'css') {
                continue;
            }
            // Get the file contents.
            $file_contents = (string) @advagg_file_get_contents($info['data']);
            $file_contents = advagg_load_css_stylesheet($info['data'], FALSE, $aggregate_settings, $file_contents);
            // Get domain names and external assets in this css file.
            $hosts = array();
            $urls = array();
            $matches = array();
            $pattern = '%url\\(\\s*+[\'"]?+(http:\\/\\/|https:\\/\\/|\\/\\/)([^\'"()\\s]++)[\'"]?+\\s*+\\)%i';
            preg_match_all($pattern, $file_contents, $matches);
            if (!empty($matches[1])) {
                foreach ($matches[1] as $key => $match) {
                    $url = $match . $matches[2][$key];
                    $parse = @parse_url($url);
                    if (!empty($parse['host'])) {
                        $extra = '';
                        $ext = strtolower(pathinfo($url, PATHINFO_EXTENSION));
                        $supported = array(
                            'eot',
                            'woff2',
                            'woff',
                            'ttf',
                            'otf',
                        );
                        if (in_array($ext, $supported)) {
                            $extra .= '#crossorigin';
                        }
                        $hosts[$parse['host'] . $extra] = $match . $parse['host'] . '/' . $extra;
                        $urls[$url] = $url;
                    }
                }
            }
            if (!empty($hosts) && (variable_get('advagg_resource_hints_dns_prefetch', ADVAGG_RESOURCE_HINTS_DNS_PREFETCH) || variable_get('advagg_resource_hints_preconnect', ADVAGG_RESOURCE_HINTS_PRECONNECT))) {
                $info['dns_prefetch'] = array_values($hosts);
            }
            // Get local files to preload in this css file.
            if (variable_get('advagg_resource_hints_preload', ADVAGG_RESOURCE_HINTS_PRELOAD)) {
                $matches = array();
                $pattern = '/url\\(\\s*+[\'"]?(.*?)[\'"\\s]?+\\)/i';
                preg_match_all($pattern, $file_contents, $matches);
                if (!empty($matches[1])) {
                    foreach ($matches[1] as $key => $match) {
                        $url = advagg_convert_abs_to_rel($match);
                        $parse = @parse_url($url);
                        if (empty($parse['host'])) {
                            $urls[$url] = $url;
                        }
                    }
                }
                if (!empty($urls)) {
                    $info['preload'] = array_values($urls);
                }
            }
        }
        unset($info);
    }
}