File "class-minify-css-20250626045419.php"
Full Path: /home/theinspectionboy/public_html/suffolk/includes-20250622113618/class-minify-css-20250626045419.php
File size: 7.65 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Class and methods to minify CSS.
*
* @link https://ewww.io/swis/
* @package SWIS_Performance
*/
namespace SWIS;
use MatthiasMullie\Minify;
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Enables plugin to filter CSS tags and minify the stylesheets.
*/
final class Minify_CSS extends Page_Parser {
/**
* A list of user-defined exclusions, populated by validate_user_exclusions().
*
* @access protected
* @var array $user_exclusions
*/
protected $user_exclusions = array();
/**
* The directory to store the minifed CSS files.
*
* @access protected
* @var string $cache_dir
*/
protected $cache_dir = '';
/**
* Register actions and filters for CSS Minify.
*/
function __construct() {
if ( ! $this->get_option( 'minify_css' ) ) {
return;
}
if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
return;
}
parent::__construct();
$this->debug_message( '<b>' . __METHOD__ . '()</b>' );
$uri = add_query_arg( null, null );
$this->debug_message( "request uri is $uri" );
/**
* Allow pre-empting CSS minify by page.
*
* @param bool Whether to skip parsing the page.
* @param string $uri The URL of the page.
*/
if ( apply_filters( 'swis_skip_css_minify_by_page', false, $uri ) ) {
return;
}
$this->cache_dir = $this->content_dir . 'cache/css/';
if ( ! is_dir( $this->cache_dir ) ) {
if ( ! wp_mkdir_p( $this->cache_dir ) ) {
return;
}
}
if ( ! is_writable( $this->cache_dir ) ) {
return;
}
$this->cache_dir_url = $this->content_url . 'cache/css/';
// Overrides for user exclusions.
add_filter( 'swis_skip_css_minify', array( $this, 'skip_css_minify' ), 10, 2 );
// Get all the stylesheet URLs and minify them (if necessary).
add_filter( 'style_loader_src', array( $this, 'minify_styles' ) );
add_filter( 'swis_elements_link_href', array( $this, 'minify_styles' ) );
// Minify any custom CSS.
add_filter( 'wp_get_custom_css', array( $this, 'minify_raw_css' ), 20 );
$this->validate_user_exclusions();
}
/**
* Validate the user-defined exclusions.
*/
function validate_user_exclusions() {
$this->user_exclusions = array(
'.min.',
'.min-',
'-min.',
'autoptimize',
'/bb-plugin/cache/',
'brizy/public/editor',
'/cache/et/',
'/cache/min/',
'/cache/wpfc',
'/comet-cache/',
'cornerstone/assets/',
'Divi/includes/builder/',
'/Divi/style.css',
'/et-cache/',
'jch-optimize',
'/siteground-optimizer-assets/',
);
$user_exclusions = $this->get_option( 'minify_css_exclude' );
if ( ! empty( $user_exclusions ) ) {
if ( is_string( $user_exclusions ) ) {
$user_exclusions = array( $user_exclusions );
}
if ( is_array( $user_exclusions ) ) {
foreach ( $user_exclusions as $exclusion ) {
if ( ! is_string( $exclusion ) ) {
continue;
}
$this->user_exclusions[] = $exclusion;
}
}
}
}
/**
* Exclude CSS from being processed based on user specified list.
*
* @param boolean $skip Whether SWIS should skip processing.
* @param string $url The script URL.
* @return boolean True to skip the resource, unchanged otherwise.
*/
function skip_css_minify( $skip, $url ) {
if ( $this->user_exclusions ) {
foreach ( $this->user_exclusions as $exclusion ) {
if ( false !== strpos( $url, $exclusion ) ) {
$this->debug_message( __METHOD__ . "(); excluded $url via $exclusion" );
return true;
}
}
}
return $skip;
}
/**
* Get the absolute path from a URL.
*
* @param string $url The resource URL to translate to a local path.
* @return string|bool The file path, if found, or false.
*/
function get_local_path( $url ) {
// Need to strip query strings.
$url_parts = explode( '?', $url );
if ( ! is_array( $url_parts ) || empty( $url_parts[0] ) ) {
return false;
}
$url = $url_parts[0];
$file = $this->url_to_path_exists( $url );
if ( ! $file ) {
$local_domain = $this->parse_url( $this->content_url, PHP_URL_HOST );
if ( false === strpos( $url, $local_domain ) ) {
$remote_domain = $this->parse_url( $url, PHP_URL_HOST );
$possible_local_url = str_replace( $remote_domain, $local_domain, $url );
$file = $this->url_to_path_exists( $possible_local_url );
}
}
return $file;
}
/**
* Build a path to cache the file on disk after minification.
*
* @param string $file The absolute path to the original file.
* @param string $mod_time The modification time of the file.
* @return string The location to store the minified file in the cache.
*/
function get_cache_path( $file, $mod_time ) {
if ( 0 === strpos( $file, WP_CONTENT_DIR ) ) {
$path_to_keep = str_replace( WP_CONTENT_DIR, '', $file );
} elseif ( 0 === strpos( $file, ABSPATH ) ) {
$path_to_keep = str_replace( ABSPATH, '', $file );
} else {
return false;
}
$extension = pathinfo( $file, PATHINFO_EXTENSION );
if ( $extension && $mod_time ) {
$path_to_keep = preg_replace( "/\.$extension/", "-$mod_time.min.$extension", $path_to_keep );
} elseif ( $mod_time ) {
$path_to_keep = $path_to_keep . "-$mod_time.min.css";
}
$cache_file = $this->cache_dir . ltrim( $path_to_keep, '/\\' );
$cache_dir = dirname( $cache_file );
if ( ! is_dir( $cache_dir ) ) {
if ( ! wp_mkdir_p( $cache_dir ) ) {
return false;
}
}
if ( ! is_writable( $cache_dir ) ) {
return false;
}
return $cache_file;
}
/**
* Build a URL for the cached file.
*
* @param string $file The absolute path to the original file.
* @param string $mod_time The modification time of the file.
* @param string $query_string The query string from the original URL. If none, defaults to null.
* @return string The location to store the minified file in the cache.
*/
function get_cache_url( $file, $mod_time, $query_string = null ) {
if ( 0 === strpos( $file, WP_CONTENT_DIR ) ) {
$path_to_keep = str_replace( WP_CONTENT_DIR, '', $file );
} elseif ( 0 === strpos( $file, ABSPATH ) ) {
$path_to_keep = str_replace( ABSPATH, '', $file );
} else {
return false;
}
$extension = pathinfo( $file, PATHINFO_EXTENSION );
if ( $extension && $mod_time ) {
$path_to_keep = preg_replace( "/\.$extension/", "-$mod_time.min.$extension", $path_to_keep );
} elseif ( $mod_time ) {
$path_to_keep = $path_to_keep . "-$mod_time.min.css";
}
$cache_url = $this->cache_dir_url . ltrim( $path_to_keep, '/\\' ) . ( $query_string ? "?$query_string" : '' );
return $cache_url;
}
/**
* Minifies scripts if necessary.
*
* @param string $url URL to the script.
* @return string The minified URL for the resource, if it was allowed.
*/
function minify_styles( $url ) {
if ( ! $this->is_frontend() ) {
return $url;
}
if ( apply_filters( 'swis_skip_css_minify', false, $url ) ) {
return $url;
}
if ( ! $this->function_exists( 'filemtime' ) ) {
return $url;
}
$file = $this->get_local_path( $url );
if ( ! $file ) {
return $url;
}
$mod_time = filemtime( $file );
$cache_file = $this->get_cache_path( $file, $mod_time );
$cache_url = $this->get_cache_url( $file, $mod_time, $this->parse_url( $url, PHP_URL_QUERY ) );
if ( $cache_file && ! $this->is_file( $cache_file ) ) {
$minifier = new Minify\CSS( $file );
$minifier->minify( $cache_file );
}
if ( $this->is_file( $cache_file ) && ! empty( $cache_url ) ) {
return $cache_url;
}
return $url;
}
/**
* Minifies raw CSS code.
*
* @param string $css CSS to minify.
* @return string The minified CSS.
*/
function minify_raw_css( $css ) {
if ( ! $this->is_frontend() ) {
return $css;
}
if ( ! empty( $css ) ) {
$minifier = new Minify\CSS( $css );
$new_css = $minifier->minify();
if ( ! empty( $new_css ) ) {
$css = $new_css;
}
}
return $css;
}
}