public function minifyCSS($output) { global $vqmod; global $config; require_once DIR_SYSTEM . 'library/base32.php'; $css_pattern = '~<link rel="stylesheet" type="text\\/css" href="(.*?\\.css)".*?\\/?>~i'; $all_css_scripts = array(); $css_excludes = array(); $dir_include = ''; $cdn_css = ''; $base32_encode = new Base32(); if ($config->get('config_cdn_status') && $config->get('config_cdn_css')) { // SETUP CDN URLS $cdn_css = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == '1') ? $config->get('config_cdn_https') : $config->get('config_cdn_http'); } $parsed_url = parse_url(HTTP_SERVER); if (strlen($parsed_url['path']) > 1) { $dir_include = substr($parsed_url['path'], 1, strlen($parsed_url['path']) - 1); } if (preg_match('~.*<\\/head>~im', $output) && !defined('DIR_CATALOG')) { // IF OUTPUT HAS A HTML HEAD SECTION $header_data_split = preg_split('~<\\/head>~i', $output); $header_data = $header_data_split[0]; $after_header_data = $header_data_split[1]; $match_data = preg_replace('/<!--\\[if.*?\\]>\\s*?.*?<!\\[endif\\]-->/is', '', $header_data); //REMOVE CONDITIONAL DATA $match_data = preg_replace('/<!--.*?-->/is', '', $match_data); //REMOVE COMMENTED DATA $match_data = preg_replace('~<link rel="stylesheet" type="text\\/css" href="http(.*?\\.css)".*?\\/?>~i', '', $match_data); //REMOVE EXTERNAL CSS $match_data = preg_replace('~<link rel="stylesheet" type="text\\/css" href="\\/\\/(.*?\\.css)".*?\\/?>~i', '', $match_data); //REMOVE EXTERNAL JAVASCRIPT $match_data = preg_replace('~\\?v\\=1\\.0\\.11~i', '', $match_data); //SHOPPICA //CSS EXCLUDES $css_exclude = $config->get('config_ipscss_excludes'); if (!empty($css_exclude)) { $css_excludes = explode($css_exclude, ","); foreach ($css_excludes as $csse) { $match_data = preg_replace('~<link rel="stylesheet" type="text\\/css" href=".*?' . trim($csse) . '.*?".*?\\/?>~i', '', $match_data); //REMOVE CUSTOM CSS } } $match_data = preg_replace('~<link rel="stylesheet" type="text\\/css" href="\\/\\/(.*?\\.css)".*?\\/?>~i', '', $match_data); //REMOVE EXTERNAL JAVASCRIPT $css_files = array(); preg_match_all($css_pattern, $match_data, $matches, PREG_OFFSET_CAPTURE); foreach ($matches[1] as $match) { $css_files[] = $match[0]; } $css_base = $this->getCommonPath($css_files); foreach ($css_files as $key => $cssfile) { if (!empty($css_base)) { $css_base = substr($css_base, -1) == '/' ? substr($css_base, 0, -1) : $css_base; //REMOVE TRAILING SLASH IF EXISTING $css_files[$key] = str_replace($css_base . '/', '', $cssfile); } $header_data = preg_replace('~<link rel="stylesheet" type="text\\/css" href="' . str_replace('/', '\\/', $cssfile) . '".*?/?>~i', '', $header_data); } if ($css_files) { //IF WE HAVE CSS FILES TO COMBINE if ($config->get('config_minify_encode_url')) { $css_combined = $cdn_css . '/' . $dir_include . 'min/' . (strlen($css_base . $dir_include) ? $base32_encode->toBase('b=' . $dir_include . $css_base) . '/' : '') . $base32_encode->toBase('f=' . implode(array_unique($css_files), ',')) . '/combined.css'; } else { $css_combined = $cdn_css . '/' . $dir_include . 'min/index.php?' . (strlen($css_base . $dir_include) ? 'b=' . $dir_include . $css_base . '&' : '') . 'f=' . implode(array_unique($css_files), ','); } $header_data = preg_replace('~</title>~', '</title>' . "\n" . '<link type="text/css" rel="stylesheet" href="' . $css_combined . '" media="all" />', $header_data); } return $header_data . '</head>' . $after_header_data; } else { return $output; } }