diff --git a/projects/plugins/boost/app/lib/minify/functions-helpers.php b/projects/plugins/boost/app/lib/minify/functions-helpers.php index 9d5facfc291e8..c3ad8bdd312ce 100644 --- a/projects/plugins/boost/app/lib/minify/functions-helpers.php +++ b/projects/plugins/boost/app/lib/minify/functions-helpers.php @@ -353,7 +353,6 @@ function jetpack_boost_minify_serve_concatenated() { function jetpack_boost_minify_activation() { // Schedule cache cleanup. jetpack_boost_page_optimize_schedule_cache_cleanup(); - // Setup the cronjob to periodically test for the 404 handler. jetpack_boost_404_setup(); } @@ -378,6 +377,23 @@ function jetpack_boost_minify_deactivation() { } } +/** + * Run during deactivation of any minify module. + * + * This handles removing the 404 tester if both css and js minification are disabled. + * + * @return void + */ +function jetpack_boost_minify_deactivation() { + $minify_css = new Module( new Minify_CSS() ); + $minify_js = new Module( new Minify_JS() ); + + if ( ! $minify_css->is_enabled() && ! $minify_js->is_enabled() ) { + wp_clear_scheduled_hook( 'jetpack_boost_404_tester_cron' ); + jetpack_boost_clear_cache_cleanup_hook(); + } +} + /** * Run during initialization of any minify module. * diff --git a/projects/plugins/boost/app/modules/Modules_Index.php b/projects/plugins/boost/app/modules/Modules_Index.php index 45b07facd21c4..a99c4330d4861 100644 --- a/projects/plugins/boost/app/modules/Modules_Index.php +++ b/projects/plugins/boost/app/modules/Modules_Index.php @@ -8,6 +8,7 @@ use Automattic\Jetpack_Boost\Modules\Optimizations\Cloud_CSS\Cloud_CSS; use Automattic\Jetpack_Boost\Modules\Optimizations\Critical_CSS\Critical_CSS; use Automattic\Jetpack_Boost\Modules\Optimizations\Image_CDN\Image_CDN; +use Automattic\Jetpack_Boost\Modules\Optimizations\Minify\Minify; use Automattic\Jetpack_Boost\Modules\Optimizations\Minify\Minify_CSS; use Automattic\Jetpack_Boost\Modules\Optimizations\Minify\Minify_JS; use Automattic\Jetpack_Boost\Modules\Optimizations\Page_Cache\Page_Cache; @@ -30,6 +31,7 @@ class Modules_Index { Critical_CSS::class, Cloud_CSS::class, Image_Size_Analysis::class, + Minify::class, Minify_JS::class, Minify_CSS::class, Render_Blocking_JS::class, diff --git a/projects/plugins/boost/app/modules/optimizations/minify/Minify.php b/projects/plugins/boost/app/modules/optimizations/minify/Minify.php new file mode 100644 index 0000000000000..43ebb9086a820 --- /dev/null +++ b/projects/plugins/boost/app/modules/optimizations/minify/Minify.php @@ -0,0 +1,71 @@ + 0; + } + + public static function is_available() { + return true; + } + + /** + * Called by child modules (Minify_JS, Minify_CSS) when they are activated + */ + public static function register_active_module() { + $active_modules = get_option( 'jetpack_boost_minify_active_modules', 0 ); + ++$active_modules; + update_option( 'jetpack_boost_minify_active_modules', $active_modules ); + if ( $active_modules === 1 ) { + self::activate(); + } + } + + /** + * Called by child modules when they are deactivated + */ + public static function unregister_active_module() { + $active_modules = get_option( 'jetpack_boost_minify_active_modules', 1 ); + --$active_modules; + update_option( 'jetpack_boost_minify_active_modules', $active_modules < 0 ? 0 : $active_modules ); + if ( $active_modules === 0 ) { + delete_option( 'jetpack_boost_minify_active_modules' ); + self::deactivate(); + } + } + + /** + * This is called only when the module is activated. + */ + public static function activate() { + jetpack_boost_minify_activation(); + jetpack_boost_404_tester(); + } + + /** + * This is called only when the module is deactivated. + */ + public static function deactivate() { + jetpack_boost_minify_deactivation(); + } +} diff --git a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-css.php b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-css.php index b20ccbb4325fc..a69e168a5a5ed 100644 --- a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-css.php +++ b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-css.php @@ -13,6 +13,21 @@ class Minify_CSS implements Pluggable, Changes_Page_Output, Optimization, Has_Ac public static $default_excludes = array( 'admin-bar', 'dashicons', 'elementor-app' ); + public static function get_slug() { + return 'minify_css'; + } + + public function init_minify() { + global $wp_styles; + + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited + $wp_styles = new Concatenate_CSS( $wp_styles ); + $wp_styles->allow_gzip_compression = true; // @todo - used constant ALLOW_GZIP_COMPRESSION = true if not defined. + } + + /** + * Setup the module. This runs on every page load. + */ public function setup() { require_once JETPACK_BOOST_DIR_PATH . '/app/lib/minify/functions-helpers.php'; @@ -25,10 +40,6 @@ public function setup() { add_action( 'init', array( $this, 'init_minify' ) ); } - public static function get_slug() { - return 'minify_css'; - } - /** * The module starts serving as soon as it's enabled. * @@ -42,19 +53,18 @@ public static function is_available() { return true; } - public function init_minify() { - global $wp_styles; - - // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited - $wp_styles = new Concatenate_CSS( $wp_styles ); - $wp_styles->allow_gzip_compression = true; // @todo - used constant ALLOW_GZIP_COMPRESSION = true if not defined. - } - + /** + * This is called only when the module is activated. + */ public static function activate() { - jetpack_boost_minify_activation(); + Minify::register_active_module(); } + /** + * This is called only when the module is deactivated. + */ public static function deactivate() { + Minify::unregister_active_module(); jetpack_boost_page_optimize_cleanup_cache( 'css' ); jetpack_boost_minify_deactivation(); } diff --git a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php index 6dadbcb188139..6e58ce738a6e7 100644 --- a/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php +++ b/projects/plugins/boost/app/modules/optimizations/minify/class-minify-js.php @@ -13,6 +13,21 @@ class Minify_JS implements Pluggable, Changes_Page_Output, Optimization, Has_Act public static $default_excludes = array( 'jquery', 'jquery-core', 'underscore', 'backbone' ); + public static function get_slug() { + return 'minify_js'; + } + + public function init_minify() { + global $wp_scripts; + + // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited + $wp_scripts = new Concatenate_JS( $wp_scripts ); + $wp_scripts->allow_gzip_compression = true; // @todo - used constant ALLOW_GZIP_COMPRESSION = true if not defined. + } + + /** + * Setup the module. This runs on every page load. + */ public function setup() { require_once JETPACK_BOOST_DIR_PATH . '/app/lib/minify/functions-helpers.php'; @@ -25,10 +40,6 @@ public function setup() { add_action( 'init', array( $this, 'init_minify' ) ); } - public static function get_slug() { - return 'minify_js'; - } - /** * The module starts serving as soon as it's enabled. * @@ -42,19 +53,18 @@ public static function is_available() { return true; } - public function init_minify() { - global $wp_scripts; - - // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited - $wp_scripts = new Concatenate_JS( $wp_scripts ); - $wp_scripts->allow_gzip_compression = true; // @todo - used constant ALLOW_GZIP_COMPRESSION = true if not defined. - } - + /** + * This is called only when the module is activated. + */ public static function activate() { - jetpack_boost_minify_activation(); + Minify::register_active_module(); } + /** + * This is called only when the module is deactivated. + */ public static function deactivate() { + Minify::unregister_active_module(); jetpack_boost_page_optimize_cleanup_cache( 'js' ); jetpack_boost_minify_deactivation(); } diff --git a/projects/plugins/boost/changelog/update-boost-unified-minify-class b/projects/plugins/boost/changelog/update-boost-unified-minify-class new file mode 100644 index 0000000000000..2139ef7f4a7b6 --- /dev/null +++ b/projects/plugins/boost/changelog/update-boost-unified-minify-class @@ -0,0 +1,4 @@ +Significance: patch +Type: added + +Concatenation: create invisible "minify module" that handles deactivation of both modules.