is_plugin_installed = true; } } /** * Method init() * * Initiate action hooks. * * @return void */ public function init() { if ( ! $this->is_plugin_installed ) { return; } add_filter( 'mainwp_site_sync_others_data', array( $this, 'sync_others_data' ), 10, 2 ); if ( 'hide' === get_option( 'mainwp_wprocket_hide_plugin' ) ) { add_filter( 'all_plugins', array( $this, 'all_plugins' ) ); add_action( 'admin_menu', array( $this, 'remove_menu' ) ); add_filter( 'site_transient_update_plugins', array( &$this, 'remove_update_nag' ) ); add_filter( 'mainwp_child_hide_update_notice', array( &$this, 'hide_update_notice' ) ); add_action( 'wp_before_admin_bar_render', array( $this, 'wp_before_admin_bar_render' ), 99 ); add_action( 'admin_init', array( $this, 'remove_notices' ) ); } } /** * Method get_rocket_default_options() * * WP Rocket plugin settings default options. * * @return array Default options. */ public function get_rocket_default_options() { return array( 'emoji' => 0, 'embeds' => 1, 'control_heartbeat' => 0, 'heartbeat_site_behavior' => 'reduce_periodicity', 'heartbeat_admin_behavior' => 'reduce_periodicity', 'heartbeat_editor_behavior' => 'reduce_periodicity', 'manual_preload' => 0, 'preload_excluded_uri' => array(), 'automatic_preload' => 0, 'sitemap_preload' => 0, 'preload_links' => 0, 'sitemaps' => array(), 'database_revisions' => 0, 'database_auto_drafts' => 0, 'database_trashed_posts' => 0, 'database_spam_comments' => 0, 'database_trashed_comments' => 0, 'database_expired_transients' => 0, 'database_all_transients' => 0, 'database_optimize_tables' => 0, 'schedule_automatic_cleanup' => 0, 'automatic_cleanup_frequency' => '', 'cache_reject_uri' => array(), 'cache_reject_cookies' => array(), 'cache_reject_ua' => array(), 'cache_query_strings' => array(), 'cache_purge_pages' => array(), 'purge_cron_interval' => 10, 'purge_cron_unit' => 'HOUR_IN_SECONDS', 'exclude_css' => array(), 'exclude_js' => array(), 'exclude_inline_js' => array(), 'async_css' => 0, 'defer_all_js' => 0, 'critical_css' => '', 'remove_unused_css_safelist' => '', 'exclude_defer_js' => array(), 'delay_js' => 0, 'delay_js_exclusions_selected' => array(), 'delay_js_exclusions' => array(), 'delay_js_scripts' => array(), 'lazyload' => 0, 'lazyload_css_bg_img' => 0, 'lazyload_iframes' => 0, 'exclude_lazyload' => array(), 'lazyload_youtube' => 0, 'minify_css' => 0, 'image_dimensions' => 0, 'minify_concatenate_css' => 0, 'minify_css_legacy' => 0, 'minify_js' => 0, 'minify_concatenate_js' => 0, 'minify_js_combine_all' => 0, 'preload_fonts' => array(), 'dns_prefetch' => 0, 'cdn' => 0, 'cdn_cnames' => array(), 'cdn_zone' => array(), 'cdn_reject_files' => array(), 'do_cloudflare' => 0, 'cloudflare_email' => '', 'cloudflare_api_key' => '', 'cloudflare_domain' => '', 'cloudflare_devmode' => 0, 'cloudflare_protocol_rewrite' => 0, 'cloudflare_auto_settings' => 0, 'cloudflare_old_settings' => 0, 'analytics_enabled' => 0, 'google_analytics_cache' => 0, 'facebook_pixel_cache' => 0, 'sucury_waf_cache_sync' => 0, 'cache_logged_user' => 0, 'varnish_auto_purge' => 0, 'cache_webp' => 0, 'cloudflare_zone_id' => '', 'sucury_waf_api_key' => '', 'host_fonts_locally' => 0, // Host Google Fonts Locally. 'delay_js_execution_safe_mode' => 0, // Safe Mode for Delay JavaScript Execution. ); } /** * Method sync_others_data() * * Sync the WP Rocket plugin settings. * * @param array $information Array containing the sync information. * @param array $data Array containing the WP Rocekt plugin data to be synced. * * @return array $information Array containing the sync information. */ public function sync_others_data( $information, $data = array() ) { if ( isset( $data['syncWPRocketData'] ) && ( 'yes' === $data['syncWPRocketData'] ) ) { try { $data = array( 'rocket_boxes' => get_user_meta( $GLOBALS['current_user']->ID, 'rocket_boxes', true ), 'lists_delayjs' => get_option( '_transient_wpr_dynamic_lists_delayjs', array() ), 'lists_delayjs_full_list' => $this->prepare_delayjs_ui_list(), ); $information['syncWPRocketData'] = $data; } catch ( MainWP_Exception $e ) { // ok! } } return $information; } /** * Prepare the list of scripts, plugins and theme for the view. * * @return array|array[] */ public function prepare_delayjs_ui_list() { $list = get_transient( 'wpr_dynamic_lists_delayjs' ); if ( empty( $list ) ) { return array(); } $full_list = array( 'scripts' => array( 'items' => array( 'analytics' => array( 'title' => __( 'Analytics & Trackers', 'mainwp-child' ), 'items' => array(), 'svg-icon' => 'analytics', ), 'ad_networks' => array( 'title' => __( 'Ad Networks', 'mainwp-child' ), 'items' => array(), 'svg-icon' => 'ad_network', ), 'payment_processors' => array( 'title' => __( 'Payment Processors', 'mainwp-child' ), 'items' => array(), 'svg-icon' => 'payment', ), 'other_services' => array( 'title' => __( 'Other Services', 'mainwp-child' ), 'items' => array(), 'svg-icon' => 'others', ), ), ), 'plugins' => array( 'items' => array(), ), 'themes' => array( 'items' => array(), ), ); $script_types = array( 'analytics' => 'get_analytics_from_list', 'ad_networks' => 'get_ad_networks_from_list', 'payment_processors' => 'get_payment_processors_from_list', 'other_services' => 'get_other_services_from_list', ); foreach ( $script_types as $type => $method ) { $scripts = $this->$method( $list ); foreach ( $scripts as $script_key => $script ) { $full_list['scripts']['items'][ $type ]['items'][] = array( 'id' => $script_key, 'title' => $script->title, 'icon' => $this->get_icon( $script ), ); } } $active_plugins = $this->get_active_plugins(); $plugins_list = ! empty( $list->plugins ) ? (array) $list->plugins : array(); foreach ( $plugins_list as $plugin_key => $plugin ) { if ( ! in_array( $plugin->condition, $active_plugins, true ) ) { continue; } $full_list['plugins']['items'][] = array( 'id' => $plugin_key, 'title' => $plugin->title, 'icon' => $this->get_icon( $plugin ), ); } $active_theme = $this->get_active_theme(); $themes_list = ! empty( $list->themes ) ? (array) $list->themes : array(); foreach ( $themes_list as $theme_key => $theme ) { if ( $theme->condition !== $active_theme ) { continue; } $full_list['themes']['items'][] = array( 'id' => $theme_key, 'title' => $theme->title, 'icon' => $this->get_icon( $theme ), ); } return $full_list; } /** * Get Analytics scripts from the list. * * @param object $lists List of scripts. * @return array */ private function get_analytics_from_list( $lists ) { return ! empty( $lists->scripts->analytics ) ? (array) $lists->scripts->analytics : array(); } /** * Get Ad Networks from the list. * * @param object $lists List of scripts. * @return array */ private function get_ad_networks_from_list( $lists ) { return ! empty( $lists->scripts->ad_networks ) ? (array) $lists->scripts->ad_networks : array(); } /** * Get Payment Processors from the list. * * @param object $lists List of scripts. * @return array */ private function get_payment_processors_from_list( $lists ) { return ! empty( $lists->scripts->payment_processors ) ? (array) $lists->scripts->payment_processors : array(); } /** * Get Other Services from the list. * * @param object $lists List of scripts. * @return array */ private function get_other_services_from_list( $lists ) { return ! empty( $lists->scripts->other_services ) ? (array) $lists->scripts->other_services : array(); } /** * Fetch the icon. * * @param object $item item from the list. * @return string */ private function get_icon( $item ) { if ( empty( $item->icon_url ) ) { return ''; } return $item->icon_url; } /** * Get active plugins (list of IDs). * * @return array */ public function get_active_plugins() { $plugins = (array) get_option( 'active_plugins', array() ); if ( ! is_multisite() ) { return $plugins; } return array_merge( $plugins, array_keys( (array) get_site_option( 'active_sitewide_plugins', array() ) ) ); } /** * Get active theme ID. * * @return string */ public function get_active_theme() { return $this->get_theme_name( wp_get_theme() ); } /** * Get theme name from theme object. * * @param WP_Theme $theme Theme to get its name. * * @return string */ private function get_theme_name( $theme ) { if ( ! $theme instanceof \WP_Theme ) { return 'Undefined'; } $parent = $theme->get_template(); if ( ! empty( $parent ) ) { return $parent; } return $theme->get( 'Name' ); } /** * Method remove_notices() * * Remove admin notices thrown by the WP Rocket plugin when the plugin is hidden. * * @uses MainWP_Child_WP_Rocket::remove_filters_with_method_name() Remove filters with method name. */ public function remove_notices() { $remove_hooks['admin_notices'] = array( 'rocket_bad_deactivations' => 10, 'rocket_warning_plugin_modification' => 10, 'rocket_plugins_to_deactivate' => 10, 'rocket_warning_using_permalinks' => 10, 'rocket_warning_wp_config_permissions' => 10, 'rocket_warning_advanced_cache_permissions' => 10, 'rocket_warning_advanced_cache_not_ours' => 10, 'rocket_warning_htaccess_permissions' => 10, 'rocket_warning_config_dir_permissions' => 10, 'rocket_warning_cache_dir_permissions' => 10, 'rocket_warning_minify_cache_dir_permissions' => 10, 'rocket_thank_you_license' => 10, 'rocket_need_api_key' => 10, ); foreach ( $remove_hooks as $hook_name => $hooks ) { foreach ( $hooks as $method => $priority ) { static::remove_filters_with_method_name( $hook_name, $method, $priority ); } } } /** * Method remove_filters_with_method_name() * * Remove filters with method name. * * @param string $hook_name Contains the hook name. * @param string $method_name Contains the method name. * @param int $priority Contains the priority value. * * @used-by MainWP_Child_WP_Rocket::remove_notices() Remove admin notices thrown by the WP Rocket plugin when the plugin is hidden. * * @return bool Return false if filtr is not set. */ public static function remove_filters_with_method_name( $hook_name = '', $method_name = '', $priority = 0 ) { /** * WordPress filter array. * * @global array $wp_filter WordPress filter array. */ global $wp_filter; // Take only filters on right hook name and priority. if ( ! isset( $wp_filter[ $hook_name ][ $priority ] ) || ! is_array( $wp_filter[ $hook_name ][ $priority ] ) ) { return false; } // Loop on filters registered. foreach ( (array) $wp_filter[ $hook_name ][ $priority ] as $unique_id => $filter_array ) { // Test if filter is an array ! (always for class/method). if ( isset( $filter_array['function'] ) && is_array( $filter_array['function'] ) && is_object( $filter_array['function'][0] ) && get_class( $filter_array['function'][0] ) && $filter_array['function'][1] === $method_name ) { // Test for WordPress >= 4.7 WP_Hook class. if ( is_a( $wp_filter[ $hook_name ], 'WP_Hook' ) ) { unset( $wp_filter[ $hook_name ]->callbacks[ $priority ][ $unique_id ] ); } else { unset( $wp_filter[ $hook_name ][ $priority ][ $unique_id ] ); } } } return false; } /** * Method wp_before_admin_bar_render() * * Remove the WP Rocket admin bar node when the plugin is hidden. */ public function wp_before_admin_bar_render() { /** * WordPress admin bar array. * * @global array $wp_admin_bar WordPress admin bar array. */ global $wp_admin_bar; $nodes = $wp_admin_bar->get_nodes(); if ( is_array( $nodes ) ) { foreach ( $nodes as $node ) { $node->id = 'wp-rocket'; if ( 'wp-rocket' === $node->parent || $node->id ) { $wp_admin_bar->remove_node( $node->id ); } } } } /** * Method hide_update_notice() * * Remove the WP Rocket plugin update notice when the plugin is hidden. * * @param array $slugs Array containing installed plugins slugs. * * @return array $slugs Array containing installed plugins slugs. */ public function hide_update_notice( $slugs ) { $slugs[] = 'wp-rocket/wp-rocket.php'; return $slugs; } /** * Method remove_update_nag() * * Remove the WP Rocket plugin update notice when the plugin is hidden. * * @param object $value Object containing update information. * * @return object $value Object containing update information. * * @uses \MainWP\Child\MainWP_Helper::is_updates_screen() */ public function remove_update_nag( $value ) { if ( MainWP_Helper::is_dashboard_request() ) { return $value; } if ( ! MainWP_Helper::is_updates_screen() ) { return $value; } if ( isset( $value->response['wp-rocket/wp-rocket.php'] ) ) { unset( $value->response['wp-rocket/wp-rocket.php'] ); } return $value; } /** * Method is_activated() * * Check if the WP Rocket pulgin is activated. * * @return bool If the WP Rocket pulgin is active, return true, if not, return false. */ public function is_activated() { if ( ! $this->is_plugin_installed ) { return false; } return true; } /** * Method remove_menu() * * Remove the WP Rocket menu item when the plugin is hidden. */ public function remove_menu() { /** * WordPress submenu array. * * @global array $submenu WordPress submenu array. */ global $submenu; if ( isset( $submenu['options-general.php'] ) ) { foreach ( $submenu['options-general.php'] as $index => $item ) { if ( 'wprocket' === $item[2] ) { unset( $submenu['options-general.php'][ $index ] ); break; } } } $pos = isset( $_SERVER['REQUEST_URI'] ) ? stripos( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ), 'options-general.php?page=wprocket' ) : false; if ( false !== $pos ) { wp_safe_redirect( get_option( 'siteurl' ) . '/wp-admin/index.php' ); exit(); } } /** * Method all_plugins() * * Remove the WP Rocket plugin from the list of all plugins when the plugin is hidden. * * @param array $plugins Array containing all installed plugins. * * @return array $plugins Array containing all installed plugins without the WP Rocket. */ public function all_plugins( $plugins ) { foreach ( $plugins as $key => $value ) { $plugin_slug = basename( $key, '.php' ); if ( 'wp-rocket' === $plugin_slug ) { unset( $plugins[ $key ] ); } } return $plugins; } /** * Method actions() * * Fire off certain WP Rocket plugin actions. * * @return void * * @uses \MainWP\Child\MainWP_Child_WP_Rocket::set_showhide() Hide or unhide the WP Rocket plugin. * @uses \MainWP\Child\MainWP_Child_WP_Rocket::purge_cloudflare() Purge the Cloudflare cache. * @uses \MainWP\Child\MainWP_Child_WP_Rocket::preload_purge_cache_all() Purge all cache. * @uses \MainWP\Child\MainWP_Child_WP_Rocket::generate_critical_css() Generate critical CSS. * @uses \MainWP\Child\MainWP_Child_WP_Rocket::save_settings() Save the plugin settings. * @uses \MainWP\Child\MainWP_Child_WP_Rocket::load_existing_settings() Load existing settings. * @uses \MainWP\Child\MainWP_Child_WP_Rocket::optimize_database() Optimize database tables. * @uses \MainWP\Child\MainWP_Child_WP_Rocket::get_optimize_info() Get the optimization information. * @uses \MainWP\Child\MainWP_Child_WP_Rocket::do_admin_post_rocket_purge_opcache() Do admin post to purge opcache. * @uses \MainWP\Child\MainWP_Child_WP_Rocket::update_exclusion_list() Update inclusion and exclusion lists. * @uses \MainWP\Child\MainWP_Helper::write() */ public function action() { //phpcs:ignore -- NOSONAR -complex. // Check if the WP Rocket plugin is installed on the child website. if ( ! $this->is_plugin_installed ) { MainWP_Helper::write( array( 'error' => esc_html__( 'Please install WP Rocket plugin on child website', $this->plugin_translate ) ) ); return; } // Action to be performed. $mwp_action = MainWP_System::instance()->validate_params( 'mwp_action' ); // Run specific wprocket method based on the passed action. $information = array(); if ( ! empty( $mwp_action ) ) { try { switch ( $mwp_action ) { case 'set_showhide': $information = $this->set_showhide(); break; case 'purge_cloudflare': $information = $this->purge_cloudflare(); break; case 'preload_purge_all': $information = $this->preload_purge_cache_all(); break; case 'generate_critical_css': $information = $this->generate_critical_css(); break; case 'save_settings': $information = $this->save_settings(); break; case 'load_existing_settings': $information = $this->load_existing_settings(); break; case 'optimize_database': $information = $this->optimize_database(); break; case 'get_optimize_info': $information = $this->get_optimize_info(); break; case 'purge_opcache': $information = $this->do_admin_post_rocket_purge_opcache(); break; case 'update_exclusion_list': $information = $this->update_exclusion_list(); break; case 'clear_priority_elements': $information = $this->clear_priority_elements(); break; default: break; } } catch ( MainWP_Exception $e ) { $information = array( 'error' => $e->getMessage() ); } } MainWP_Helper::write( $information ); } /** * Method set_showhide() * * Hide or unhide the WP Rocket plugin. * * @return array Action result. * * @used-by \MainWP\Child\MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * @uses \MainWP\Child\MainWP_Helper::update_option() */ public function set_showhide() { $hide = MainWP_System::instance()->validate_params( 'showhide' ); MainWP_Helper::update_option( 'mainwp_wprocket_hide_plugin', $hide ); $information['result'] = 'SUCCESS'; return $information; } /** * Method do_admin_post_rocket_purge_opcache() * * Do admin post to purge opcache. * * @used-by MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * * @return array Action result. */ public function do_admin_post_rocket_purge_opcache() { if ( function_exists( 'opcache_reset' ) ) { opcache_reset(); } else { return array( 'error' => 'The host do not support the function reset opcache.' ); } return array( 'result' => 'SUCCESS' ); } /** * Method purge_cloudflare() * * Purge the Cloudflare cache. * * @used-by MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * * @return array Action result. */ public function purge_cloudflare() { if ( function_exists( 'rocket_purge_cloudflare' ) ) { rocket_purge_cloudflare(); return array( 'result' => 'SUCCESS' ); } else { return array( 'error' => 'function_not_exist' ); } } /** * Method require_file_path() * * Include necessary files. * * @param string $function_name function Name. * @param string $file_name file Name. */ private function require_file_path( $function_name, $file_name ) { if ( ! function_exists( $function_name ) && defined( 'WP_ROCKET_FUNCTIONS_PATH' ) ) { require_once WP_ROCKET_FUNCTIONS_PATH . $file_name; // NOSONAR - WP compatible. } } /** * Method preload_purge_cache_all() * * Purge all cache. * * @used-by MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * * @return array Action result. */ public function preload_purge_cache_all() { if ( function_exists( 'rocket_clean_domain' ) || function_exists( 'rocket_clean_minify' ) || function_exists( 'create_rocket_uniqid' ) ) { set_transient( 'rocket_clear_cache', 'all', HOUR_IN_SECONDS ); // Require files to make sure the functions are available. $this->require_file_path( 'get_rocket_i18n_uri', 'i18n.php' ); $this->require_file_path( 'get_rocket_parse_url', 'formatting.php' ); $this->require_file_path( 'create_rocket_uniqid', 'admin.php' ); rocket_clean_domain(); rocket_clean_minify(); if ( function_exists( 'rocket_clean_cache_busting' ) ) { rocket_clean_cache_busting(); } if ( ! function_exists( 'rocket_dismiss_boxes' ) && defined( 'WP_ROCKET_ADMIN_PATH' ) ) { require_once WP_ROCKET_ADMIN_PATH . 'admin.php'; // NOSONAR - WP compatible. } include_once ABSPATH . '/wp-admin/includes/template.php'; // NOSONAR -- WP compatible. $options = get_option( WP_ROCKET_SLUG ); $options['minify_css_key'] = create_rocket_uniqid(); $options['minify_js_key'] = create_rocket_uniqid(); remove_all_filters( 'update_option_' . WP_ROCKET_SLUG ); update_option( WP_ROCKET_SLUG, $options ); rocket_dismiss_box( 'rocket_warning_plugin_modification' ); // call preload cache. $this->preload_cache(); return array( 'result' => 'SUCCESS' ); } else { return array( 'error' => 'function_not_exist' ); } } /** * Method preload_cache() * * Preload cache. * * @return array Action result. * @throws MainWP_Exception Error message. * * @used-by \MainWP\Child\MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * @uses \MainWP\Child\MainWP_Helper::instance()->check_methods() * @uses \MainWP\Child\MainWP_Helper::instance()->check_classes_exists() */ public function preload_cache() { MainWP_Helper::instance()->check_functions( array( 'run_rocket_sitemap_preload', 'run_rocket_bot' ) ); $existed = MainWP_Helper::instance()->check_classes_exists( '\WP_Rocket\Engine\Preload\FullProcess', true ); // compatible. if ( true === $existed ) { $preload_process = new \WP_Rocket\Engine\Preload\FullProcess(); MainWP_Helper::instance()->check_methods( $preload_process, array( 'is_process_running' ) ); if ( $preload_process->is_process_running() ) { return array( 'result' => 'RUNNING' ); } delete_transient( 'rocket_preload_errors' ); run_rocket_bot( 'cache-preload', '' ); run_rocket_sitemap_preload(); return array( 'result' => 'SUCCESS' ); } else { // Preload cache. run_rocket_bot(); run_rocket_sitemap_preload(); return array( 'result' => 'SUCCESS' ); } } /** * Method generate_critical_css() * * Generate critical CSS. * * @return array Action result. * @throws MainWP_Exception Error message. * * @used-by \MainWP\Child\MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * @uses \MainWP\Child\MainWP_Helper::instance()->check_properties() * @uses \MainWP\Child\MainWP_Helper::instance()->check_classes_exists() */ public function generate_critical_css() { $old_version = false; if ( class_exists( '\WP_Rocket\Subscriber\Optimization\Critical_CSS_Subscriber' ) ) { // to compatible with old version. MainWP_Helper::instance()->check_classes_exists( array( '\WP_Rocket\Subscriber\Optimization\Critical_CSS_Subscriber', '\WP_Rocket\Optimization\CSS\Critical_CSS', '\WP_Rocket\Optimization\CSS\Critical_CSS_Generation', '\WP_Rocket\Admin\Options', '\WP_Rocket\Admin\Options_Data', ) ); $old_version = true; } else { MainWP_Helper::instance()->check_classes_exists( array( '\WP_Rocket\Engine\CriticalPath\CriticalCSS', '\WP_Rocket\Engine\CriticalPath\CriticalCSSGeneration', '\WP_Rocket\Engine\CriticalPath\ProcessorService', '\WP_Rocket\Engine\CriticalPath\DataManager', '\WP_Rocket\Engine\CriticalPath\APIClient', '\WP_Rocket\Admin\Options', '\WP_Rocket\Admin\Options_Data', ) ); MainWP_Helper::instance()->check_functions( array( '\rocket_direct_filesystem', '\rocket_get_constant' ) ); } if ( $old_version ) { $critical_css = new \WP_Rocket\Optimization\CSS\Critical_CSS( new \WP_Rocket\Optimization\CSS\Critical_CSS_Generation() ); $options_api = new \WP_Rocket\Admin\Options( 'wp_rocket_' ); $options = new \WP_Rocket\Admin\Options_Data( $options_api->get( 'settings', array() ) ); $sitemap_preload = new \WP_Rocket\Subscriber\Optimization\Critical_CSS_Subscriber( $critical_css, $options ); MainWP_Helper::instance()->check_properties( $sitemap_preload, 'critical_css' ); MainWP_Helper::instance()->check_methods( $sitemap_preload->critical_css, 'process_handler' ); $sitemap_preload->critical_css->process_handler(); } else { $filesystem = \rocket_direct_filesystem(); $options = new \WP_Rocket\Admin\Options( 'wp_rocket_' ); $options_data = new \WP_Rocket\Admin\Options_Data( $options->get( 'settings', array() ) ); $critical_css_path = \rocket_get_constant( 'WP_ROCKET_CRITICAL_CSS_PATH' ) . get_current_blog_id() . '/'; $cpcss_service = new \WP_Rocket\Engine\CriticalPath\ProcessorService( new \WP_Rocket\Engine\CriticalPath\DataManager( $critical_css_path, $filesystem ), new \WP_Rocket\Engine\CriticalPath\APIClient() ); $critical_css = new \WP_Rocket\Engine\CriticalPath\CriticalCSS( new \WP_Rocket\Engine\CriticalPath\CriticalCSSGeneration( $cpcss_service ), $options_data, $filesystem ); $critical_css->process_handler(); } return array( 'result' => 'SUCCESS' ); } /** * Method save_settings() * * Save the plugin settings. * * @used-by MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * * @return array Action result. */ public function save_settings() { // phpcs:disable WordPress.Security.NonceVerification $options = isset( $_POST['settings'] ) ? json_decode( base64_decode( wp_unslash( $_POST['settings'] ) ), true ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized,WordPress.PHP.DiscouragedPHPFunctions -- base64_encode function is used for http encode compatible.. if ( ! is_array( $options ) || empty( $options ) ) { return array( 'error' => 'INVALID_OPTIONS' ); } $old_values = get_option( WP_ROCKET_SLUG ); $defaults_fields = $this->get_rocket_default_options(); foreach ( $old_values as $field => $value ) { if ( ! isset( $defaults_fields[ $field ] ) ) { $options[ $field ] = $value; } } update_option( WP_ROCKET_SLUG, $options ); if ( isset( $_POST['do_database_optimization'] ) && ! empty( $_POST['do_database_optimization'] ) ) { $this->optimize_database(); } // phpcs:enable return array( 'result' => 'SUCCESS' ); } /** * [Description for update_exclusion_list] * * @return array */ public function update_exclusion_list() { // Call cron by rocket update dynamic lists. wp_schedule_single_event( time() + 10, 'rocket_update_dynamic_lists' ); return array( 'result' => 'SUCCESS' ); } /** * Method optimize_database() * * Optimize database tables. * * @return array Action result * @throws MainWP_Exception Error message. * * @used-by \MainWP\Child\MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * @uses \MainWP\Child\MainWP_Helper::instance()->check_methods() * @uses \MainWP\Child\MainWP_Helper::instance()->check_classes_exists() */ public function optimize_database() { MainWP_Helper::instance()->check_classes_exists( array( '\WP_Rocket\Admin\Database\Optimization', '\WP_Rocket\Admin\Database\Optimization_Process', '\WP_Rocket\Admin\Options', '\WP_Rocket\Admin\Options_Data', ) ); $process = new \WP_Rocket\Admin\Database\Optimization_Process(); $optimization = new \WP_Rocket\Admin\Database\Optimization( $process ); MainWP_Helper::instance()->check_methods( $optimization, array( 'process_handler', 'get_options' ) ); $options_api = new \WP_Rocket\Admin\Options( 'wp_rocket_' ); $options = new \WP_Rocket\Admin\Options_Data( $options_api->get( 'settings', array() ) ); $items = array_filter( array_keys( $optimization->get_options() ), array( $options, 'get' ) ); if ( ! empty( $items ) ) { $optimization->process_handler( $items ); } $return['result'] = 'SUCCESS'; return $return; } /** * Method get_optimize_info() * * Get the optimization information. * * @return array Action result and optimization information. * @throws MainWP_Exception Error message. * * @used-by \MainWP\Child\MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * @uses \MainWP\Child\MainWP_Helper::instance()->check_classes_exists() * @uses \MainWP\Child\MainWP_Helper::instance()->check_methods() */ public function get_optimize_info() { MainWP_Helper::instance()->check_classes_exists( array( '\WP_Rocket\Admin\Database\Optimization', '\WP_Rocket\Admin\Database\Optimization_Process', ) ); $process = new \WP_Rocket\Admin\Database\Optimization_Process(); $optimization = new \WP_Rocket\Admin\Database\Optimization( $process ); MainWP_Helper::instance()->check_methods( $optimization, 'count_cleanup_items' ); $information['optimize_info'] = array( 'total_revisions' => $optimization->count_cleanup_items( 'database_revisions' ), 'total_auto_draft' => $optimization->count_cleanup_items( 'database_auto_drafts' ), 'total_trashed_posts' => $optimization->count_cleanup_items( 'database_trashed_posts' ), 'total_spam_comments' => $optimization->count_cleanup_items( 'database_spam_comments' ), 'total_trashed_comments' => $optimization->count_cleanup_items( 'database_trashed_comments' ), 'total_expired_transients' => $optimization->count_cleanup_items( 'database_expired_transients' ), 'total_all_transients' => $optimization->count_cleanup_items( 'database_all_transients' ), 'total_optimize_tables' => $optimization->count_cleanup_items( 'database_optimize_tables' ), ); $information['result'] = 'SUCCESS'; return $information; } /** * Method load_existing_settings() * * Load existing settings. * * @used-by MainWP_Child_WP_Rocket::actions() Fire off certain WP Rocket plugin actions. * * @return array Action result and settings options. */ public function load_existing_settings() { $options = get_option( WP_ROCKET_SLUG ); return array( 'result' => 'SUCCESS', 'options' => $options, ); } /** * Method clear_priority_elements() * * Clear all priority elements. * * @return array Status of the action. */ public function clear_priority_elements() { try { // Check if the function exists. if ( ! function_exists( 'wpm_apply_filters_typed' ) || ! function_exists( 'rocket_clean_domain' ) || ! function_exists( 'rocket_dismiss_box' ) ) { return array( 'error' => 'function_not_exist' ); } // Clear all priority elements. $clean_filter = wpm_apply_filters_typed( 'array', 'rocket_performance_hints_clean_all', array() ); rocket_clean_domain(); rocket_dismiss_box( 'rocket_warning_plugin_modification' ); set_transient( 'rocket_performance_hints_clear_message', $clean_filter ); return array( 'result' => 'SUCCESS' ); } catch ( MainWP_Exception $e ) { return array( 'error' => $e->getMessage() ); } } }