modifyHtaccess($post); } } function wpfastestcache_deactivate(){ $wpfc = new WpFastestCache(); $path = ABSPATH; if($wpfc->is_subdirectory_install()){ $path = $wpfc->getABSPATH(); } if(is_file($path.".htaccess") && is_writable($path.".htaccess")){ $htaccess = file_get_contents($path.".htaccess"); $htaccess = preg_replace("/#\s?BEGIN\s?WpFastestCache.*?#\s?END\s?WpFastestCache/s", "", $htaccess); $htaccess = preg_replace("/#\s?BEGIN\s?GzipWpFastestCache.*?#\s?END\s?GzipWpFastestCache/s", "", $htaccess); $htaccess = preg_replace("/#\s?BEGIN\s?LBCWpFastestCache.*?#\s?END\s?LBCWpFastestCache/s", "", $htaccess); $htaccess = preg_replace("/#\s?BEGIN\s?WEBPWpFastestCache.*?#\s?END\s?WEBPWpFastestCache/s", "", $htaccess); @file_put_contents($path.".htaccess", $htaccess); } $wpfc->deleteCache(); } register_activation_hook( __FILE__, "wpfastestcache_activate"); register_deactivation_hook( __FILE__, "wpfastestcache_deactivate"); class WpFastestCache{ private $systemMessage = ""; private $options = array(); public $noscript = ""; public function __construct(){ $optimize_image_ajax_requests = array("wpfc_revert_image_ajax_request", "wpfc_statics_ajax_request", "wpfc_optimize_image_ajax_request", "wpfc_update_image_list_ajax_request" ); add_action('wp_ajax_wpfc_delete_cache', array($this, "deleteCacheToolbar")); add_action('wp_ajax_wpfc_delete_cache_and_minified', array($this, "deleteCssAndJsCacheToolbar")); add_action('wp_ajax_wpfc_delete_current_page_cache', array($this, "delete_current_page_cache")); add_action( 'wp_ajax_wpfc_save_timeout_pages', array($this, 'wpfc_save_timeout_pages_callback')); add_action( 'wp_ajax_wpfc_save_exclude_pages', array($this, 'wpfc_save_exclude_pages_callback')); add_action( 'wp_ajax_wpfc_cdn_options', array($this, 'wpfc_cdn_options_ajax_request_callback')); add_action( 'wp_ajax_wpfc_remove_cdn_integration', array($this, 'wpfc_remove_cdn_integration_ajax_request_callback')); add_action( 'wp_ajax_wpfc_save_cdn_integration', array($this, 'wpfc_save_cdn_integration_ajax_request_callback')); add_action( 'wp_ajax_wpfc_cdn_template', array($this, 'wpfc_cdn_template_ajax_request_callback')); add_action( 'wp_ajax_wpfc_check_url', array($this, 'wpfc_check_url_ajax_request_callback')); add_action( 'wp_ajax_wpfc_cache_statics_get', array($this, 'wpfc_cache_statics_get_callback')); add_action( 'wp_ajax_wpfc_db_statics', array($this, 'wpfc_db_statics_callback')); add_action( 'wp_ajax_wpfc_db_fix', array($this, 'wpfc_db_fix_callback')); add_action( 'rate_post', array($this, 'wp_postratings_clear_fastest_cache'), 10, 2); add_action( 'user_register', array($this, 'modify_htaccess_for_new_user'), 10, 1); add_action( 'profile_update', array($this, 'modify_htaccess_for_new_user'), 10, 1); add_action( 'edit_terms', array($this, 'delete_cache_of_term'), 10, 1); // to check nonce is timeout or not //add_action('init', array($this, "nonce_timeout")); // to clear cache after new Woocommerce orders add_action( 'woocommerce_checkout_order_processed', array($this, 'clear_cache_after_woocommerce_checkout_order_processed'), 1, 1); // kk Star Ratings: to clear the cache of the post after voting add_action( 'kksr_rate', array($this, 'clear_cache_on_kksr_rate')); // to clear cache after ajax request by other plugins if(isset($_POST["action"])){ // All In One Schema.org Rich Snippets if(preg_match("/bsf_(update|submit)_rating/i", $_POST["action"])){ if(isset($_POST["post_id"])){ $this->singleDeleteCache(false, $_POST["post_id"]); } } // Yet Another Stars Rating if($_POST["action"] == "yasr_send_visitor_rating"){ if(isset($_POST["post_id"])){ // to need call like that because get_permalink() does not work if we call singleDeleteCache() directly add_action('init', array($this, "singleDeleteCache")); } } } // to clear /tmpWpfc folder if(is_dir($this->getWpContentDir()."/cache/tmpWpfc")){ $this->rm_folder_recursively($this->getWpContentDir()."/cache/tmpWpfc"); } if($this->isPluginActive('wp-polls/wp-polls.php')){ //for WP-Polls require_once "inc/wp-polls.php"; $wp_polls = new WpPollsForWpFc(); $wp_polls->hook(); } if(isset($_GET) && isset($_GET["action"]) && in_array($_GET["action"], $optimize_image_ajax_requests)){ if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ include_once $this->get_premium_path("image.php"); $img = new WpFastestCacheImageOptimisation(); $img->hook(); } }else if(isset($_GET) && isset($_GET["action"]) && $_GET["action"] == "wpfastestcache"){ if(isset($_GET) && isset($_GET["type"]) && $_GET["type"] == "preload"){ // /?action=wpfastestcache&type=preload add_action('init', array($this, "create_preload_cache"), 11); } }else{ $this->setCustomInterval(); $this->options = $this->getOptions(); add_action('transition_post_status', array($this, 'on_all_status_transitions'), 10, 3 ); $this->commentHooks(); $this->checkCronTime(); if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ include_once $this->get_premium_path("mobile-cache.php"); if(file_exists(WPFC_WP_PLUGIN_DIR."/wp-fastest-cache-premium/pro/library/statics.php")){ include_once $this->get_premium_path("statics.php"); } if(!defined('DOING_AJAX')){ include_once $this->get_premium_path("powerful-html.php"); } } if(is_admin()){ add_action('wp_loaded', array($this, "load_column")); if(defined('DOING_AJAX') && DOING_AJAX){ //do nothing }else{ // to avoid loading menu and optionPage() twice if(!class_exists("WpFastestCacheAdmin")){ //for wp-panel if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ include_once $this->get_premium_path("image.php"); } if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ include_once $this->get_premium_path("logs.php"); } add_action('plugins_loaded', array($this, 'wpfc_load_plugin_textdomain')); add_action('wp_loaded', array($this, "load_admin_toolbar")); $this->admin(); } } }else{ if(preg_match("/wpfc-minified\/([^\/]+)\/([^\/]+)/", $this->current_url(), $path)){ if($sources = @scandir(WPFC_WP_CONTENT_DIR."/cache/wpfc-minified/".$path[1], 1)){ if(isset($sources[0])){ // $exist_url = str_replace($path[2], $sources[0], $this->current_url()); // header('Location: ' . $exist_url, true, 301); // exit; if(preg_match("/\.css/", $this->current_url())){ header('Content-type: text/css'); }else if(preg_match("/\.js/", $this->current_url())){ header('Content-type: text/js'); } echo file_get_contents(WPFC_WP_CONTENT_DIR."/cache/wpfc-minified/".$path[1]."/".$sources[0]); exit; } } //for non-exists files if(preg_match("/\.css/", $this->current_url())){ header('Content-type: text/css'); die("/* File not found */"); }else if(preg_match("/\.js/", $this->current_url())){ header('Content-type: text/js'); die("//File not found"); } }else{ // to show if the user is logged-in add_action('wp_loaded', array($this, "load_admin_toolbar")); //for cache $this->cache(); } } } } public function set_content_url(){ $content_url = content_url(); // Hide My WP if($this->isPluginActive('hide_my_wp/hide-my-wp.php')){ $hide_my_wp = get_option("hide_my_wp"); if(isset($hide_my_wp["new_content_path"]) && $hide_my_wp["new_content_path"]){ $hide_my_wp["new_content_path"] = trim($hide_my_wp["new_content_path"], "/"); $content_url = str_replace(basename(WPFC_WP_CONTENT_DIR), $hide_my_wp["new_content_path"], $content_url); } } if (!defined('WPFC_WP_CONTENT_URL')) { define("WPFC_WP_CONTENT_URL", $content_url); } } public function clear_cache_on_kksr_rate($id){ $this->singleDeleteCache(false, $id); } public function nonce_timeout(){ if(!is_user_logged_in()){ $run = false; $list = array( "caldera-forms/caldera-core.php", "contact-form-7/wp-contact-form-7.php", "js_composer/js_composer.php", "kk-star-ratings/index.php", "ninja-forms/ninja-forms.php", "yet-another-stars-rating/yet-another-stars-rating.php" ); foreach ($list as $key => $value) { if($this->isPluginActive($value)){ $run = true; } } if($run){ include_once('inc/nonce-timeout.php'); $wpfc_nonce = new WPFC_NONCE_TIMEOUT(WPFC_WP_CONTENT_DIR."/cache/all"); if(!$wpfc_nonce->verify_nonce()){ $this->deleteCache(); } } } } public function clear_cache_after_woocommerce_checkout_order_processed($order_id = false){ if(function_exists("wc_get_order")){ if($order_id){ $order = wc_get_order($order_id); if($order){ foreach($order->get_items() as $item_key => $item_values ){ if(method_exists($item_values, 'get_product_id')){ $this->singleDeleteCache(false, $item_values->get_product_id()); } } } } } } public function wpfc_db_fix_callback(){ if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ include_once $this->get_premium_path("db.php"); if(class_exists("WpFastestCacheDatabaseCleanup")){ WpFastestCacheDatabaseCleanup::clean($_GET["type"]); }else{ die(json_encode(array("success" => false, "showupdatewarning" => true, "message" => "Only available in Premium version"))); } }else{ die(json_encode(array("success" => false, "message" => "Only available in Premium version"))); } } public function wpfc_db_statics_callback(){ global $wpdb; $statics = array("all_warnings" => 0, "post_revisions" => 0, "trashed_contents" => 0, "trashed_spam_comments" => 0, "trackback_pingback" => 0, "transient_options" => 0 ); $statics["post_revisions"] = $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->posts` WHERE post_type = 'revision';"); $statics["all_warnings"] = $statics["all_warnings"] + $statics["post_revisions"]; $statics["trashed_contents"] = $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->posts` WHERE post_status = 'trash';"); $statics["all_warnings"] = $statics["all_warnings"] + $statics["trashed_contents"]; $statics["trashed_spam_comments"] = $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->comments` WHERE comment_approved = 'spam' OR comment_approved = 'trash' ;"); $statics["all_warnings"] = $statics["all_warnings"] + $statics["trashed_spam_comments"]; $statics["trackback_pingback"] = $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->comments` WHERE comment_type = 'trackback' OR comment_type = 'pingback' ;"); $statics["all_warnings"] = $statics["all_warnings"] + $statics["trackback_pingback"]; $element = "SELECT COUNT(*) FROM `$wpdb->options` WHERE option_name LIKE '%\_transient\_%' ;"; $statics["transient_options"] = $wpdb->get_var( $element ) > 20 ? $wpdb->get_var( $element ) : 0; $statics["all_warnings"] = $statics["all_warnings"] + $statics["transient_options"]; die(json_encode($statics)); } public function is_trailing_slash(){ // no need to check if Custom Permalinks plugin is active (https://tr.wordpress.org/plugins/custom-permalinks/) if($this->isPluginActive("custom-permalinks/custom-permalinks.php")){ return false; } if($permalink_structure = get_option('permalink_structure')){ if(preg_match("/\/$/", $permalink_structure)){ return true; } } return false; } public function wpfc_cache_statics_get_callback(){ if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ if(file_exists(WPFC_WP_PLUGIN_DIR."/wp-fastest-cache-premium/pro/library/statics.php")){ include_once $this->get_premium_path("statics.php"); $cache_statics = new WpFastestCacheStatics(); $res = $cache_statics->get(); echo json_encode($res); exit; } } } public function wpfc_check_url_ajax_request_callback(){ if(current_user_can('manage_options')){ if(preg_match("/wp\.com/", $_GET["url"]) || $_GET["url"] == "random"){ wp_send_json(array("success" => true)); } $host = str_replace("www.", "", $_SERVER["HTTP_HOST"]); $_GET["url"] = esc_url_raw($_GET["url"]); if(!preg_match("/^http/", $_GET["url"])){ $_GET["url"] = "http://".$_GET["url"]; } $response = wp_remote_get($_GET["url"], array('timeout' => 20 ) ); $header = wp_remote_retrieve_headers($response); if ( !$response || is_wp_error( $response ) ) { $res = array("success" => false, "error_message" => $response->get_error_message()); if($response->get_error_code() == "http_request_failed"){ if($response->get_error_message() == "Failure when receiving data from the peer"){ $res = array("success" => true); }else if(preg_match("/cURL\serror\s6/i", $response->get_error_message())){ //cURL error 6: Couldn't resolve host if(preg_match("/".preg_quote($host, "/")."/i", $_GET["url"])){ $res = array("success" => true); } } } }else{ $response_code = wp_remote_retrieve_response_code( $response ); if($response_code == 200){ $res = array("success" => true); }else{ if(method_exists($response, "get_error_message")){ $res = array("success" => false, "error_message" => $response->get_error_message()); }else{ $res = array("success" => false, "error_message" => wp_remote_retrieve_response_message($response)); } if(isset($header["server"]) && preg_match("/squid/i", $header["server"])){ $res = array("success" => true); } if(($response_code == 401) && (preg_match("/res\.cloudinary\.com/i", $_GET["url"]))){ $res = array("success" => true); } if(($response_code == 403) && (preg_match("/stackpathdns\.com/i", $_GET["url"]))){ $res = array("success" => true); } } } wp_send_json($res); }else{ wp_die("Must be admin"); } } public function wpfc_cdn_template_ajax_request_callback(){ if(current_user_can('manage_options')){ if($_POST["id"] == "maxcdn"){ $path = WPFC_MAIN_PATH."templates/cdn/maxcdn.php"; }else if($_POST["id"] == "other"){ $path = WPFC_MAIN_PATH."templates/cdn/other.php"; }else if($_POST["id"] == "photon"){ $path = WPFC_MAIN_PATH."templates/cdn/photon.php"; }else{ die("Wrong cdn"); } ob_start(); include_once($path); $content = ob_get_contents(); ob_end_clean(); $res = array("success" => false, "content" => ""); if($data = @file_get_contents($path)){ $res["success"] = true; $res["content"] = $content; } echo json_encode($res); exit; }else{ wp_die("Must be admin"); } } public function wpfc_save_cdn_integration_ajax_request_callback(){ if(current_user_can('manage_options')){ if($data = get_option("WpFastestCacheCDN")){ $cdn_exist = false; $arr = json_decode($data); if(is_array($arr)){ foreach ($arr as $cdn_key => &$cdn_value) { if($cdn_value->id == $_POST["values"]["id"]){ $cdn_value = $_POST["values"]; $cdn_exist = true; } } if(!$cdn_exist){ array_push($arr, $_POST["values"]); } update_option("WpFastestCacheCDN", json_encode($arr)); }else{ $tmp_arr = array(); if($arr->id == $_POST["values"]["id"]){ array_push($tmp_arr, $_POST["values"]); }else{ array_push($tmp_arr, $arr); array_push($tmp_arr, $_POST["values"]); } update_option("WpFastestCacheCDN", json_encode($tmp_arr)); } }else{ $arr = array(); array_push($arr, $_POST["values"]); add_option("WpFastestCacheCDN", json_encode($arr), null, "yes"); } echo json_encode(array("success" => true)); exit; }else{ wp_die("Must be admin"); } } public function wpfc_remove_cdn_integration_ajax_request_callback(){ if(current_user_can('manage_options')){ $cdn_values = get_option("WpFastestCacheCDN"); if($cdn_values){ $std_obj = json_decode($cdn_values); $cdn_values_arr = array(); if(is_array($std_obj)){ $cdn_values_arr = $std_obj; }else{ array_push($cdn_values_arr, $std_obj); } foreach ($cdn_values_arr as $cdn_key => $cdn_value) { if($cdn_value->id == "amazonaws" || $cdn_value->id == "keycdn" || $cdn_value->id == "cdn77"){ $cdn_value->id = "other"; } if($cdn_value->id == $_POST["id"]){ unset($cdn_values_arr[$cdn_key]); } } $cdn_values_arr = array_values($cdn_values_arr); } if(count($cdn_values_arr) > 0){ update_option("WpFastestCacheCDN", json_encode($cdn_values_arr)); }else{ delete_option("WpFastestCacheCDN"); } echo json_encode(array("success" => true)); exit; }else{ wp_die("Must be admin"); } } public function wpfc_cdn_options_ajax_request_callback(){ if(current_user_can('manage_options')){ $cdn_values = get_option("WpFastestCacheCDN"); if($cdn_values){ echo $cdn_values; }else{ echo json_encode(array("success" => false)); } exit; }else{ wp_die("Must be admin"); } } public function wpfc_save_exclude_pages_callback(){ if(!wp_verify_nonce($_POST["security"], 'wpfc-save-exclude-ajax-nonce')){ die( 'Security check' ); } if(current_user_can('manage_options')){ if(isset($_POST["rules"])){ foreach ($_POST["rules"] as $key => &$value) { $value["prefix"] = strip_tags($value["prefix"]); $value["content"] = strip_tags($value["content"]); $value["prefix"] = preg_replace("/\'|\"/", "", $value["prefix"]); $value["content"] = preg_replace("/\'|\"/", "", $value["content"]); $value["content"] = trim($value["content"], "/"); $value["content"] = preg_replace("/(\#|\s|\(|\)|\*)/", "", $value["content"]); if($value["prefix"] == "homepage"){ $this->deleteHomePageCache(false); } } $data = json_encode($_POST["rules"]); if(get_option("WpFastestCacheExclude")){ update_option("WpFastestCacheExclude", $data); }else{ add_option("WpFastestCacheExclude", $data, null, "yes"); } }else{ delete_option("WpFastestCacheExclude"); } $this->modify_htaccess_for_exclude(); echo json_encode(array("success" => true)); exit; }else{ wp_die("Must be admin"); } } public function modify_htaccess_for_exclude(){ $path = ABSPATH; if($this->is_subdirectory_install()){ $path = $this->getABSPATH(); } $htaccess = @file_get_contents($path.".htaccess"); if(preg_match("/\#\s?Start\sWPFC\sExclude/", $htaccess)){ $exclude_rules = $this->excludeRules(); $htaccess = preg_replace("/\#\s?Start\sWPFC\sExclude[^\#]*\#\s?End\sWPFC\sExclude\s+/", $exclude_rules, $htaccess); } @file_put_contents($path.".htaccess", $htaccess); } public function wpfc_save_timeout_pages_callback(){ if(!wp_verify_nonce($_POST["security"], 'wpfc-save-timeout-ajax-nonce')){ die( 'Security check' ); } if(current_user_can('manage_options')){ $this->setCustomInterval(); $crons = _get_cron_array(); foreach ($crons as $cron_key => $cron_value) { foreach ( (array) $cron_value as $hook => $events ) { if(preg_match("/^wp\_fastest\_cache(.*)/", $hook, $id)){ if(!$id[1] || preg_match("/^\_(\d+)$/", $id[1])){ foreach ( (array) $events as $event_key => $event ) { if($id[1]){ wp_clear_scheduled_hook("wp_fastest_cache".$id[1], $event["args"]); }else{ wp_clear_scheduled_hook("wp_fastest_cache", $event["args"]); } } } } } } if(isset($_POST["rules"]) && count($_POST["rules"]) > 0){ $i = 0; foreach ($_POST["rules"] as $key => $value) { if(preg_match("/^(daily|onceaday)$/i", $value["schedule"]) && isset($value["hour"]) && isset($value["minute"]) && strlen($value["hour"]) > 0 && strlen($value["minute"]) > 0){ $args = array("prefix" => $value["prefix"], "content" => $value["content"], "hour" => $value["hour"], "minute" => $value["minute"]); $timestamp = mktime($value["hour"],$value["minute"],0,date("m"),date("d"),date("Y")); $timestamp = $timestamp > time() ? $timestamp : $timestamp + 60*60*24; }else{ $args = array("prefix" => $value["prefix"], "content" => $value["content"]); $timestamp = time(); } wp_schedule_event($timestamp, $value["schedule"], "wp_fastest_cache_".$i, array(json_encode($args))); $i = $i + 1; } } echo json_encode(array("success" => true)); exit; }else{ wp_die("Must be admin"); } } public function wp_postratings_clear_fastest_cache($rate_userid, $post_id){ // to remove cache if vote is from homepage or category page or tag if(isset($_SERVER["HTTP_REFERER"]) && $_SERVER["HTTP_REFERER"]){ $url = parse_url($_SERVER["HTTP_REFERER"]); $url["path"] = isset($url["path"]) ? $url["path"] : "/index.html"; if(isset($url["path"])){ if($url["path"] == "/"){ $this->rm_folder_recursively($this->getWpContentDir()."/cache/all/index.html"); }else{ $this->rm_folder_recursively($this->getWpContentDir()."/cache/all".$url["path"]); } } } if($post_id){ $this->singleDeleteCache(false, $post_id); } } private function admin(){ if(isset($_GET["page"]) && $_GET["page"] == "wpfastestcacheoptions"){ include_once('inc/admin.php'); $wpfc = new WpFastestCacheAdmin(); $wpfc->addMenuPage(); }else{ add_action('admin_menu', array($this, 'register_my_custom_menu_page')); } } public function load_column(){ if(!defined('WPFC_HIDE_CLEAR_CACHE_BUTTON') || (defined('WPFC_HIDE_CLEAR_CACHE_BUTTON') && !WPFC_HIDE_CLEAR_CACHE_BUTTON)){ include_once plugin_dir_path(__FILE__)."inc/column.php"; $column = new WpFastestCacheColumn(); $column->add(); } } public function load_admin_toolbar(){ if(!defined('WPFC_HIDE_TOOLBAR') || (defined('WPFC_HIDE_TOOLBAR') && !WPFC_HIDE_TOOLBAR)){ $show = false; // Admin $show = (current_user_can( 'manage_options' ) || current_user_can('edit_others_pages')) ? true : false; // Author if(defined('WPFC_TOOLBAR_FOR_AUTHOR') && WPFC_TOOLBAR_FOR_AUTHOR){ if(current_user_can( 'delete_published_posts' ) || current_user_can('edit_published_posts')) { $show = true; } } if($show){ include_once plugin_dir_path(__FILE__)."inc/admin-toolbar.php"; $toolbar = new WpFastestCacheAdminToolbar(); $toolbar->add(); } } } public function register_my_custom_menu_page(){ if(function_exists('add_menu_page')){ add_menu_page("WP Fastest Cache Settings", "WP Fastest Cache", 'manage_options', "wpfastestcacheoptions", array($this, 'optionsPage'), plugins_url("wp-fastest-cache/images/icon-32x32.png")); wp_enqueue_style("wp-fastest-cache", plugins_url("wp-fastest-cache/css/style.css"), array(), time(), "all"); } if(isset($_GET["page"]) && $_GET["page"] == "wpfastestcacheoptions"){ wp_enqueue_style("wp-fastest-cache-buycredit", plugins_url("wp-fastest-cache/css/buycredit.css"), array(), time(), "all"); wp_enqueue_style("wp-fastest-cache-flaticon", plugins_url("wp-fastest-cache/css/flaticon.css"), array(), time(), "all"); wp_enqueue_style("wp-fastest-cache-dialog", plugins_url("wp-fastest-cache/css/dialog.css"), array(), time(), "all"); } } public function deleteCacheToolbar(){ $this->deleteCache(); } public function deleteCssAndJsCacheToolbar(){ $this->deleteCache(true); } public function delete_current_page_cache(){ if(isset($_GET["path"])){ if($_GET["path"]){ if($_GET["path"] == "/"){ $_GET["path"] = $_GET["path"]."index.html"; } }else{ $_GET["path"] = "/index.html"; } $_GET["path"] = esc_url_raw($_GET["path"]); $paths = array(); array_push($paths, $this->getWpContentDir()."/cache/all".$_GET["path"]); if(class_exists("WpFcMobileCache")){ $wpfc_mobile = new WpFcMobileCache(); array_push($paths, $this->getWpContentDir()."/cache/".$wpfc_mobile->get_folder_name()."".$_GET["path"]); } foreach ($paths as $key => $value){ if(file_exists($value)){ if(preg_match("/\/(all|wpfc-mobile-cache)\/index\.html$/i", $value)){ @unlink($value); }else{ $this->rm_folder_recursively($value); } } } die(json_encode(array("The cache of page has been cleared","success"))); }else{ die(json_encode(array("Path has NOT been defined", "error", "alert"))); } exit; } private function cache(){ include_once('inc/cache.php'); $wpfc = new WpFastestCacheCreateCache(); $wpfc->createCache(); } protected function slug(){ return "wp_fastest_cache"; } protected function getWpContentDir(){ return WPFC_WP_CONTENT_DIR; } protected function getOptions(){ return $GLOBALS["wp_fastest_cache_options"]; } protected function getSystemMessage(){ return $this->systemMessage; } protected function get_excluded_useragent(){ return "facebookexternalhit|WhatsApp|Mediatoolkitbot"; } // protected function detectNewPost(){ // if(isset($this->options->wpFastestCacheNewPost) && isset($this->options->wpFastestCacheStatus)){ // add_filter ('save_post', array($this, 'deleteCache')); // } // } public function deleteWidgetCache(){ $widget_cache_path = $this->getWpContentDir()."/cache/wpfc-widget-cache"; if(is_dir($widget_cache_path)){ if(!is_dir($this->getWpContentDir()."/cache/tmpWpfc")){ if(@mkdir($this->getWpContentDir()."/cache/tmpWpfc", 0755, true)){ //tmpWpfc has been created } } if(@rename($widget_cache_path, $this->getWpContentDir()."/cache/tmpWpfc/w".time())){ //DONE } } } public function on_all_status_transitions($new_status, $old_status, $post) { if ( ! wp_is_post_revision($post->ID) ){ if(isset($this->options->wpFastestCacheNewPost) && isset($this->options->wpFastestCacheStatus)){ if($new_status == "publish" && $old_status != "publish"){ if(isset($this->options->wpFastestCacheNewPost_type) && $this->options->wpFastestCacheNewPost_type){ if($this->options->wpFastestCacheNewPost_type == "all"){ $this->deleteCache(); }else if($this->options->wpFastestCacheNewPost_type == "homepage"){ $this->deleteHomePageCache(); //to clear category cache and tag cache $this->singleDeleteCache(false, $post->ID); //to clear widget cache $this->deleteWidgetCache(); } }else{ $this->deleteCache(); } } } if($new_status == "publish" && $old_status == "publish"){ if(isset($this->options->wpFastestCacheUpdatePost) && isset($this->options->wpFastestCacheStatus)){ if($this->options->wpFastestCacheUpdatePost_type == "post"){ $this->singleDeleteCache(false, $post->ID); }else if($this->options->wpFastestCacheUpdatePost_type == "all"){ $this->deleteCache(); } } } if($new_status == "trash" && $old_status == "publish"){ $this->singleDeleteCache(false, $post->ID); }else if(($new_status == "draft" || $new_status == "pending" || $new_status == "private") && $old_status == "publish"){ $this->deleteCache(); } } } protected function commentHooks(){ //it works when the status of a comment changes add_filter ('wp_set_comment_status', array($this, 'singleDeleteCache')); //it works when a comment is saved in the database add_filter ('comment_post', array($this, 'detectNewComment')); } public function detectNewComment($comment_id){ if(current_user_can( 'manage_options') || !get_option('comment_moderation')){ $this->singleDeleteCache($comment_id); } } public function singleDeleteCache($comment_id = false, $post_id = false){ $to_clear_parents = true; // not to clear cache of homepage/cats/tags after ajax request by other plugins if(isset($_POST) && isset($_POST["action"])){ // kk Star Rating if($_POST["action"] == "kksr_ajax"){ $to_clear_parents = false; } // All In One Schema.org Rich Snippets if(preg_match("/bsf_(update|submit)_rating/i", $_POST["action"])){ $to_clear_parents = false; } // Yet Another Stars Rating if($_POST["action"] == "yasr_send_visitor_rating"){ $to_clear_parents = false; $post_id = $_POST["post_id"]; } } if($comment_id){ $comment_id = intval($comment_id); $comment = get_comment($comment_id); if($comment && $comment->comment_post_ID){ $post_id = $comment->comment_post_ID; } } if($post_id){ $post_id = intval($post_id); $permalink = get_permalink($post_id); $permalink = urldecode(get_permalink($post_id)); //for trash contents $permalink = rtrim($permalink, "/"); $permalink = preg_replace("/__trashed$/", "", $permalink); if(preg_match("/https?:\/\/[^\/]+\/(.+)/", $permalink, $out)){ //WPML language switch //https://wpml.org/forums/topic/wpml-language-switch-wp-fastest-cache-issue/ if($this->isPluginActive('sitepress-multilingual-cms/sitepress.php')){ $current_language = apply_filters('wpml_current_language', false); $path = $this->getWpContentDir()."/cache/all/".$current_language."/".$out[1]; $mobile_path = $this->getWpContentDir()."/cache/wpfc-mobile-cache/".$current_language."/".$out[1]; }else{ $path = $this->getWpContentDir()."/cache/all/".$out[1]; $mobile_path = $this->getWpContentDir()."/cache/wpfc-mobile-cache/".$out[1]; } if(is_dir($path)){ if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ include_once $this->get_premium_path("logs.php"); $log = new WpFastestCacheLogs("delete"); $log->action(); } $this->rm_folder_recursively($path); } if(is_dir($mobile_path)){ $this->rm_folder_recursively($mobile_path); } } if($to_clear_parents){ // to clear cache of homepage $this->deleteHomePageCache(); // to clear cache of cats and tags which contains the post (only first page) global $wpdb; $terms = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."term_relationships` WHERE `object_id`=".$post_id, ARRAY_A); foreach ($terms as $term_key => $term_val){ $this->delete_cache_of_term($term_val["term_taxonomy_id"]); } } } } public function delete_cache_of_term($term_id){ $term = get_term($term_id); if(!$term || is_wp_error($term)){ return false; } if(preg_match("/cat|tag/", $term->taxonomy)){ $url = get_term_link($term->term_id, $term->taxonomy); if(preg_match("/^http/", $url)){ $path = preg_replace("/https?\:\/\/[^\/]+/i", "", $url); $path = trim($path, "/"); // to remove the cache of tag/cat @unlink($this->getWpContentDir()."/cache/all/".$path."/index.html"); @unlink($this->getWpContentDir()."/cache/wpfc-mobile-cache/".$path."/index.html"); // to remove the cache of the pages $this->rm_folder_recursively($this->getWpContentDir()."/cache/all/".$path."/page"); $this->rm_folder_recursively($this->getWpContentDir()."/cache/wpfc-mobile-cache/".$path."/page"); } } } public function deleteHomePageCache($log = true){ $site_url_path = preg_replace("/https?\:\/\/[^\/]+/i", "", site_url()); $home_url_path = preg_replace("/https?\:\/\/[^\/]+/i", "", home_url()); if($site_url_path){ $site_url_path = trim($site_url_path, "/"); if($site_url_path){ @unlink($this->getWpContentDir()."/cache/all/".$site_url_path."/index.html"); @unlink($this->getWpContentDir()."/cache/wpfc-mobile-cache/".$site_url_path."/index.html"); } } if($home_url_path){ $home_url_path = trim($home_url_path, "/"); if($home_url_path){ @unlink($this->getWpContentDir()."/cache/all/".$home_url_path."/index.html"); @unlink($this->getWpContentDir()."/cache/wpfc-mobile-cache/".$home_url_path."/index.html"); } } @unlink($this->getWpContentDir()."/cache/all/index.html"); @unlink($this->getWpContentDir()."/cache/wpfc-mobile-cache/index.html"); if($log){ if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ include_once $this->get_premium_path("logs.php"); $log = new WpFastestCacheLogs("delete"); $log->action(); } } } public function deleteCache($minified = false){ $this->set_preload(); $created_tmpWpfc = false; $cache_deleted = false; $minifed_deleted = false; $cache_path = $this->getWpContentDir()."/cache/all"; $minified_cache_path = $this->getWpContentDir()."/cache/wpfc-minified"; if(class_exists("WpFcMobileCache")){ $wpfc_mobile = new WpFcMobileCache(); $wpfc_mobile->delete_cache($this->getWpContentDir()); } if(!is_dir($this->getWpContentDir()."/cache/tmpWpfc")){ if(@mkdir($this->getWpContentDir()."/cache/tmpWpfc", 0755, true)){ $created_tmpWpfc = true; }else{ $created_tmpWpfc = false; //$this->systemMessage = array("Permission of /wp-content/cache must be 755", "error"); } }else{ $created_tmpWpfc = true; } //to clear widget cache path $this->deleteWidgetCache(); if(is_dir($cache_path)){ if(@rename($cache_path, $this->getWpContentDir()."/cache/tmpWpfc/".time())){ delete_option("WpFastestCacheHTML"); delete_option("WpFastestCacheHTMLSIZE"); delete_option("WpFastestCacheMOBILE"); delete_option("WpFastestCacheMOBILESIZE"); $cache_deleted = true; } }else{ $cache_deleted = true; } if($minified){ if(is_dir($minified_cache_path)){ if(@rename($minified_cache_path, $this->getWpContentDir()."/cache/tmpWpfc/m".time())){ delete_option("WpFastestCacheCSS"); delete_option("WpFastestCacheCSSSIZE"); delete_option("WpFastestCacheJS"); delete_option("WpFastestCacheJSSIZE"); $minifed_deleted = true; } }else{ $minifed_deleted = true; } }else{ $minifed_deleted = true; } if($created_tmpWpfc && $cache_deleted && $minifed_deleted){ $this->systemMessage = array("All cache files have been deleted","success"); if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ include_once $this->get_premium_path("logs.php"); $log = new WpFastestCacheLogs("delete"); $log->action(); } }else{ $this->systemMessage = array("Permissions Problem: Read More", "error", array("light_box" => "delete_cache_permission_error")); } // for ajax request if(isset($_GET["action"]) && in_array($_GET["action"], array("wpfc_delete_cache", "wpfc_delete_cache_and_minified"))){ die(json_encode($this->systemMessage)); } } public function checkCronTime(){ $crons = _get_cron_array(); foreach ((array)$crons as $cron_key => $cron_value) { foreach ( (array) $cron_value as $hook => $events ) { if(preg_match("/^wp\_fastest\_cache(.*)/", $hook, $id)){ if(!$id[1] || preg_match("/^\_(\d+)$/", $id[1])){ foreach ( (array) $events as $event_key => $event ) { add_action("wp_fastest_cache".$id[1], array($this, 'setSchedule')); } } } } } add_action($this->slug()."_Preload", array($this, 'create_preload_cache'), 11); } public function set_preload(){ $preload_arr = array(); if(!empty($_POST) && isset($_POST["wpFastestCachePreload"])){ foreach ($_POST as $key => $value) { $key = esc_attr($key); $value = esc_attr($value); preg_match("/wpFastestCachePreload_(.+)/", $key, $type); if(!empty($type)){ if($type[1] == "restart"){ //to need to remove "restart" value }else if($type[1] == "number"){ $preload_arr[$type[1]] = $value; }else{ $preload_arr[$type[1]] = 0; } } } } if($data = get_option("WpFastestCachePreLoad")){ $preload_std = json_decode($data); if(!empty($preload_arr)){ foreach ($preload_arr as $key => &$value) { if(!empty($preload_std->$key)){ if($key != "number"){ $value = $preload_std->$key; } } } $preload_std = $preload_arr; }else{ foreach ($preload_std as $key => &$value) { if($key != "number"){ $value = 0; } } } update_option("WpFastestCachePreLoad", json_encode($preload_std)); if(!wp_next_scheduled($this->slug()."_Preload")){ wp_schedule_event(time() + 5, 'everyfiveminute', $this->slug()."_Preload"); } }else{ if(!empty($preload_arr)){ add_option("WpFastestCachePreLoad", json_encode($preload_arr), null, "yes"); if(!wp_next_scheduled($this->slug()."_Preload")){ wp_schedule_event(time() + 5, 'everyfiveminute', $this->slug()."_Preload"); } }else{ //toDO } } } public function create_preload_cache(){ if($data = get_option("WpFastestCachePreLoad")){ $count_posts = wp_count_posts("post"); $count_pages = wp_count_posts('page'); $this->options = $this->getOptions(); $pre_load = json_decode($data); $number = $pre_load->number; $urls_limit = isset($this->options->wpFastestCachePreload_number) ? $this->options->wpFastestCachePreload_number : 4; // must be even $urls = array(); if(isset($this->options->wpFastestCacheMobileTheme) && $this->options->wpFastestCacheMobileTheme){ $mobile_theme = true; $number = $number/2; }else{ $mobile_theme = false; } // HOME if(isset($pre_load->homepage) && $pre_load->homepage > -1){ if($mobile_theme){ array_push($urls, array("url" => get_option("home"), "user-agent" => "mobile")); $number--; } array_push($urls, array("url" => get_option("home"), "user-agent" => "desktop")); $number--; $pre_load->homepage = -1; } // POST if($number > 0 && isset($pre_load->post) && $pre_load->post > -1){ // $recent_posts = wp_get_recent_posts(array( // 'numberposts' => $number, // 'offset' => $pre_load->post, // 'orderby' => 'ID', // 'order' => 'DESC', // 'post_type' => 'post', // 'post_status' => 'publish', // 'suppress_filters' => true // ), ARRAY_A); global $wpdb; $recent_posts = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS ".$wpdb->prefix."posts.ID FROM ".$wpdb->prefix."posts WHERE 1=1 AND (".$wpdb->prefix."posts.post_type = 'post' OR ".$wpdb->prefix."posts.post_type = 'product') AND ((".$wpdb->prefix."posts.post_status = 'publish')) ORDER BY ".$wpdb->prefix."posts.ID DESC LIMIT ".$pre_load->post.", ".$number, ARRAY_A); if(count($recent_posts) > 0){ foreach ($recent_posts as $key => $post) { if($mobile_theme){ array_push($urls, array("url" => get_permalink($post["ID"]), "user-agent" => "mobile")); $number--; } array_push($urls, array("url" => get_permalink($post["ID"]), "user-agent" => "desktop")); $number--; $pre_load->post = $pre_load->post + 1; } }else{ $pre_load->post = -1; } } // ATTACHMENT if($number > 0 && isset($pre_load->attachment) && $pre_load->attachment > -1){ global $wpdb; $recent_attachments = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS ".$wpdb->prefix."posts.ID FROM ".$wpdb->prefix."posts WHERE 1=1 AND (".$wpdb->prefix."posts.post_type = 'attachment') ORDER BY ".$wpdb->prefix."posts.ID DESC LIMIT ".$pre_load->attachment.", ".$number, ARRAY_A); if(count($recent_attachments) > 0){ foreach ($recent_attachments as $key => $attachment) { if($mobile_theme){ array_push($urls, array("url" => get_permalink($attachment["ID"]), "user-agent" => "mobile")); $number--; } array_push($urls, array("url" => get_permalink($attachment["ID"]), "user-agent" => "desktop")); $number--; $pre_load->attachment = $pre_load->attachment + 1; } }else{ $pre_load->attachment = -1; } } // PAGE if($number > 0 && isset($pre_load->page) && $pre_load->page > -1){ $pages = get_pages(array( 'sort_order' => 'DESC', 'sort_column' => 'ID', 'parent' => -1, 'hierarchical' => 0, 'number' => $number, 'offset' => $pre_load->page, 'post_type' => 'page', 'post_status' => 'publish' )); if(count($pages) > 0){ foreach ($pages as $key => $page) { $page_url = get_option("home")."/".get_page_uri($page->ID); if($mobile_theme){ array_push($urls, array("url" => $page_url, "user-agent" => "mobile")); $number--; } array_push($urls, array("url" => $page_url, "user-agent" => "desktop")); $number--; $pre_load->page = $pre_load->page + 1; } }else{ $pre_load->page = -1; } } // CATEGORY if($number > 0 && isset($pre_load->category) && $pre_load->category > -1){ // $categories = get_terms(array( // 'taxonomy' => array('category', 'product_cat'), // 'orderby' => 'id', // 'order' => 'DESC', // 'hide_empty' => false, // 'number' => $number, // 'fields' => 'all', // 'pad_counts' => false, // 'offset' => $pre_load->category // )); global $wpdb; $categories = $wpdb->get_results("SELECT t.*, tt.* FROM ".$wpdb->prefix."terms AS t INNER JOIN ".$wpdb->prefix."term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('category', 'product_cat', 'hersteller', 'anschlussart', 'typ') ORDER BY t.term_id ASC LIMIT ".$pre_load->category.", ".$number, ARRAY_A); if(count($categories) > 0){ foreach ($categories as $key => $category) { if($mobile_theme){ array_push($urls, array("url" => get_term_link($category["slug"], $category["taxonomy"]), "user-agent" => "mobile")); $number--; } array_push($urls, array("url" => get_term_link($category["slug"], $category["taxonomy"]), "user-agent" => "desktop")); $number--; $pre_load->category = $pre_load->category + 1; } }else{ $pre_load->category = -1; } } // TAG if($number > 0 && isset($pre_load->tag) && $pre_load->tag > -1){ // $tags = get_terms(array( // 'taxonomy' => array('post_tag', 'product_tag'), // 'orderby' => 'id', // 'order' => 'DESC', // 'hide_empty' => false, // 'number' => $number, // 'fields' => 'all', // 'pad_counts' => false, // 'offset' => $pre_load->tag // )); global $wpdb; $tags = $wpdb->get_results("SELECT t.*, tt.* FROM ".$wpdb->prefix."terms AS t INNER JOIN ".$wpdb->prefix."term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('post_tag', 'product_tag') ORDER BY t.term_id ASC LIMIT ".$pre_load->tag.", ".$number, ARRAY_A); if(count($tags) > 0){ foreach ($tags as $key => $tag) { if($mobile_theme){ array_push($urls, array("url" => get_term_link($tag["slug"], $tag["taxonomy"]), "user-agent" => "mobile")); $number--; } array_push($urls, array("url" => get_term_link($tag["slug"], $tag["taxonomy"]), "user-agent" => "desktop")); $number--; $pre_load->tag = $pre_load->tag + 1; } }else{ $pre_load->tag = -1; } } if(count($urls) > 0){ foreach ($urls as $key => $arr) { $user_agent = ""; if($arr["user-agent"] == "desktop"){ $user_agent = "WP Fastest Cache Preload Bot"; }else if($arr["user-agent"] == "mobile"){ $user_agent = "WP Fastest Cache Preload iPhone Mobile Bot"; } if($this->wpfc_remote_get($arr["url"], $user_agent)){ $status = "OK"; }else{ $status = "ERROR"; } echo $status." ".$arr["url"]." (".$arr["user-agent"].")
"; } echo "
"; echo count($urls)." page have been cached"; update_option("WpFastestCachePreLoad", json_encode($pre_load)); echo "

"; // if(isset($pre_load->homepage)){ // if($pre_load->homepage == -1){ // echo "Homepage: 1/1"."
"; // } // } // if(isset($pre_load->post)){ // if($pre_load->post > -1){ // echo "Posts: ".$pre_load->post."/".$count_posts->publish."
"; // }else{ // echo "Posts: ".$count_posts->publish."/".$count_posts->publish."
"; // } // } // if(isset($pre_load->page)){ // if($pre_load->page > -1){ // echo "Pages: ".$pre_load->page."/".$count_pages->publish."
"; // }else{ // echo "Pages: ".$count_pages->publish."/".$count_pages->publish."
"; // } // } }else{ if(isset($this->options->wpFastestCachePreload_restart)){ foreach ($pre_load as $pre_load_key => &$pre_load_value) { if($pre_load_key != "number"){ $pre_load_value = 0; } } update_option("WpFastestCachePreLoad", json_encode($pre_load)); echo "Preload Restarted"; }else{ echo "Completed"; wp_clear_scheduled_hook("wp_fastest_cache_Preload"); } } } if(isset($_GET) && isset($_GET["type"]) && $_GET["type"] == "preload"){ die(); } } public function wpfc_remote_get($url, $user_agent){ //$response = wp_remote_get($url, array('timeout' => 10, 'sslverify' => false, 'headers' => array("cache-control" => array("no-store, no-cache, must-revalidate", "post-check=0, pre-check=0"),'user-agent' => $user_agent))); $response = wp_remote_get($url, array('user-agent' => $user_agent, 'timeout' => 10, 'sslverify' => false, 'headers' => array("cache-control" => "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"))); if (!$response || is_wp_error($response)){ echo $response->get_error_message()." - "; return false; }else{ if(wp_remote_retrieve_response_code($response) != 200){ return false; } } return true; } public function setSchedule($args = ""){ if($args){ $rule = json_decode($args); if($rule->prefix == "all"){ $this->deleteCache(); }else if($rule->prefix == "homepage"){ @unlink($this->getWpContentDir()."/cache/all/index.html"); @unlink($this->getWpContentDir()."/cache/wpfc-mobile-cache/index.html"); if(isset($this->options->wpFastestCachePreload_homepage) && $this->options->wpFastestCachePreload_homepage){ $this->wpfc_remote_get(get_option("home"), "WP Fastest Cache Preload Bot - After Cache Timeout"); $this->wpfc_remote_get(get_option("home"), "WP Fastest Cache Preload iPhone Mobile Bot - After Cache Timeout"); } }else if($rule->prefix == "startwith"){ if(!is_dir($this->getWpContentDir()."/cache/tmpWpfc")){ if(@mkdir($this->getWpContentDir()."/cache/tmpWpfc", 0755, true)){} } $rule->content = trim($rule->content, "/"); $files = glob($this->getWpContentDir()."/cache/all/".$rule->content."*"); foreach ((array)$files as $file) { $mobile_file = str_replace("/cache/all/", "/cache/wpfc-mobile-cache/", $file); @rename($file, $this->getWpContentDir()."/cache/tmpWpfc/".time()); @rename($mobile_file, $this->getWpContentDir()."/cache/tmpWpfc/mobile_".time()); } }else if($rule->prefix == "exact"){ $rule->content = trim($rule->content, "/"); @unlink($this->getWpContentDir()."/cache/all/".$rule->content."/index.html"); @unlink($this->getWpContentDir()."/cache/wpfc-mobile-cache/".$rule->content."/index.html"); } if($rule->prefix != "all"){ if($this->isPluginActive("wp-fastest-cache-premium/wpFastestCachePremium.php")){ include_once $this->get_premium_path("logs.php"); $log = new WpFastestCacheLogs("delete"); $log->action($rule); } } }else{ //for old cron job $this->deleteCache(); } } public function modify_htaccess_for_new_user($user_id){ $path = ABSPATH; if($this->is_subdirectory_install()){ $path = $this->getABSPATH(); } $htaccess = @file_get_contents($path.".htaccess"); if(preg_match("/\#\s?Start_WPFC_Exclude_Admin_Cookie/", $htaccess)){ $rules = $this->excludeAdminCookie(); $htaccess = preg_replace("/\#\s?Start_WPFC_Exclude_Admin_Cookie[^\#]*\#\s?End_WPFC_Exclude_Admin_Cookie\s+/", $rules, $htaccess); } @file_put_contents($path.".htaccess", $htaccess); } public function excludeAdminCookie(){ $rules = ""; $users_groups = array_chunk(get_users(array("role" => "administrator", "fields" => array("user_login"))), 5); foreach ($users_groups as $group_key => $group) { $tmp_users = ""; $tmp_rule = ""; foreach ($group as $key => $value) { if($tmp_users){ $tmp_users = $tmp_users."|".sanitize_user(wp_unslash($value->user_login), true); }else{ $tmp_users = sanitize_user(wp_unslash($value->user_login), true); } // to replace spaces with \s $tmp_users = preg_replace("/\s/", "\s", $tmp_users); if(!next($group)){ $tmp_rule = "RewriteCond %{HTTP:Cookie} !wordpress_logged_in_[^\=]+\=".$tmp_users; } } if($rules){ $rules = $rules."\n".$tmp_rule; }else{ $rules = $tmp_rule; } } return "# Start_WPFC_Exclude_Admin_Cookie\n".$rules."\n# End_WPFC_Exclude_Admin_Cookie\n"; } public function excludeRules(){ $htaccess_page_rules = ""; $htaccess_page_useragent = ""; $htaccess_page_cookie = ""; if($rules_json = get_option("WpFastestCacheExclude")){ if($rules_json != "null"){ $rules_std = json_decode($rules_json); foreach ($rules_std as $key => $value) { $value->type = isset($value->type) ? $value->type : "page"; // escape the chars $value->content = str_replace("?", "\?", $value->content); if($value->type == "page"){ if($value->prefix == "startwith"){ $htaccess_page_rules = $htaccess_page_rules."RewriteCond %{REQUEST_URI} !^/".$value->content." [NC]\n"; } if($value->prefix == "contain"){ $htaccess_page_rules = $htaccess_page_rules."RewriteCond %{REQUEST_URI} !".$value->content." [NC]\n"; } if($value->prefix == "exact"){ $htaccess_page_rules = $htaccess_page_rules."RewriteCond %{REQUEST_URI} !\/".$value->content." [NC]\n"; } }else if($value->type == "useragent"){ $htaccess_page_useragent = $htaccess_page_useragent."RewriteCond %{HTTP_USER_AGENT} !".$value->content." [NC]\n"; }else if($value->type == "cookie"){ $htaccess_page_cookie = $htaccess_page_cookie."RewriteCond %{HTTP:Cookie} !".$value->content." [NC]\n"; } } } } return "# Start WPFC Exclude\n".$htaccess_page_rules.$htaccess_page_useragent.$htaccess_page_cookie."# End WPFC Exclude\n"; } public function getABSPATH(){ $path = ABSPATH; $siteUrl = site_url(); $homeUrl = home_url(); $diff = str_replace($homeUrl, "", $siteUrl); $diff = trim($diff,"/"); $pos = strrpos($path, $diff); if($pos !== false){ $path = substr_replace($path, "", $pos, strlen($diff)); $path = trim($path,"/"); $path = "/".$path."/"; } return $path; } public function rm_folder_recursively($dir, $i = 1) { $files = @scandir($dir); foreach((array)$files as $file) { if($i > 50 && !preg_match("/wp-fastest-cache-premium/i", $dir)){ return true; }else{ $i++; } if ('.' === $file || '..' === $file) continue; if (is_dir("$dir/$file")){ $this->rm_folder_recursively("$dir/$file", $i); }else{ if(file_exists("$dir/$file")){ @unlink("$dir/$file"); } } } $files_tmp = @scandir($dir); if(is_dir($dir) && !isset($files_tmp[2])){ @rmdir($dir); } return true; } public function is_subdirectory_install(){ if(strlen(site_url()) > strlen(home_url())){ return true; } return false; } protected function getMobileUserAgents(){ return implode("|", $this->get_mobile_browsers())."|".implode("|", $this->get_operating_systems()); } public function get_premium_path($name){ return WPFC_WP_PLUGIN_DIR."/wp-fastest-cache-premium/pro/library/".$name; } public function cron_add_minute( $schedules ) { $schedules['everyminute'] = array( 'interval' => 60*1, 'display' => __( 'Once Every 1 Minute' ), 'wpfc' => false ); $schedules['everyfiveminute'] = array( 'interval' => 60*5, 'display' => __( 'Once Every 5 Minutes' ), 'wpfc' => false ); $schedules['everyfifteenminute'] = array( 'interval' => 60*15, 'display' => __( 'Once Every 15 Minutes' ), 'wpfc' => true ); $schedules['twiceanhour'] = array( 'interval' => 60*30, 'display' => __( 'Twice an Hour' ), 'wpfc' => true ); $schedules['onceanhour'] = array( 'interval' => 60*60, 'display' => __( 'Once an Hour' ), 'wpfc' => true ); $schedules['everytwohours'] = array( 'interval' => 60*60*2, 'display' => __( 'Once Every 2 Hours' ), 'wpfc' => true ); $schedules['everythreehours'] = array( 'interval' => 60*60*3, 'display' => __( 'Once Every 3 Hours' ), 'wpfc' => true ); $schedules['everyfourhours'] = array( 'interval' => 60*60*4, 'display' => __( 'Once Every 4 Hours' ), 'wpfc' => true ); $schedules['everyfivehours'] = array( 'interval' => 60*60*5, 'display' => __( 'Once Every 5 Hours' ), 'wpfc' => true ); $schedules['everysixhours'] = array( 'interval' => 60*60*6, 'display' => __( 'Once Every 6 Hours' ), 'wpfc' => true ); $schedules['everysevenhours'] = array( 'interval' => 60*60*7, 'display' => __( 'Once Every 7 Hours' ), 'wpfc' => true ); $schedules['everyeighthours'] = array( 'interval' => 60*60*8, 'display' => __( 'Once Every 8 Hours' ), 'wpfc' => true ); $schedules['everyninehours'] = array( 'interval' => 60*60*9, 'display' => __( 'Once Every 9 Hours' ), 'wpfc' => true ); $schedules['everytenhours'] = array( 'interval' => 60*60*10, 'display' => __( 'Once Every 10 Hours' ), 'wpfc' => true ); $schedules['onceaday'] = array( 'interval' => 60*60*24, 'display' => __( 'Once a Day' ), 'wpfc' => true ); $schedules['everythreedays'] = array( 'interval' => 60*60*24*3, 'display' => __( 'Once Every 3 Days' ), 'wpfc' => true ); $schedules['weekly'] = array( 'interval' => 60*60*24*7, 'display' => __( 'Once a Week' ), 'wpfc' => true ); $schedules['everytendays'] = array( 'interval' => 60*60*24*10, 'display' => __( 'Once Every 10 Days' ), 'wpfc' => true ); $schedules['montly'] = array( 'interval' => 60*60*24*30, 'display' => __( 'Once a Month' ), 'wpfc' => true ); $schedules['yearly'] = array( 'interval' => 60*60*24*30*12, 'display' => __( 'Once a Year' ), 'wpfc' => true ); return $schedules; } public function setCustomInterval(){ add_filter( 'cron_schedules', array($this, 'cron_add_minute')); } public function isPluginActive( $plugin ) { return in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) || $this->isPluginActiveForNetwork( $plugin ); } public function isPluginActiveForNetwork( $plugin ) { if ( !is_multisite() ) return false; $plugins = get_site_option( 'active_sitewide_plugins'); if ( isset($plugins[$plugin]) ) return true; return false; } public function current_url(){ if(defined('WP_CLI')){ $_SERVER["SERVER_NAME"] = isset($_SERVER["SERVER_NAME"]) ? $_SERVER["SERVER_NAME"] : ""; $_SERVER["SERVER_PORT"] = isset($_SERVER["SERVER_PORT"]) ? $_SERVER["SERVER_PORT"] : 80; } $pageURL = 'http'; if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){ $pageURL .= 's'; } $pageURL .= '://'; if($_SERVER['SERVER_PORT'] != '80'){ $pageURL .= $_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI']; }else{ $pageURL .= $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; } return $pageURL; } public function wpfc_load_plugin_textdomain(){ load_plugin_textdomain('wp-fastest-cache', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' ); } public function cdn_replace_urls($matches){ if(count($this->cdn) > 0){ foreach ($this->cdn as $key => $cdn) { if(preg_match("/manifest\.json\.php/i", $matches[0])){ return $matches[0]; } if(preg_match("/^\/\/random/", $cdn->cdnurl) || preg_match("/\/\/i\d\.wp\.com/", $cdn->cdnurl)){ if(preg_match("/^\/\/random/", $cdn->cdnurl)){ $cdnurl = "//i".rand(0,3).".wp.com/".str_replace("www.", "", $_SERVER["HTTP_HOST"]); $cdnurl = preg_replace("/\/\/i\d\.wp\.com/", "//i".rand(0,3).".wp.com", $cdnurl); }else{ $cdnurl = $cdn->cdnurl; } //to add www. if exists if(preg_match("/\/\/www\./", $matches[0])){ $cdnurl = preg_replace("/(\/\/i\d\.wp\.com\/)(www\.)?/", "$1www.", $cdnurl); } }else{ $cdnurl = $cdn->cdnurl; } $cdn->file_types = str_replace(",", "|", $cdn->file_types); if(!preg_match("/\.(".$cdn->file_types.")/i", $matches[0])){ continue; } if($cdn->keywords){ $cdn->keywords = str_replace(",", "|", $cdn->keywords); if(!preg_match("/".preg_quote($cdn->keywords, "/")."/i", $matches[0])){ continue; } } if(preg_match("/\{\"concatemoji\"\:\"[^\"]+\"\}/i", $matches[0])){ $matches[0] = preg_replace("/(http(s?)\:)?".preg_quote("\/\/", "/")."(www\.)?/i", "", $matches[0]); $matches[0] = preg_replace("/".preg_quote($cdn->originurl, "/")."/i", $cdnurl, $matches[0]); }else if(isset($matches[2]) && preg_match("/".preg_quote($cdn->originurl, "/")."/", $matches[2])){ $matches[0] = preg_replace("/(http(s?)\:)?\/\/(www\.)?".preg_quote($cdn->originurl, "/")."/i", $cdnurl, $matches[0]); }else if(isset($matches[2]) && preg_match("/^(\/?)(wp-includes|wp-content)/", $matches[2])){ $matches[0] = preg_replace("/(\/?)(wp-includes|wp-content)/i", $cdnurl."/"."$2", $matches[0]); }else if(preg_match("/[\"\']https?\:\\\\\/\\\\\/[^\"\']+[\"\']/i", $matches[0])){ if(preg_match("/^(logo|url|image)$/i", $matches[1])){ //If the url is called with "//", it causes an error on https://search.google.com/structured-data/testing-tool/u/0/ // // // }else{ // $matches[0] = preg_replace("/\\\\\//", "/", $matches[0]); if(preg_match("/".preg_quote($cdn->originurl, "/")."/", $matches[0])){ $matches[0] = preg_replace("/(http(s?)\:)?\/\/(www\.)?".preg_quote($cdn->originurl, "/")."/i", $cdnurl, $matches[0]); $matches[0] = preg_replace("/\//", "\/", $matches[0]); } } } } } return $matches[0]; } public function read_file($url){ if(!preg_match("/\.php/", $url)){ $url = preg_replace("/\?.*/", "", $url); $path = preg_replace("/.+\/wp-content\/(.+)/", WPFC_WP_CONTENT_DIR."/"."$1", $url); if(file_exists($path)){ $filesize = filesize($path); if($filesize > 0){ $myfile = fopen($path, "r") or die("Unable to open file!"); $data = fread($myfile, $filesize); fclose($myfile); return $data; }else{ return false; } } } return false; } public function get_operating_systems(){ $operating_systems = array( 'Android', 'blackberry|\bBB10\b|rim\stablet\sos', 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino', 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b', 'Windows\sCE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window\sMobile|Windows\sPhone\s[0-9.]+|WCE;', 'Windows\sPhone\s10.0|Windows\sPhone\s8.1|Windows\sPhone\s8.0|Windows\sPhone\sOS|XBLWP7|ZuneWP7|Windows\sNT\s6\.[23]\;\sARM\;', '\biPhone.*Mobile|\biPod|\biPad', 'Apple-iPhone7C2', 'MeeGo', 'Maemo', 'J2ME\/|\bMIDP\b|\bCLDC\b', // '|Java/' produces bug #135 'webOS|hpwOS', '\bBada\b', 'BREW' ); return $operating_systems; } public function get_mobile_browsers(){ $mobile_browsers = array( '\bCrMo\b|CriOS|Android.*Chrome\/[.0-9]*\s(Mobile)?', '\bDolfin\b', 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR\/[0-9.]+|Coast\/[0-9.]+', 'Skyfire', 'Mobile\sSafari\/[.0-9]*\sEdge', 'IEMobile|MSIEMobile', // |Trident/[.0-9]+ 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS', 'bolt', 'teashark', 'Blazer', 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari', 'Tizen', 'UC.*Browser|UCWEB', 'baiduboxapp', 'baidubrowser', 'DiigoBrowser', 'Puffin', '\bMercury\b', 'Obigo', 'NF-Browser', 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger', 'Android.*PaleMoon|Mobile.*PaleMoon' ); return $mobile_browsers; } } $GLOBALS["wp_fastest_cache"] = new WpFastestCache(); ?>