oont-contents/plugins/wp-rocket/inc/Plugin.php
2025-02-08 15:10:23 +01:00

368 lines
11 KiB
PHP

<?php
namespace WP_Rocket;
use Imagify_Partner;
use WP_Rocket\Dependencies\League\Container\Container;
use WP_Rocket\Admin\Options;
use WP_Rocket\Engine\Admin\API\ServiceProvider as APIServiceProvider;
use WP_Rocket\Event_Management\Event_Manager;
use WP_Rocket\ThirdParty\Hostings\HostResolver;
use WP_Rocket\Addon\ServiceProvider as AddonServiceProvider;
use WP_Rocket\Addon\Varnish\ServiceProvider as VarnishServiceProvider;
use WP_Rocket\Engine\Admin\Beacon\ServiceProvider as BeaconServiceProvider;
use WP_Rocket\Engine\Admin\Database\ServiceProvider as AdminDatabaseServiceProvider;
use WP_Rocket\Engine\Admin\ServiceProvider as EngineAdminServiceProvider;
use WP_Rocket\Engine\Admin\Settings\ServiceProvider as SettingsServiceProvider;
use WP_Rocket\Engine\Cache\ServiceProvider as CacheServiceProvider;
use WP_Rocket\Engine\Capabilities\ServiceProvider as CapabilitiesServiceProvider;
use WP_Rocket\Engine\CDN\RocketCDN\ServiceProvider as RocketCDNServiceProvider;
use WP_Rocket\Engine\CDN\ServiceProvider as CDNServiceProvider;
use WP_Rocket\Engine\CriticalPath\ServiceProvider as CriticalPathServiceProvider;
use WP_Rocket\Engine\HealthCheck\ServiceProvider as HealthCheckServiceProvider;
use WP_Rocket\Engine\Heartbeat\ServiceProvider as HeartbeatServiceProvider;
use WP_Rocket\Engine\License\ServiceProvider as LicenseServiceProvider;
use WP_Rocket\Engine\Media\ServiceProvider as MediaServiceProvider;
use WP_Rocket\Engine\Optimization\AdminServiceProvider as OptimizationAdminServiceProvider;
use WP_Rocket\Engine\Optimization\DeferJS\ServiceProvider as DeferJSServiceProvider;
use WP_Rocket\Engine\Optimization\DelayJS\ServiceProvider as DelayJSServiceProvider;
use WP_Rocket\Engine\Optimization\DynamicLists\ServiceProvider as DynamicListsServiceProvider;
use WP_Rocket\Engine\Optimization\RUCSS\ServiceProvider as RUCSSServiceProvider;
use WP_Rocket\Engine\Optimization\ServiceProvider as OptimizationServiceProvider;
use WP_Rocket\Engine\Plugin\ServiceProvider as PluginServiceProvider;
use WP_Rocket\Engine\Preload\Links\ServiceProvider as PreloadLinksServiceProvider;
use WP_Rocket\Engine\Preload\ServiceProvider as PreloadServiceProvider;
use WP_Rocket\Engine\Support\ServiceProvider as SupportServiceProvider;
use WP_Rocket\ServiceProvider\Common_Subscribers;
use WP_Rocket\ServiceProvider\Options as OptionsServiceProvider;
use WP_Rocket\ThirdParty\Hostings\ServiceProvider as HostingsServiceProvider;
use WP_Rocket\ThirdParty\ServiceProvider as ThirdPartyServiceProvider;
use WP_Rocket\ThirdParty\Themes\ServiceProvider as ThemesServiceProvider;
/**
* Plugin Manager.
*/
class Plugin {
/**
* Instance of Container class.
*
* @since 3.3
*
* @var Container instance
*/
private $container;
/**
* Instance of the event manager.
*
* @since 3.6
*
* @var Event_Manager
*/
private $event_manager;
/**
* Flag for if the license key is valid.
*
* @since 3.6
*
* @var bool
*/
private $is_valid_key;
/**
* Instance of the Options.
*
* @since 3.6
*
* @var Options
*/
private $options_api;
/**
* Instance of the Options_Data.
*
* @since 3.6
*
* @var Options_Data
*/
private $options;
/**
* Creates an instance of the Plugin.
*
* @since 3.0
*
* @param string $template_path Path to the views.
* @param Container $container Instance of the container.
*/
public function __construct( $template_path, Container $container ) {
$this->container = $container;
add_filter( 'rocket_container', [ $this, 'get_container' ] );
$this->container->add( 'template_path', $template_path );
}
/**
* Returns the Rocket container instance.
*
* @return Container
*/
public function get_container() {
return $this->container;
}
/**
* Loads the plugin into WordPress.
*
* @since 3.0
*
* @return void
*/
public function load() {
$this->event_manager = new Event_Manager();
$this->container->share( 'event_manager', $this->event_manager );
$this->options_api = new Options( 'wp_rocket_' );
$this->container->add( 'options_api', $this->options_api );
$this->container->addServiceProvider( OptionsServiceProvider::class );
$this->options = $this->container->get( 'options' );
$this->container->addServiceProvider( AdminDatabaseServiceProvider::class );
$this->container->addServiceProvider( SupportServiceProvider::class );
$this->container->addServiceProvider( BeaconServiceProvider::class );
$this->container->addServiceProvider( RocketCDNServiceProvider::class );
$this->container->addServiceProvider( CacheServiceProvider::class );
$this->container->addServiceProvider( CriticalPathServiceProvider::class );
$this->container->addServiceProvider( HealthCheckServiceProvider::class );
$this->container->addServiceProvider( MediaServiceProvider::class );
$this->container->addServiceProvider( DeferJSServiceProvider::class );
$this->is_valid_key = rocket_valid_key();
foreach ( $this->get_subscribers() as $subscriber ) {
$this->event_manager->add_subscriber( $this->container->get( $subscriber ) );
}
}
/**
* Get the subscribers to add to the event manager.
*
* @since 3.6
*
* @return array array of subscribers.
*/
private function get_subscribers() {
if ( is_admin() ) {
$subscribers = $this->init_admin_subscribers();
} elseif ( $this->is_valid_key ) {
$subscribers = $this->init_valid_key_subscribers();
} else {
$subscribers = [];
}
return array_merge( $subscribers, $this->init_common_subscribers() );
}
/**
* Initializes the admin subscribers.
*
* @since 3.6
*
* @return array array of subscribers.
*/
private function init_admin_subscribers() {
if ( ! Imagify_Partner::has_imagify_api_key() ) {
$imagify = new Imagify_Partner( 'wp-rocket' );
$imagify->init();
remove_action( 'imagify_assets_enqueued', 'imagify_dequeue_sweetalert_wprocket' );
}
$this->container->add(
'settings_page_config',
[
'slug' => WP_ROCKET_PLUGIN_SLUG,
'title' => WP_ROCKET_PLUGIN_NAME,
'capability' => 'rocket_manage_options',
]
);
$this->container->addServiceProvider( SettingsServiceProvider::class );
$this->container->addServiceProvider( EngineAdminServiceProvider::class );
$this->container->addServiceProvider( OptimizationAdminServiceProvider::class );
return [
'beacon',
'settings_page_subscriber',
'deactivation_intent_subscriber',
'hummingbird_subscriber',
'rocketcdn_admin_subscriber',
'rocketcdn_notices_subscriber',
'rocketcdn_data_manager_subscriber',
'critical_css_admin_subscriber',
'health_check',
'minify_css_admin_subscriber',
'admin_cache_subscriber',
'google_fonts_admin_subscriber',
'image_dimensions_admin_subscriber',
'defer_js_admin_subscriber',
'lazyload_admin_subscriber',
'preload_admin_subscriber',
'minify_admin_subscriber',
'action_scheduler_check',
'actionscheduler_admin_subscriber',
];
}
/**
* For plugins with a valid key, initialize the subscribers.
*
* @since 3.6
*
* @return array array of subscribers.
*/
private function init_valid_key_subscribers() {
$this->container->addServiceProvider( OptimizationServiceProvider::class );
$subscribers = [
'buffer_subscriber',
'ie_conditionals_subscriber',
'combine_google_fonts_subscriber',
'minify_css_subscriber',
'minify_js_subscriber',
'cache_dynamic_resource',
'emojis_subscriber',
'delay_js_subscriber',
'image_dimensions_subscriber',
'defer_js_subscriber',
];
// Don't insert the LazyLoad file if Rocket LazyLoad is activated.
if ( ! rocket_is_plugin_active( 'rocket-lazy-load/rocket-lazy-load.php' ) ) {
$subscribers[] = 'lazyload_subscriber';
}
return $subscribers;
}
/**
* Initializes the common subscribers.
*
* @since 3.6
*
* @return array array of common subscribers.
*/
private function init_common_subscribers() {
$this->container->addServiceProvider( CapabilitiesServiceProvider::class );
$this->container->addServiceProvider( AddonServiceProvider::class );
$this->container->addServiceProvider( VarnishServiceProvider::class );
$this->container->addServiceProvider( PreloadServiceProvider::class );
$this->container->addServiceProvider( PreloadLinksServiceProvider::class );
$this->container->addServiceProvider( CDNServiceProvider::class );
$this->container->addServiceProvider( Common_Subscribers::class );
$this->container->addServiceProvider( ThirdPartyServiceProvider::class );
$this->container->addServiceProvider( HostingsServiceProvider::class );
$this->container->addServiceProvider( PluginServiceProvider::class );
$this->container->addServiceProvider( DelayJSServiceProvider::class );
$this->container->addServiceProvider( RUCSSServiceProvider::class );
$this->container->addServiceProvider( HeartbeatServiceProvider::class );
$this->container->addServiceProvider( DynamicListsServiceProvider::class );
$this->container->addServiceProvider( LicenseServiceProvider::class );
$this->container->addServiceProvider( ThemesServiceProvider::class );
$this->container->addServiceProvider( APIServiceProvider::class );
$common_subscribers = [
'license_subscriber',
'cdn_subscriber',
'critical_css_subscriber',
'sucuri_subscriber',
'expired_cache_purge_subscriber',
'fonts_preload_subscriber',
'heartbeat_subscriber',
'db_optimization_subscriber',
'mobile_subscriber',
'woocommerce_subscriber',
'bigcommerce_subscriber',
'syntaxhighlighter_subscriber',
'elementor_subscriber',
'bridge_subscriber',
'avada_subscriber',
'ngg_subscriber',
'smush_subscriber',
'plugin_updater_common_subscriber',
'plugin_information_subscriber',
'plugin_updater_subscriber',
'capabilities_subscriber',
'varnish_subscriber',
'rocketcdn_rest_subscriber',
'detect_missing_tags_subscriber',
'purge_actions_subscriber',
'beaverbuilder_subscriber',
'amp_subscriber',
'rest_cpcss_subscriber',
'simple_custom_css',
'pdfembedder',
'delay_js_admin_subscriber',
'rucss_admin_subscriber',
'rucss_frontend_subscriber',
'rucss_cron_subscriber',
'divi',
'preload_subscriber',
'preload_front_subscriber',
'polygon',
'preload_links_admin_subscriber',
'preload_links_subscriber',
'preload_cron_subscriber',
'support_subscriber',
'mod_pagespeed',
'webp_subscriber',
'imagify_webp_subscriber',
'shortpixel_webp_subscriber',
'ewww_webp_subscriber',
'optimus_webp_subscriber',
'adthrive',
'autoptimize',
'wp-meteor',
'revolution_slider_subscriber',
'wordfence_subscriber',
'ezoic',
'thirstyaffiliates',
'pwa',
'yoast_seo',
'flatsome',
'minimalist_blogger',
'convertplug',
'dynamic_lists_subscriber',
'jevelin',
'unlimited_elements',
'inline_related_posts',
'jetpack',
'rank_math_seo',
'all_in_one_seo_pack',
'seopress',
'the_seo_framework',
'wpml',
'xstore',
'cloudflare_plugin_subscriber',
'uncode',
'rocket_lazy_load',
'cache_config',
'the_events_calendar',
'admin_api_subscriber',
];
$host_type = HostResolver::get_host_service();
if ( ! empty( $host_type ) ) {
$common_subscribers[] = $host_type;
}
if ( $this->options->get( 'do_cloudflare', false ) ) {
$common_subscribers[] = 'cloudflare_subscriber';
}
return $common_subscribers;
}
}