You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
347 lines
11 KiB
347 lines
11 KiB
<?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
|
|
}
|
|
}
|
|
?>
|