fix
This commit is contained in:
347
wp-content/plugins/wp-fastest-cache/inc/single-preload.php
Normal file
347
wp-content/plugins/wp-fastest-cache/inc/single-preload.php
Normal file
@@ -0,0 +1,347 @@
|
||||
<?php
|
||||
class SinglePreloadWPFC{
|
||||
public static $id = 0;
|
||||
public static $urls = array();
|
||||
|
||||
public static function init($id = false){
|
||||
if($id){
|
||||
self::set_id($id);
|
||||
}else if(isset($_GET["post"]) && $_GET["post"]){
|
||||
self::set_id($_GET["post"]);
|
||||
}
|
||||
|
||||
SinglePreloadWPFC::set_urls();
|
||||
SinglePreloadWPFC::set_urls_with_terms();
|
||||
}
|
||||
|
||||
public static function add_meta_box(){
|
||||
add_meta_box(
|
||||
'auto_cache_custom_meta_box', // this is HTML id
|
||||
'Auto Cache Settings',
|
||||
array("SinglePreloadWPFC", "auto_cache_custom_box_html"), // the callback function
|
||||
array('page', 'post', 'product'),
|
||||
'side',
|
||||
'high'
|
||||
);
|
||||
}
|
||||
|
||||
public static function auto_cache_custom_box_html(){
|
||||
$yes_selected = "";
|
||||
$no_selected = "";
|
||||
|
||||
if($data = get_option("WpFastestCache_autocache")){
|
||||
if($data == "yes"){
|
||||
$yes_selected = "selected";
|
||||
}else if($data == "no"){
|
||||
$no_selected = "selected";
|
||||
}
|
||||
}else{
|
||||
$no_selected = "selected";
|
||||
}
|
||||
|
||||
?>
|
||||
<p>
|
||||
<label>Enable:</label>
|
||||
<select data-type='auto-cache-enable'>
|
||||
<option <?php echo $yes_selected; ?> value="yes">Yes</option>
|
||||
<option <?php echo $no_selected; ?> value="no">No</option>
|
||||
</select>
|
||||
<span class="spinner" style="float: none;display: inline-block;margin:0;"></span>
|
||||
</p>
|
||||
|
||||
<p id="wpfc-single-preload-process" style="display: none;">
|
||||
<label>Status: <span id="wpfc-single-preload-status-runnig">Running</span><span id="wpfc-single-preload-status-completed" style="display: none; color: #33CD32; font-weight: bold;">Completed</span></label><br>
|
||||
<label>Total: <span id="wpfc-single-preload-total-number"><?php echo count(self::$urls); ?></span></label><br>
|
||||
<label>Cached: <span id="wpfc-single-preload-cached-number">0</span></label><br>
|
||||
<label>Errors: <span id="wpfc-single-preload-error-number">0</span></label>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
<p class="post-attributes-help-text">The cache will be created automatically after the contents are saved. <a href="https://www.wpfastestcache.com/features/automatic-cache/" target="_blank">More Info</a></p>
|
||||
|
||||
<script type="text/javascript">
|
||||
var Wpfc_Single_Preload_save_settings = function(){
|
||||
var enable_form = jQuery("#auto_cache_custom_meta_box select[data-type='auto-cache-enable']");
|
||||
|
||||
if(enable_form.length == 1){
|
||||
enable_form.change(function(){
|
||||
enable_form.attr("disabled", true);
|
||||
jQuery("#auto_cache_custom_meta_box span.spinner").css({"visibility" : "visible"});
|
||||
|
||||
jQuery.ajax({
|
||||
type: 'POST',
|
||||
url: ajaxurl,
|
||||
data: {"action": "wpfc_preload_single_save_settings", "is_enable": jQuery(this).val(), "nonce" : wpfc_nonce},
|
||||
dataType: "json",
|
||||
cache: false,
|
||||
success: function(data){
|
||||
enable_form.attr("disabled", false);
|
||||
jQuery("#auto_cache_custom_meta_box span.spinner").css({"visibility" : "hidden"});
|
||||
|
||||
console.log(data);
|
||||
},
|
||||
error: function(error){
|
||||
enable_form.attr("disabled", false);
|
||||
jQuery("#auto_cache_custom_meta_box span.spinner").css({"visibility" : "hidden"});
|
||||
|
||||
console.log(error.statusText);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Wpfc_Single_Preload_save_settings();
|
||||
|
||||
</script>
|
||||
|
||||
<?php
|
||||
// Add the HTML for the post meta
|
||||
}
|
||||
|
||||
public static function save_settings(){
|
||||
if(current_user_can('manage_options')){
|
||||
$res = array("success" => true);
|
||||
|
||||
if(get_option("WpFastestCache_autocache")){
|
||||
update_option("WpFastestCache_autocache", sanitize_text_field($_POST["is_enable"]));
|
||||
}else{
|
||||
add_option("WpFastestCache_autocache", sanitize_text_field($_POST["is_enable"]), null, "yes");
|
||||
}
|
||||
|
||||
wp_send_json($res);
|
||||
}
|
||||
|
||||
wp_die("Must be admin");
|
||||
}
|
||||
|
||||
public static function set_id($id) {
|
||||
$id = (int)$id;
|
||||
|
||||
if(get_post_status($id) === "publish"){
|
||||
self::$id = $id;
|
||||
}
|
||||
}
|
||||
|
||||
public static function create_cache_for_all_urls(){
|
||||
if(preg_match("/include\s*\(\s*[\'\"]\/themes\//i", wp_debug_backtrace_summary())){
|
||||
return array("success" => false, "error_message" => "You cannot call this function in any theme file");
|
||||
}
|
||||
|
||||
if(empty(self::$urls)){
|
||||
return false;
|
||||
}
|
||||
|
||||
$res_arr = array();
|
||||
|
||||
foreach (self::$urls as $url) {
|
||||
$res = $GLOBALS["wp_fastest_cache"]->wpfc_remote_get($url["url"], $url["user-agent"]);
|
||||
|
||||
array_push($res_arr, array("url" => $url["url"], "success" => $res));
|
||||
}
|
||||
|
||||
return $res_arr;
|
||||
}
|
||||
|
||||
public static function create_cache(){
|
||||
$res = $GLOBALS["wp_fastest_cache"]->wpfc_remote_get($_GET["url"], $_GET["user_agent"]);
|
||||
|
||||
if($res){
|
||||
die("true");
|
||||
}
|
||||
}
|
||||
|
||||
public static function is_mobile_active(){
|
||||
if(isset($GLOBALS["wp_fastest_cache_options"]->wpFastestCacheMobile) && isset($GLOBALS["wp_fastest_cache_options"]->wpFastestCacheMobileTheme)){
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static function set_term_urls($term_taxonomy_id){
|
||||
$term = get_term_by("term_taxonomy_id", $term_taxonomy_id);
|
||||
|
||||
if($term && !is_wp_error($term)){
|
||||
$url = get_term_link($term->term_id, $term->taxonomy);
|
||||
|
||||
array_push(static::$urls, array("url" => $url, "user-agent" => "WP Fastest Cache Preload Bot"));
|
||||
|
||||
if(self::is_mobile_active()){
|
||||
array_push(static::$urls, array("url" => $url, "user-agent" => "WP Fastest Cache Preload iPhone Mobile Bot"));
|
||||
}
|
||||
|
||||
if($term->parent > 0){
|
||||
$parent = get_term_by("id", $term->parent, $term->taxonomy);
|
||||
|
||||
static::set_term_urls($parent->term_taxonomy_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function set_urls_with_terms(){
|
||||
global $wpdb;
|
||||
$terms = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."term_relationships` WHERE `object_id`=".static::$id, ARRAY_A);
|
||||
|
||||
foreach ($terms as $term_key => $term_val){
|
||||
static::set_term_urls($term_val["term_taxonomy_id"]);
|
||||
}
|
||||
}
|
||||
|
||||
public static function set_urls(){
|
||||
if(static::$id){
|
||||
$permalink = get_permalink(static::$id);
|
||||
|
||||
array_push(static::$urls, array("url" => $permalink, "user-agent" => "WP Fastest Cache Preload Bot"));
|
||||
|
||||
if(self::is_mobile_active()){
|
||||
array_push(static::$urls, array("url" => $permalink, "user-agent" => "WP Fastest Cache Preload iPhone Mobile Bot"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function put_inline_js(){
|
||||
if($data = get_option("WpFastestCache_autocache")){
|
||||
if($data == "no"){
|
||||
return false;
|
||||
}
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
var WpfcSinglePreload = {
|
||||
error_message: "",
|
||||
init: function(){
|
||||
jQuery("#wpfc-single-preload-process").show("slow")
|
||||
},
|
||||
change_status: function(){
|
||||
var error_number = jQuery("#wpfc-single-preload-error-number").text();
|
||||
var cached_number = jQuery("#wpfc-single-preload-cached-number").text();
|
||||
var total_number = jQuery("#wpfc-single-preload-total-number").text();
|
||||
|
||||
error_number = parseInt(error_number);
|
||||
cached_number = parseInt(cached_number);
|
||||
total_number = parseInt(total_number);
|
||||
|
||||
if(total_number == (cached_number + error_number)){
|
||||
jQuery("#wpfc-single-preload-status-completed").show();
|
||||
jQuery("#wpfc-single-preload-status-runnig").hide();
|
||||
}
|
||||
},
|
||||
increase_error: function(){
|
||||
var number = jQuery("#wpfc-single-preload-error-number").text();
|
||||
number = parseInt(number) + 1;
|
||||
|
||||
jQuery("#wpfc-single-preload-error-number").text(number);
|
||||
|
||||
WpfcSinglePreload.change_status();
|
||||
},
|
||||
increase_cached: function(){
|
||||
var number = jQuery("#wpfc-single-preload-cached-number").text();
|
||||
number = parseInt(number) + 1;
|
||||
|
||||
jQuery("#wpfc-single-preload-cached-number").text(number);
|
||||
|
||||
WpfcSinglePreload.change_status();
|
||||
},
|
||||
running_animation: function(){
|
||||
let label = jQuery("#wpfc-single-preload-status-runnig");
|
||||
let text = label.text();
|
||||
let dot = 0;
|
||||
|
||||
label.text(text + ".");
|
||||
|
||||
self.interval = setInterval(function(){
|
||||
text = label.text();
|
||||
dot = text.match(/\./g);
|
||||
|
||||
if(dot){
|
||||
if(dot.length < 3){
|
||||
label.text(text + ".");
|
||||
}else{
|
||||
label.text(text.replace(/\.+$/, ""));
|
||||
}
|
||||
}else{
|
||||
label.text(text + ".");
|
||||
}
|
||||
}, 300);
|
||||
},
|
||||
create_cache: function(list){
|
||||
var action = function(url, user_agent, list){
|
||||
var self = this;
|
||||
jQuery("#wpfc-single-preload").show();
|
||||
|
||||
jQuery.ajax({
|
||||
type: 'GET',
|
||||
url: ajaxurl,
|
||||
data: {"action": "wpfc_preload_single", "url": url, "user_agent": user_agent, "nonce" : wpfc_nonce},
|
||||
dataType: "html",
|
||||
timeout: 10000,
|
||||
cache: false,
|
||||
success: function(data){
|
||||
if(data == "true"){
|
||||
WpfcSinglePreload.increase_cached();
|
||||
}else{
|
||||
self.error_message = data;
|
||||
WpfcSinglePreload.increase_error();
|
||||
}
|
||||
|
||||
if(typeof list == "object"){
|
||||
WpfcSinglePreload.create_cache(list);
|
||||
}
|
||||
},
|
||||
error: function(error){
|
||||
self.error_message = error.statusText;
|
||||
WpfcSinglePreload.increase_error();
|
||||
|
||||
if(typeof list == "object"){
|
||||
WpfcSinglePreload.create_cache(list);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
let number_to_used = 3;
|
||||
let sliced = list.slice(0, number_to_used);
|
||||
|
||||
list.splice(0, number_to_used);
|
||||
|
||||
jQuery.each(sliced, function( index, value ) {
|
||||
console.log( value["url"] );
|
||||
|
||||
if(index == (number_to_used-1)){
|
||||
setTimeout(function(){
|
||||
action(value["url"], value["user-agent"], list);
|
||||
}, 500);
|
||||
}else{
|
||||
setTimeout(function(){
|
||||
action(value["url"], value["user-agent"], false);
|
||||
}, 500);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
jQuery(document).ready(function(){
|
||||
if(!jQuery("#auto_cache_custom_meta_box").is(":visible")){
|
||||
return;
|
||||
}
|
||||
|
||||
if(jQuery("#message").find("a").attr("href")){
|
||||
WpfcSinglePreload.init();
|
||||
WpfcSinglePreload.running_animation();
|
||||
WpfcSinglePreload.create_cache(<?php echo json_encode(self::$urls); ?>);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user