encrypt_string( $data['mainwp_cloudflair_key'] ); } else { $encrypted = ''; } update_option( 'mainwp_child_cloudflair_key', $encrypted ); $old = get_option( 'mainwp_cloudflair_key' ); if ( false !== $old ) { delete_option( 'mainwp_cloudflair_key' ); } } } catch ( MainWP_Exception $e ) { error_log( $e->getMessage() ); // phpcs:ignore -- debug mode only. } } // ** Send data to MainWP Dashboard. **// // Send last purged time stamp to MainWP Dashboard. $information['mainwp_cache_control_last_purged'] = get_option( 'mainwp_cache_control_last_purged', 0 ); // Send active cache solution to MainWP Dashboard. $information['mainwp_cache_control_cache_solution'] = get_option( 'mainwp_cache_control_cache_solution', 0 ); // Send data for Cache Control Logs. $information['mainwp_cache_control_logs'] = get_option( 'mainwp_cache_control_log', '' ); return $information; } /** * Check which supported plugin is installed, * Set wp_option 'mainwp_cache_control_cache_solution' to active plugin, * and set public variable 'is_plugin_installed' to TRUE. * * If a supported plugin is not installed check to see if CloudFlair solution is enabled. * * @return void */ public function check_cache_solution() { //phpcs:ignore -- NOSONAR - complex. // Default value for cache solution. $cache_plugin_solution = ''; // Grab all mu-plugins & check for Rocket.net mu-plugin. If found, set cache solution to CDN Cache Plugin. $mu_plugings_list = get_mu_plugins(); if ( array_key_exists( 'cdn-cache-management.php', $mu_plugings_list ) ) { $cache_plugin_solution = 'CDN Cache Plugin'; } if ( empty( $cache_plugin_solution ) && ( is_plugin_active( 'wp-optimize/wp-optimize.php' ) || is_plugin_active( 'wp-optimize-premium/wp-optimize.php' ) ) && class_exists( $this->wp_optimize_class ) ) { $cache = \WP_Optimize()->get_page_cache(); if ( $cache->is_enabled() === true ) { $cache_plugin_solution = 'WP Optimize'; } } if ( empty( $cache_plugin_solution ) && is_plugin_active( 'wp-rocket/wp-rocket.php' ) ) { $cache_plugin_solution = 'WP Rocket'; } $other_cache_plugins = array( 'breeze/breeze.php' => 'Breeze', 'litespeed-cache/litespeed-cache.php' => 'LiteSpeed Cache', 'sg-cachepress/sg-cachepress.php' => 'SiteGround Optimizer', 'swift-performance-lite/performance.php' => 'Swift Performance Lite', 'swift-performance/performance.php' => 'Swift Performance', 'wp-fastest-cache/wpFastestCache.php' => 'WP Fastest Cache', 'w3-total-cache/w3-total-cache.php' => 'W3 Total Cache', 'hummingbird-performance/wp-hummingbird.php' => 'Hummingbird Performance', 'cache-enabler/cache-enabler.php' => 'Cache Enabler', 'nginx-helper/nginx-helper.php' => 'Nginx Helper', 'nitropack/main.php' => 'Nitropack', 'autoptimize/autoptimize.php' => 'Autoptimize', 'flying-press/flying-press.php' => 'FlyingPress', 'wp-super-cache/wp-cache.php' => 'WP Super Cache', 'comet-cache/comet-cache.php' => 'Comet Cache', 'seraphinite-accelerator/plugin_root.php' => 'Seraphinite Accelerator', 'swis-performance/swis-performance.php' => 'Swis Performance', 'pressable-cache-management/pressable-cache-management.php' => 'Pressable Cache Management', 'runcloud-hub/runcloud-hub.php' => 'RunCloud Hub', 'clsop/clsop.php' => 'AccelerateWP', ); if ( empty( $cache_plugin_solution ) ) { // Check if a supported cache plugin is active, low priority. foreach ( $other_cache_plugins as $plugin => $name ) { if ( is_plugin_active( $plugin ) ) { $cache_plugin_solution = $name; break; } } } if ( empty( $cache_plugin_solution ) ) { $cache_plugin_solution = 'Plugin Not Found'; } // Update wp_option 'mainwp_cache_control_cache_solution' with active plugin or "Plugin Not Found". update_option( 'mainwp_cache_control_cache_solution', $cache_plugin_solution ); } /** * Auto purge cache based on which cache plugin is installed & activated. * * @used-by MainWP_Child_Updates::upgrade_plugin_theme() * @used-by MainWP_Child_Updates::upgrade_wp() * * @param string $bulk Bulk update distinguisher. * * @return void */ public function auto_purge_cache( $bulk = '' ) { // phpcs:ignore -- NOSONAR - Current complexity is the only way to achieve desired results, pull request solutions appreciated. $do_purge = get_option( 'mainwp_child_auto_purge_cache' ); // If Cache Control is enabled, run the cache purge. if ( 1 === $do_purge || '1' === $do_purge || 'true' === $bulk ) { // Set information array. $information = array(); // Grab detected cache solution.. $cache_plugin_solution = get_option( 'mainwp_cache_control_cache_solution', 0 ); // Run the corresponding cache plugin purge method. try { switch ( $cache_plugin_solution ) { case 'WP Rocket': $information = $this->wprocket_auto_cache_purge(); break; case 'AccelerateWP': $information = $this->acceleratewp_auto_purge_cache(); // The plugin is a clone of WP-Rocket, with identical functionality—only the name has been changed. break; case 'Breeze': $information = $this->breeze_auto_purge_cache(); break; case 'LiteSpeed Cache': $information = $this->litespeed_auto_purge_cache(); break; case 'SiteGround Optimizer': $information = $this->sitegrounds_optimizer_auto_purge_cache(); break; case 'Swift Performance Lite': $information = $this->swift_performance_lite_auto_purge_cache(); break; case 'Swift Performance': $information = $this->swift_performance_auto_purge_cache(); break; case 'WP Fastest Cache': $information = $this->wp_fastest_cache_auto_purge_cache(); break; case 'W3 Total Cache': $information = $this->w3_total_cache_auto_purge_cache(); break; case 'Hummingbird Performance': $information = $this->wp_hummingbird_auto_purge_cache(); break; case 'Cache Enabler': $information = $this->cache_enabler_auto_purge_cache(); break; case 'Nginx Helper': $information = $this->nginx_helper_auto_purge_cache(); break; case 'Nitropack': $information = $this->nitropack_auto_purge_cache(); break; case 'Autoptimize': $information = $this->autoptimize_auto_purge_cache(); break; case 'FlyingPress': $information = $this->flyingpress_auto_purge_cache(); break; case 'WP Super Cache': $information = $this->wp_super_cache_auto_purge_cache(); break; case 'WP Optimize': $information = $this->wp_optimize_auto_purge_cache(); break; case 'Comet Cache': $information = $this->comet_cache_auto_purge_cache(); break; case 'CDN Cache Plugin': $information = $this->cdn_cache_plugin_auto_purge_cache(); break; case 'Seraphinite Accelerator': $information = $this->seraphinite_auto_purge_cache(); break; case 'Swis Performance': $information = $this->swis_performance_auto_purge_cache(); break; case 'Pressable Cache Management': $information = $this->pressable_cache_management_auto_purge_cache(); break; case 'RunCloud Hub': $information = $this->runcloud_hub_auto_purge_cache(); break; default: break; } } catch ( MainWP_Exception $e ) { $information = array( 'error' => $e->getMessage() ); } // If no cache plugin is found, set status to disabled but still pass "SUCCESS" action because it did not fail. if ( 'Plugin Not Found' === $cache_plugin_solution ) { $information = array( 'status' => 'Disabled', 'action' => 'SUCCESS', ); } // Fire off CloudFlare purge if enabled & not using a CDN Cache Plugin. ( Stops double purging Cloudflare ). if ( '1' === get_option( 'mainwp_child_cloud_flair_enabled' ) && 'CDN Cache Plugin' !== $cache_plugin_solution ) { $information['cloudflare'] = $this->cloudflair_auto_purge_cache(); } } else { // If Cache Control is disabled, set status to disabled but still pass "SUCCESS" action because it did not fail. $information = array( 'status' => 'Disabled', 'action' => 'SUCCESS', 'do_purge' => $do_purge, ); } // Save to DB. $this->record_results( $information ); // Only fire off if this is a 'bulk' action. if ( 'true' === $bulk ) { // Return results in JSON format. MainWP_Helper::write( $information ); } } /** * Build purge results array for return to dashboard. * * @param string $message Result message. * @param string $action Action result. * * @return array Purge results array. */ public function purge_result( $message, $action ) { $result = array( 'Last Purged' => get_option( 'mainwp_cache_control_last_purged', false ), 'Cache Solution' => get_option( 'mainwp_cache_control_cache_solution', false ), 'Cache Control Enabled' => get_option( 'mainwp_child_auto_purge_cache' ), 'Cloudflair Enabled' => get_option( 'mainwp_child_cloud_flair_enabled' ), ); $result['result'] = $message; if ( 'SUCCESS' === $action ) { $result['action'] = 'SUCCESS'; } else { $result['action'] = 'ERROR'; } return $result; } /** * Purge Pressable Cache Management. */ public function pressable_cache_management_auto_purge_cache() { $success_message = 'Pressable Cache Management => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; if ( is_callable( 'flush_pressable_cache_callback' ) ) { flush_pressable_cache_callback(); } // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } /** * Purge Swis Performance plugin cache. * * @return array Purge results array. */ public function swis_performance_auto_purge_cache() { $success_message = 'Swis Performance => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Swis Performance => There was an issue purging your cache.'; $bypass_message = 'Swis Performance => Purge was bypassed due to Swis Auto Purge Settings.'; if ( is_callable( 'swis' ) ) { // Get Swis Cache Settings. $swis_cache_settings = swis()->cache->get_settings(); // Check if Swis Auto Purge is enabled. if ( empty( $swis_cache_settings['clear_complete_cache_on_changed_plugin'] ) ) { // Purge Cache. do_action( 'swis_clear_complete_cache' ); sleep( 3 ); // Preload Cache. swis()->cache_preload->start_preload(); } else { return $this->purge_result( $bypass_message, 'SUCCESS' ); } // record results. ( below needs to stay untouched ). update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Seraphinite Accelerator plugin cache. * * @return array Purge results array. */ public function seraphinite_auto_purge_cache() { $success_message = 'Seraphinite Accelerator => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Seraphinite Accelerator => There was an issue purging your cache.'; if ( class_exists( '\seraph_accel\API' ) ) { \seraph_accel\API::OperateCache( \seraph_accel\API::CACHE_OP_DEL ); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge CDN Cache Plugin cache. * * @return array Purge results array. */ public function cdn_cache_plugin_auto_purge_cache() { $success_message = 'CDN Cache Plugin => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'CDN Cache Plugin => There was an issue purging your cache.'; if ( class_exists( 'CDN_Clear_Cache_Api' ) ) { \CDN_Clear_Cache_Api::cache_api_call( array(), 'purge_everything' ); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Comet Cache. * * @return array Purge results array. */ public function comet_cache_auto_purge_cache() { $success_message = 'Comet Cache => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Comet Cache => There was an issue purging your cache.'; if ( class_exists( '\comet_cache' ) ) { // Clear Cache. \comet_cache::clear(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge WP Optimize cache. * * @return array Purge results array. */ public function wp_optimize_auto_purge_cache() { $success_message = 'WP Optimize => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'WP Optimize => There was an issue purging your cache.'; // Clear Cache. $purge = static::wp_optimize_purge_cache(); // Purge Minified files. $minify = static::wp_optimize_purge_minify(); // Preload cache. $preload = static::wp_optimize_preload_cache(); // Check response & return results. if ( ( true === $purge && true === $preload ) || ( true === $minify && true === $purge && true === $preload ) ) { update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Preload WP Optimize cache after purge. * * @return bool True if successful, false if not. */ public function wp_optimize_preload_cache() { if ( class_exists( '\WP_Optimize_Cache_Commands' ) && class_exists( '\WP_Optimize_Page_Cache_Preloader' ) ) { // Clear Cache. $purge = new \WP_Optimize_Cache_Commands(); $purge->run_cache_preload(); return true; } return false; } /** * Purge WP Optimize minified files. * * @return bool True if successful, false if not. */ public function wp_optimize_purge_minify() { if ( ! function_exists( '\wp_optimize_minify_config' ) && defined( 'WPO_PLUGIN_MAIN_PATH' ) && file_exists( WPO_PLUGIN_MAIN_PATH . 'minify/class-wp-optimize-minify-config.php' ) ) { include_once WPO_PLUGIN_MAIN_PATH . 'minify/class-wp-optimize-minify-config.php'; // NOSONAR -- WP compatible. } if ( function_exists( '\wp_optimize_minify_config' ) ) { $wpo_minify_options = \wp_optimize_minify_config()->get(); if ( ! is_array( $wpo_minify_options ) || empty( $wpo_minify_options['enabled'] ) ) { return false; } if ( class_exists( '\WP_Optimize_Minify_Commands' ) ) { $minify_commands = new \WP_Optimize_Minify_Commands(); $results = $minify_commands->purge_minify_cache(); if ( 'caches cleared' === $results['result'] ) { return true; } } } return false; } /** * Purge WP Optimize cache. * * @return bool True if successful, false if not. */ public function wp_optimize_purge_cache() { if ( class_exists( $this->wp_optimize_class ) ) { $cache = \WP_Optimize()->get_page_cache(); $cache->purge(); return true; } return false; } /** * Check if WP Optimize is installed and cache is enabled. */ public function wp_optimize_activated_check() { if ( class_exists( $this->wp_optimize_class ) ) { $cache = \WP_Optimize()->get_page_cache(); if ( ! $cache->is_enabled() ) { return false; } } } /** * Purge WP Super Cache. * * @return array Purge results array. */ public function wp_super_cache_auto_purge_cache() { $success_message = 'WP Super Cache => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'WP Super Cache => There was an issue purging your cache.'; if ( function_exists( '\wp_cache_clean_cache' ) ) { // Clear Cache. global $file_prefix; \wp_cache_clean_cache( $file_prefix, true ); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge FlyingPress cache. * * @return array Purge results array. */ public function flyingpress_auto_purge_cache() { $success_message = 'FlyingPress Cache => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'FlyingPress Cache => There was an issue purging your cache.'; if ( class_exists( '\FlyingPress\Purge' ) && class_exists( '\FlyingPress\Preload' ) ) { // Clear Cache. \FlyingPress\Purge::purge_everything(); sleep( 3 ); // Preload Cache. \FlyingPress\Preload::preload_cache(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Autoptimize cache. * * @return array Purge results array. */ public function autoptimize_auto_purge_cache() { $success_message = 'Autoptimize => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Autoptimize => There was an issue purging your cache.'; if ( class_exists( 'autoptimizeCache' ) ) { // Clear Cache. \autoptimizeCache::clearall(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Nitropack cache. * * Nitropack_purge($url = NULL, $tag = NULL, $reason = NULL); * * In case you want to do a full purge, you must leave the values * for URL and Tag empty. In case you want to create a targeted purge * you can replace them with the URL or tag of the page. * * @return array Purge results array. */ public function nitropack_auto_purge_cache() { $success_message = 'Nitropack => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Nitropack => There was an issue purging your cache.'; if ( function_exists( 'nitropack_purge' ) ) { // Clear Nitropack Cache after update. nitropack_purge(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge RunCloud Hub cache. * * @return array Purge results array. */ public function runcloud_hub_auto_purge_cache() { $success_message = 'RunCloud Hub => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'RunCloud Hub => There was an issue purging your cache.'; if ( class_exists( 'RunCloud_Hub' ) && method_exists( 'RunCloud_Hub', 'purge_cache_all' ) ) { // Clear RunCloud Hub Cache after update. \RunCloud_Hub::purge_cache_all(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Nginx Helper cache. * * @return array Purge results array. */ public function nginx_helper_auto_purge_cache() { $success_message = 'Nginx Helper => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Nginx Helper => There was an issue purging your cache.'; if ( class_exists( 'Nginx_Helper' ) ) { // Clear Nginx Helper Cache after update. do_action( 'rt_nginx_helper_purge_all' ); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge WP Hummingbird cache. * * @note needs to have namespace or it will not work. * * @return array Purge results array. */ public function wp_hummingbird_auto_purge_cache() { $success_message = 'Hummingbird => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Hummingbird => There was an issue purging your cache.'; if ( class_exists( 'Hummingbird\Core\Modules\\Page_Cache' ) ) { // Clear WP Hummingbird Cache after update. do_action( 'wphb_clear_page_cache' ); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Cache Enabler cache. * * @return array Purge results array. */ public function cache_enabler_auto_purge_cache() { $success_message = 'Cache Enabler => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Cache Enabler => There was an issue purging your cache.'; if ( class_exists( 'Cache_Enabler' ) ) { // Clear the Cache after update. \Cache_Enabler::clear_complete_cache(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge W3 Total Cache. * * @return array Purge results array. */ public function w3_total_cache_auto_purge_cache() { $success_message = 'W3 Total Cache => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'W3 Total Cache => There was an issue purging your cache.'; if ( function_exists( 'w3tc_flush_all' ) ) { // Purge all W3 total cache. w3tc_flush_all(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge WP Fastest Cache. * * @return array Purge results array. */ public function wp_fastest_cache_auto_purge_cache() { $success_message = 'WP Fastest Cache => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'WP Fastest Cache => There was an issue purging your cache.'; if ( class_exists( 'WpFastestCache' ) ) { // Clear the Cache after update. do_action( 'wpfc_clear_all_cache', true ); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Swift Performance Lite Cache. * * @return array Purge results array. */ public function swift_performance_lite_auto_purge_cache() { $success_message = 'Swift Performance Lite => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Swift Performance Lite => There was an issue purging your cache.'; if ( class_exists( 'Swift_Performance_Cache' ) ) { // Clear All Swift Performance Lite Cache. \Swift_Performance_Cache::clear_all_cache(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Swift Performance Cache. * * @return array Purge results array. */ public function swift_performance_auto_purge_cache() { $success_message = 'Swift Performance => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Swift Performance => There was an issue purging your cache.'; if ( class_exists( 'Swift_Performance_Cache' ) ) { // Clear All Swift Performance Cache. \Swift_Performance_Cache::clear_all_cache(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge SiteGrounds Optimiser Cache. * * @return array Purge results array. */ public function sitegrounds_optimizer_auto_purge_cache() { $success_message = 'SiteGround Optimizer => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'SiteGround Optimizer => There was an issue purging your cache.'; if ( function_exists( 'sg_cachepress_purge_everything' ) ) { // Purge all SG CachePress cache. sg_cachepress_purge_everything(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); return $this->purge_result( $success_message, 'SUCCESS' ); } else { return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Cloudflair Cache. * * @noinspection PhpIdempotentOperationInspection * * @return array Purge results array. */ public function cloudflair_auto_purge_cache() { // Credentials for Cloudflare. $cust_email = get_option( 'mainwp_cloudflair_email', '' ); $cust_xauth = get_option( 'mainwp_child_cloudflair_key', '' ); if ( ! empty( $cust_xauth ) ) { $cust_xauth = MainWP_Child_Keys_Manager::instance()->decrypt_string( $cust_xauth ); } $cust_domain = trim( str_replace( array( 'http://', 'https://', 'www.' ), '', get_option( 'siteurl' ) ), '/' ); // Check if we have all the required data. if ( '' === $cust_email || '' === $cust_xauth ) { return array(); } // Strip subdomains. Cloudflare doesn't like them. $cust_domain = $this->strip_subdomains( $cust_domain ); // Get the Zone-ID from Cloudflare since they don't provide that in the Backend. $ch_query = curl_init(); // phpcs:ignore -- use core function. curl_setopt( $ch_query, CURLOPT_URL, 'https://api.cloudflare.com/client/v4/zones?name=' . $cust_domain . '&status=active&page=1&per_page=5&order=status&direction=desc&match=all' ); // phpcs:ignore -- use core function. curl_setopt( $ch_query, CURLOPT_RETURNTRANSFER, 1 ); // phpcs:ignore -- use core function. $qheaders = array( 'X-Auth-Email: ' . $cust_email . '', 'X-Auth-Key: ' . $cust_xauth . '', 'Content-Type: application/json', ); curl_setopt( $ch_query, CURLOPT_HTTPHEADER, $qheaders ); // phpcs:ignore -- use core function. $qresult = json_decode( curl_exec( $ch_query ), true ); // phpcs:ignore -- use core function. if ( 'resource' === gettype( $ch_query ) ) { curl_close( $ch_query ); // phpcs:ignore -- use core function. } $cust_zone = $qresult['result'][0]['id']; // Purge the entire cache via API. $ch_purge = curl_init(); // phpcs:ignore -- use core function. curl_setopt( $ch_purge, CURLOPT_URL, 'https://api.cloudflare.com/client/v4/zones/' . $cust_zone . '/purge_cache' ); // phpcs:ignore -- use core function. curl_setopt( $ch_purge, CURLOPT_CUSTOMREQUEST, 'DELETE' ); // phpcs:ignore -- use core function. curl_setopt( $ch_purge, CURLOPT_RETURNTRANSFER, 1 ); // phpcs:ignore -- use core function. $headers = array( 'X-Auth-Email: ' . $cust_email, 'X-Auth-Key: ' . $cust_xauth, 'Content-Type: application/json', ); $data = wp_json_encode( array( 'purge_everything' => true ) ); // phpcs:ignore -- ok. curl_setopt( $ch_purge, CURLOPT_POST, true ); // phpcs:ignore -- use core function. curl_setopt( $ch_purge, CURLOPT_POSTFIELDS, $data ); // phpcs:ignore -- use core function. curl_setopt( $ch_purge, CURLOPT_HTTPHEADER, $headers ); // phpcs:ignore -- use core function. $result = json_decode( curl_exec( $ch_purge ), true ); // phpcs:ignore -- use core function. if ( 'resource' === gettype( $ch_purge ) ) { curl_close( $ch_purge ); // phpcs:ignore -- use core function. } $success_message = 'Cloudflare => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Cloudflare => There was an issue purging the cache. ' . wp_json_encode( $qresult['errors'][0], JSON_UNESCAPED_SLASHES ) . "-" . wp_json_encode( $result['errors'][0], JSON_UNESCAPED_SLASHES ); // phpcs:ignore -- ok. // Save last purge time to database on success. if ( 1 === (int) $result['success'] ) { // record results. update_option( 'mainwp_cache_control_last_purged', time() ); // Return success message. return $this->purge_result( $success_message, 'SUCCESS' ); } elseif ( ( 1 !== (int) $qresult['success'] ) || ( 1 !== (int) $result['success'] ) ) { // Return error message. return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge LiteSpeed Cache. * * @return array Purge results array. */ public function litespeed_auto_purge_cache() { $success_message = 'LiteSpeed => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'LiteSpeed => There was an issue purging your cache.'; if ( class_exists( '\LiteSpeed\Purge' ) ) { // Purge all LS Cache. \LiteSpeed\Purge::purge_all(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); // Return success message. return $this->purge_result( $success_message, 'SUCCESS' ); } else { // Return error message. return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge Breeze cache. * * @return array Purge results array. */ public function breeze_auto_purge_cache() { $success_message = 'Breeze => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; $error_message = 'Breeze => There was an issue purging your cache.'; if ( class_exists( 'Breeze_Admin' ) ) { // Clears varnish cache. $admin = new \Breeze_Admin(); $admin->breeze_clear_varnish(); // For local static files: Clears files within /cache/breeze-minification/ folder. if ( class_exists( '\Breeze_Configuration' ) ) { \Breeze_Configuration::breeze_clean_cache(); } // Delete minified files. \Breeze_MinificationCache::clear_minification(); // Clear normal cache. \Breeze_PurgeCache::breeze_cache_flush(); // record results. update_option( 'mainwp_cache_control_last_purged', time() ); // Return success message. return $this->purge_result( $success_message, 'SUCCESS' ); } else { // Return error message. return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge WP-Rocket cache. * * @return array Purge results array. */ public function wprocket_auto_cache_purge() { $purge_result = MainWP_Child_WP_Rocket::instance()->preload_purge_cache_all(); // Record results & return response. if ( 'SUCCESS' === $purge_result['result'] ) { // Save last purge time to database on success. update_option( 'mainwp_cache_control_last_purged', time() ); // Return success message. $success_message = 'WP Rocket => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; return $this->purge_result( $success_message, 'SUCCESS' ); } else { // Return error message. $error_message = 'WP Rocket => There was an issue purging your cache.'; return $this->purge_result( $error_message, 'ERROR' ); } } /** * Purge WP-Rocket cache. * * @return array Purge results array. */ public function acceleratewp_auto_purge_cache() { $purge_result = MainWP_Child_WP_Rocket::instance()->preload_purge_cache_all(); // Record results & return response. if ( 'SUCCESS' === $purge_result['result'] ) { // Save last purge time to database on success. update_option( 'mainwp_cache_control_last_purged', time() ); // Return success message. $success_message = 'AccelerateWP => Cache auto cleared on: (' . current_time( 'mysql' ) . ')'; return $this->purge_result( $success_message, 'SUCCESS' ); } else { // Return error message. $error_message = 'AccelerateWP => There was an issue purging your cache.'; return $this->purge_result( $error_message, 'ERROR' ); } } /** * Record last Purge. * * Create log file & Save in /Upload dir. * * @param array $information Array containing the data to be sent to the Dashboard. */ public function record_results( $information ) { // Setup timezone and upload directory for logs. $ti = wp_timezone(); if ( is_array( $ti ) && isset( $ti['timezone'] ) ) { date_default_timezone_set( $ti['timezone'] ); // phpcs:ignore -- use core function. } // Save Cache Control Log Data. update_option( 'mainwp_cache_control_log', wp_json_encode( $information ) ); } /** * Strip subdomains from a url. * * @param string $url string The url to strip subdomains from. * * @return string The url without subdomains (if any). */ public function strip_subdomains( $url ) { return mainwp_get_main_domain( $url ); } }