File: /var/www/html/triad-infosec/wp-content/themes/Avada/includes/lib/inc/class-fusion-cache.php
<?php
/**
* The main cache class.
*
* @package Fusion-Library
* @subpackage Fusion-Cache
*/
/**
* The cache handler.
*
* @since 1.1.2
*/
class Fusion_Cache {
/**
* Resets all caches.
*
* @since 1.1.2
* @access public
* @param array $delete_cache An array of caches to delete.
* @return void
*/
public function reset_all_caches( $delete_cache = [] ) {
$all_caches = apply_filters(
'reset_all_caches',
[
'compiled_assets' => true,
'gfonts' => true,
'fa_font' => true,
'demo_data' => true,
'po_export' => true,
'transients' => true,
'patcher_messages' => true,
'other_caches' => true,
]
);
$delete_cache = wp_parse_args(
$delete_cache,
$all_caches
);
if ( ! in_array( true, $delete_cache, true ) ) {
// Early exit if all set to false.
return;
}
// Get the upload directory for this site.
$upload_dir = wp_upload_dir();
if ( ! defined( 'FS_METHOD' ) ) {
define( 'FS_METHOD', 'direct' );
}
// The WordPress filesystem.
global $wp_filesystem;
if ( empty( $wp_filesystem ) ) {
require_once wp_normalize_path( ABSPATH . '/wp-admin/includes/file.php' );
WP_Filesystem();
}
// Delete file caches.
if ( true === $delete_cache['compiled_assets'] ) {
// Get the root path for compiled files.
$root_compiled_files_path = apply_filters( 'fusion_compiler_filesystem_root_path', $upload_dir['basedir'] );
// Get the foldername.
$styles_foldername = apply_filters( 'fusion_compiler_filesystem_folder_name', 'fusion-styles' );
$scripts_foldername = apply_filters( 'fusion_compiler_filesystem_folder_name', 'fusion-scripts' );
// Delete folders.
$delete_js_files = $wp_filesystem->delete( $root_compiled_files_path . '/' . $scripts_foldername, true, 'd' );
$delete_css_files = $wp_filesystem->delete( $root_compiled_files_path . '/' . $styles_foldername, true, 'd' );
// Delete cached CSS in the database.
update_option( 'fusion_dynamic_css_posts', [] );
update_option( 'fusion_dynamic_css_ids', [] );
}
if ( true === $delete_cache['demo_data'] ) {
$delete_demo_files = $wp_filesystem->delete( $upload_dir['basedir'] . '/avada-demo-data', true, 'd' );
}
if ( true === $delete_cache['po_export'] ) {
$delete_fb_pages = $wp_filesystem->delete( $upload_dir['basedir'] . '/fusion-page-options-export', true, 'd' );
}
if ( true === $delete_cache['gfonts'] ) {
$delete_gfonts = $wp_filesystem->delete( Fusion_Downloader::get_root_path( 'fusion-gfonts' ), true, 'd' );
}
if ( true === $delete_cache['fa_font'] ) {
$delete_gfonts = $wp_filesystem->delete( Fusion_Downloader::get_root_path( 'fusion-fa-font' ), true, 'd' );
}
if ( true === $delete_cache['transients'] ) {
// Delete transients with dynamic names.
$dynamic_transients = [
'_transient_fusion_dynamic_css_%',
'_transient_avada_%',
'_transient_fusion_wordpress_org_plugins',
'_site_transient_timeout_fusion_dynamic_css_%',
'_site_transient_timeout_avada_%',
'_site_transient_timeout_fusion_wordpress_org_plugins',
'_transient_fusion_fontawesome%',
'_transient_fusion_subsets_preload_tags%',
'_transient_fusion_custom_icons_preload_tags%',
'_transient_fusion_gfonts_preload_tags%',
'_transient_fusion_local_subsets_preload_tags%',
'_transient_fusion_mailchimp_lists%',
'_transient_fusion_mailchimp_fields%',
'_transient_fusion_hubspot_properties',
'_transient_fusion_hubspot_preferences',
'_site_transient_avada_welcome_video_url_%',
];
global $wpdb;
foreach ( $dynamic_transients as $transient ) {
$wpdb->query( // phpcs:ignore WordPress.DB.DirectDatabaseQuery
$wpdb->prepare(
"DELETE FROM $wpdb->options WHERE option_name LIKE %s",
$transient
)
);
}
// Cleanup other transients.
$transients = [
'fusion_css_cache_cleanup',
'_fusion_ajax_works',
'fusion_builder_demos_import_skip_check',
'fusion_builder_demos_timeout',
'fusion_patches',
'fusion_envato_api_down',
'fusion_dynamic_js_filenames',
'fusion_patcher_check_num',
'fusion_dynamic_js_readable',
'avada_premium_plugins_info',
'fusion_tos',
'fusion_fb_tos',
'fusion_tos_flat',
'avada_dashboard_data',
'awb_library_demo',
'avada_studio',
];
foreach ( $transients as $transient ) {
delete_transient( $transient );
delete_site_transient( $transient );
}
}
if ( true === $delete_cache['patcher_messages'] ) {
// Delete patcher messages.
delete_site_option( 'fusion_patcher_messages' );
}
if ( true === $delete_cache['other_caches'] ) {
// Delete 3rd-party caches.
$this->clear_third_party_caches();
$this->purge_object_cache();
}
do_action( 'fusion_cache_reset_after' );
}
/**
* Clear cache from:
* - W3TC,
* - WordPress Total Cache
* - WPEngine
* - Varnish
*
* @access protected
* @since 1.0.0
*/
protected function clear_third_party_caches() {
// WP Rocket.
if ( function_exists( 'rocket_clean_domain' ) ) {
rocket_clean_domain();
}
// W3 Total Cache cache.
if ( has_action( 'w3tc_flush_posts' ) ) {
do_action( 'w3tc_flush_posts' );
}
// WP Super Cache cache.
if ( function_exists( 'wp_cache_clean_cache' ) ) {
global $file_prefix;
wp_cache_clean_cache( $file_prefix );
}
// WP Fastest Cache.
if ( function_exists( 'wpfc_clear_all_cache' ) ) {
wpfc_clear_all_cache( true );
}
// Autoptimize cache.
if ( class_exists( 'autoptimizeCache' ) && method_exists( 'autoptimizeCache', 'clearall' ) ) {
autoptimizeCache::clearall();
}
// Hummingbird Cache
if ( class_exists( '\Hummingbird\WP_Hummingbird' ) && method_exists( '\Hummingbird\WP_Hummingbird', 'flush_cache' ) ) {
\Hummingbird\WP_Hummingbird::flush_cache();
}
// LiteSpeed cache.
if ( defined( 'LSCWP_V' ) ) {
do_action( 'litespeed_purge_all' );
}
// SG Optimizer (SiteGround) cache.
if ( function_exists( 'sg_cachepress_purge_cache' ) ) {
sg_cachepress_purge_cache();
}
// WPEngine-hosted site cache.
if ( class_exists( 'WpeCommon' ) ) {
if ( method_exists( 'WpeCommon', 'purge_memcached' ) ) {
WpeCommon::purge_memcached();
}
if ( method_exists( 'WpeCommon', 'clear_cdn_cache' ) ) {
WpeCommon::clear_cdn_cache();
}
if ( method_exists( 'WpeCommon', 'purge_varnish_cache' ) ) {
WpeCommon::purge_varnish_cache();
}
}
// Pagely cache.
if ( class_exists( 'PagelyCachePurge' ) && method_exists( 'PagelyCachePurge', 'purgeAll' ) ) {
$purger = new PagelyCachePurge();
$purger->purgeAll();
}
if ( ! class_exists( 'Fusion_Settings' ) ) {
include_once 'class-fusion-settings.php';
}
// Clear Varnish caches.
$this->clear_varnish_cache();
}
/**
* Clear varnish cache for the dynamic CSS file.
*
* @access protected
* @since 1.0.0
* @return void
*/
protected function clear_varnish_cache() {
// Parse the URL for proxy proxies.
$p = wp_parse_url( home_url() );
$varnish_x_purgemethod = ( isset( $p['query'] ) && ( 'vhp=regex' === $p['query'] ) ) ? 'regex' : 'default';
if ( ! class_exists( 'Fusion_Settings' ) ) {
include_once 'class-fusion-settings.php';
}
$settings = Fusion_Settings::get_instance();
$go_varnish_ip = $settings->get( 'cache_server_ip' );
// Build a varniship.
$varniship = get_option( 'vhp_varnish_ip' );
if ( $go_varnish_ip ) {
$varniship = $go_varnish_ip;
} elseif ( defined( 'VHP_VARNISH_IP' ) && VHP_VARNISH_IP ) {
$varniship = VHP_VARNISH_IP;
}
// If we made varniship, let it sail.
$purgeme = ( isset( $varniship ) && null !== $varniship ) ? $varniship : '';
if ( $purgeme ) {
wp_remote_request(
'http://' . $purgeme,
[
'method' => 'PURGE',
'headers' => [
'host' => $p['host'],
'X-Purge-Method' => $varnish_x_purgemethod,
],
]
);
}
}
/**
* Purge the WP object cache.
*
* @access protected
* @since 3.11.8
* @return void
*/
protected function purge_object_cache() {
global $wp_object_cache;
if ( is_object( $wp_object_cache ) ) {
try {
wp_cache_flush();
} catch ( Exception $ex ) {
// Do nothing.
}
}
}
/**
* Handles resetting caches.
*
* @access public
* @since 1.1.2
*/
public function reset_caches_handler() {
if ( is_multisite() && is_main_site() ) {
$sites = get_sites();
foreach ( $sites as $site ) {
switch_to_blog( $site->blog_id );
$this->reset_all_caches();
restore_current_blog();
}
return;
}
$this->reset_all_caches();
}
}