add wp-rocket
This commit is contained in:
159
wp-content/plugins/wp-rocket/inc/ThirdParty/Plugins/Optimization/AMP.php
vendored
Normal file
159
wp-content/plugins/wp-rocket/inc/ThirdParty/Plugins/Optimization/AMP.php
vendored
Normal file
@@ -0,0 +1,159 @@
|
||||
<?php
|
||||
namespace WP_Rocket\ThirdParty\Plugins\Optimization;
|
||||
|
||||
use WP_Rocket\Admin\Options_Data;
|
||||
use WP_Rocket\Engine\CDN\Subscriber;
|
||||
use WP_Rocket\Event_Management\Subscriber_Interface;
|
||||
|
||||
/**
|
||||
* Subscriber for compatibility with AMP
|
||||
*
|
||||
* @since 3.5.2
|
||||
*/
|
||||
class AMP implements Subscriber_Interface {
|
||||
const QUERY = 'amp';
|
||||
const AMP_OPTIONS = 'amp-options';
|
||||
|
||||
/**
|
||||
* WP Rocket CDN Subscriber.
|
||||
*
|
||||
* @var Subscriber_Interface
|
||||
*/
|
||||
private $cdn_subscriber;
|
||||
|
||||
/**
|
||||
* WP Rocket Options instance
|
||||
*
|
||||
* @var Options_Data
|
||||
*/
|
||||
private $options;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Options_Data $options WP Rocket Options instance.
|
||||
* @param Subscriber_Interface $cdn_subscriber WP Rocket CDN Subscriber.
|
||||
*/
|
||||
public function __construct( Options_Data $options, Subscriber_Interface $cdn_subscriber ) {
|
||||
$this->options = $options;
|
||||
$this->cdn_subscriber = $cdn_subscriber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribed events for AMP.
|
||||
*
|
||||
* @since 3.5.2
|
||||
*/
|
||||
public static function get_subscribed_events() {
|
||||
$events = [
|
||||
'activate_amp/amp.php' => 'generate_config_file',
|
||||
'deactivate_amp/amp.php' => 'generate_config_file',
|
||||
'wp' => 'disable_options_on_amp',
|
||||
];
|
||||
if ( function_exists( 'is_amp_endpoint' ) ) {
|
||||
$events['rocket_cache_query_strings'] = 'is_amp_compatible_callback';
|
||||
$events['update_option_amp-options'] = 'generate_config_file';
|
||||
}
|
||||
|
||||
return $events;
|
||||
}
|
||||
|
||||
/**
|
||||
* Regenerate config file on plugin activation / deactivation.
|
||||
*
|
||||
* @since 3.5.2
|
||||
*/
|
||||
public function generate_config_file() {
|
||||
rocket_generate_config_file();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add compatibility with AMP query string by adding it as a cached query string.
|
||||
*
|
||||
* @since 3.5.2
|
||||
*
|
||||
* @param array $value WP Rocket cache_query_strings value.
|
||||
* @return array
|
||||
*/
|
||||
public function is_amp_compatible_callback( $value ) {
|
||||
$options = get_option( self::AMP_OPTIONS, [] );
|
||||
$query_strings = array_diff( $value, [ static::QUERY ] );
|
||||
|
||||
if ( empty( $options['theme_support'] ) ) {
|
||||
return $query_strings;
|
||||
}
|
||||
|
||||
if ( in_array( $options['theme_support'], [ 'transitional', 'reader' ], true ) ) {
|
||||
$query_strings[] = static::QUERY;
|
||||
}
|
||||
|
||||
return $query_strings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes Minification, DNS Prefetch, LazyLoad, Defer JS when on an AMP document.
|
||||
*
|
||||
* This covers AMP documents as output by the official AMP plugin for WordPress
|
||||
* (https://amp-wp.org/) as well as Web Stories for WordPress (https://wp.stories.google/),
|
||||
* which both support the `is_amp_endpoint` function checks.
|
||||
*
|
||||
* However, in the case of Web Stories, `is_amp_endpoint` is only defined on
|
||||
* the `wp` action, not earlier. Hence doing the `function_exists` check at this stage
|
||||
* instead of in the `get_subscribed_events()` method.
|
||||
*
|
||||
* @since 3.5.2
|
||||
*/
|
||||
public function disable_options_on_amp() {
|
||||
if ( ! function_exists( 'is_amp_endpoint' ) || ! is_amp_endpoint() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
global $wp_filter;
|
||||
|
||||
remove_filter( 'wp_resource_hints', 'rocket_dns_prefetch', 10, 2 );
|
||||
add_filter( 'do_rocket_lazyload', '__return_false' );
|
||||
add_filter( 'do_rocket_lazyload_iframes', '__return_false' );
|
||||
unset( $wp_filter['rocket_buffer'] );
|
||||
|
||||
$options = get_option( self::AMP_OPTIONS, [] );
|
||||
|
||||
if ( ! empty( $options['theme_support'] )
|
||||
&&
|
||||
in_array( $options['theme_support'], [ 'transitional', 'reader' ], true ) ) {
|
||||
add_filter( 'rocket_cdn_reject_files', [ $this, 'reject_files' ], PHP_INT_MAX );
|
||||
add_filter( 'rocket_buffer', [ $this->cdn_subscriber, 'rewrite' ] );
|
||||
add_filter( 'rocket_buffer', [ $this->cdn_subscriber, 'rewrite_srcset' ] );
|
||||
}
|
||||
|
||||
if (
|
||||
(bool) $this->options->get( 'do_cloudflare', 0 )
|
||||
&&
|
||||
(
|
||||
(bool) $this->options->get( 'cloudflare_protocol_rewrite', 0 )
|
||||
||
|
||||
// this filter is documented in inc/front/protocol.php.
|
||||
(bool) apply_filters( 'do_rocket_protocol_rewrite', false ) // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals
|
||||
)
|
||||
) {
|
||||
remove_filter( 'wp_calculate_image_srcset', 'rocket_protocol_rewrite_srcset', PHP_INT_MAX );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds all CSS and JS files to the list of excluded CDN files.
|
||||
*
|
||||
* @since 3.5.5
|
||||
*
|
||||
* @param array $files List of excluded files.
|
||||
* @return array List of excluded files.
|
||||
*/
|
||||
public function reject_files( $files ) {
|
||||
return array_merge(
|
||||
$files,
|
||||
[
|
||||
'(.*).css',
|
||||
'(.*).js',
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
295
wp-content/plugins/wp-rocket/inc/ThirdParty/Plugins/Optimization/Hummingbird.php
vendored
Normal file
295
wp-content/plugins/wp-rocket/inc/ThirdParty/Plugins/Optimization/Hummingbird.php
vendored
Normal file
@@ -0,0 +1,295 @@
|
||||
<?php
|
||||
namespace WP_Rocket\ThirdParty\Plugins\Optimization;
|
||||
|
||||
use WP_Hummingbird_Settings;
|
||||
use WP_Hummingbird_Utils;
|
||||
use WP_Rocket\Admin\Options_Data;
|
||||
use WP_Rocket\Event_Management\Subscriber_Interface;
|
||||
|
||||
/**
|
||||
* Hummingbird compatibility class
|
||||
*/
|
||||
class Hummingbird implements Subscriber_Interface {
|
||||
/**
|
||||
* WP Rocket Options instance
|
||||
*
|
||||
* @var Options_Data
|
||||
*/
|
||||
private $options;
|
||||
|
||||
/**
|
||||
* Array containing the errors
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $errors = [];
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param Options_Data $options WP Rocket Options instance.
|
||||
*/
|
||||
public function __construct( Options_Data $options ) {
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an array of events that this subscriber wants to listen to.
|
||||
*
|
||||
* @since 3.3.3
|
||||
* @author Remy Perona
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_subscribed_events() {
|
||||
return [
|
||||
'admin_notices' => 'warning_notice',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a notice if conflicting options are active
|
||||
*
|
||||
* @since 3.3.3
|
||||
* @author Remy Perona
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function warning_notice() {
|
||||
if ( ! current_user_can( 'rocket_manage_options' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! is_plugin_active( 'hummingbird-performance/wp-hummingbird.php' ) && ! is_plugin_active( 'wp-hummingbird/wp-hummingbird.php' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->check_cache();
|
||||
$this->check_assets();
|
||||
$this->check_browser_caching();
|
||||
$this->check_gzip();
|
||||
$this->check_emoji();
|
||||
|
||||
if ( 0 === count( $this->errors ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Translators: %s = Plugin name.
|
||||
$message = '<p>' . sprintf( _nx( 'Please deactivate the following %s option which conflicts with WP Rocket features:', 'Please deactivate the following %s options which conflict with WP Rocket features:', count( $this->errors ), 'Hummingbird notice', 'rocket' ), 'Hummingbird' ) . '</p>';
|
||||
|
||||
$message .= '<ul>';
|
||||
|
||||
foreach ( $this->errors as $error ) {
|
||||
$message .= '<li>' . $error . '</li>';
|
||||
}
|
||||
|
||||
$message .= '</ul>';
|
||||
|
||||
rocket_notice_html(
|
||||
[
|
||||
'status' => 'error',
|
||||
'message' => $message,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the Hummingbird Utils class exists
|
||||
*
|
||||
* @since 3.3.3
|
||||
* @author Remy Perona
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function is_utils_available() {
|
||||
if ( ! class_exists( 'WP_Hummingbird_Utils' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! method_exists( 'WP_Hummingbird_Utils', 'get_module' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the Hummingbird settings class exists
|
||||
*
|
||||
* @since 3.3.3
|
||||
* @author Remy Perona
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function is_settings_available() {
|
||||
if ( ! class_exists( 'WP_Hummingbird_Settings' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! method_exists( 'WP_Hummingbird_Settings', 'get_setting' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if Hummingbird and WP Rocket disable emoji options are active at the same time
|
||||
*
|
||||
* @since 3.3.3
|
||||
* @author Remy Perona
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function check_emoji() {
|
||||
if ( ! $this->is_settings_available() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( $this->options->get( 'emoji' ) && WP_Hummingbird_Settings::get_setting( 'emoji', 'advanced' ) ) {
|
||||
// Translators: %1$s = Plugin name, %2$s = <em>, %3$s = </em>.
|
||||
$this->errors[] = sprintf( _x( '%1$s %2$sdisable emoji%3$s conflicts with WP Rockets %2$sdisable emoji%3$s', 'Hummingbird notice', 'rocket' ), 'Hummingbird', '<em>', '</em>' );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if Hummingbird Gzip rules are in the htaccess file.
|
||||
*
|
||||
* @since 3.3.3
|
||||
* @author Remy Perona
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function check_gzip() {
|
||||
if ( ! $this->is_utils_available() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$gzip = WP_Hummingbird_Utils::get_module( 'gzip' );
|
||||
|
||||
if ( ! $gzip instanceof \WP_Hummingbird_Module_GZip ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! method_exists( $gzip, 'is_htaccess_written' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! method_exists( $gzip, 'get_server_type' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( $gzip::is_htaccess_written( 'gzip' ) && 'apache' === $gzip::get_server_type() ) {
|
||||
// Translators: %1$s = Plugin name, %2$s = <em>, %3$s = </em>.
|
||||
$this->errors[] = sprintf( _x( '%1$s %2$sGZIP compression%3$s conflicts with WP Rocket %2$sGZIP compression%3$s', 'Hummingbird notice', 'rocket' ), 'Hummingbird', '<em>', '</em>' );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if Hummingbird browser caching rules are in the htaccess file
|
||||
*
|
||||
* @since 3.3.3
|
||||
* @author Remy Perona
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function check_browser_caching() {
|
||||
if ( ! $this->is_utils_available() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$caching = WP_Hummingbird_Utils::get_module( 'caching' );
|
||||
|
||||
if ( ! $caching instanceof \WP_Hummingbird_Module_Caching ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! method_exists( $caching, 'is_htaccess_written' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! method_exists( $caching, 'get_server_type' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( $caching::is_htaccess_written( 'caching' ) && 'apache' === $caching::get_server_type() ) {
|
||||
// Translators: %1$s = Plugin name, %2$s = <em>, %3$s = </em>.
|
||||
$this->errors[] = sprintf( _x( '%1$s %2$sbrowser caching%3$s conflicts with WP Rocket %2$sbrowser caching%3$s', 'Hummingbird notice', 'rocket' ), 'Hummingbird', '<em>', '</em>' );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if Hummingbird Cache is active
|
||||
*
|
||||
* @since 3.3.3
|
||||
* @author Remy Perona
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function check_cache() {
|
||||
if ( ! $this->is_utils_available() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$cache = WP_Hummingbird_Utils::get_module( 'page_cache' );
|
||||
|
||||
if ( ! $cache instanceof \WP_Hummingbird_Module_Page_Cache ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! method_exists( $cache, 'is_active' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( $cache->is_active() ) {
|
||||
// Translators: %1$s = Plugin name, %2$s = <em>, %3$s = </em>.
|
||||
$this->errors[] = sprintf( _x( '%1$s %2$spage caching%3$s conflicts with WP Rocket %2$spage caching%3$s', 'Hummingbird notice', 'rocket' ), 'Hummingbird', '<em>', '</em>' );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if Hummingbird Assets optimization is active
|
||||
*
|
||||
* Checks against WP Rocket Minify CSS, Minify JS and Defer JS options.
|
||||
*
|
||||
* @since 3.3.3
|
||||
* @author Remy Perona
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function check_assets() {
|
||||
if ( ! $this->is_utils_available() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$minify = WP_Hummingbird_Utils::get_module( 'minify' );
|
||||
|
||||
if ( ! $minify instanceof \WP_Hummingbird_Module_Minify ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! method_exists( $minify, 'is_active' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( $minify->is_active() && ( $this->options->get( 'minify_css' ) || $this->options->get( 'minify_js' ) || $this->options->get( 'defer_all_js' ) ) ) {
|
||||
// Translators: %1$s = Plugin name, %2$s = <em>, %3$s = </em>.
|
||||
$this->errors[] = sprintf( _x( '%1$s %2$sasset optimization%3$s conflicts with WP Rocket %2$sfile optimization%3$s', 'Hummingbird notice', 'rocket' ), 'Hummingbird', '<em>', '</em>' );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user