Example #1
0
 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 . '&amp;' : '') . '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;
     }
 }