1619 lines
69 KiB
PHP
1619 lines
69 KiB
PHP
<?php
|
|
|
|
if (!defined('WPVIVID_PLUGIN_DIR'))
|
|
{
|
|
die;
|
|
}
|
|
|
|
class WPvivid_Snapshot_Ex
|
|
{
|
|
public $options;
|
|
public $main_tab;
|
|
|
|
public function __construct()
|
|
{
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/snapshot/class-wpvivid-snapshot-function.php';
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/snapshot/class-wpvivid-snapshot-options.php';
|
|
if(is_admin())
|
|
{
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/snapshot/class-wpvivid-snapshots-list.php';
|
|
|
|
add_filter('wpvivid_get_dashboard_menu', array($this, 'get_dashboard_menu'), 20, 2);
|
|
add_filter('wpvivid_get_dashboard_screens', array($this, 'get_dashboard_screens'), 20);
|
|
|
|
add_filter('wpvivid_snapshot_get_main_admin_menus',array($this,'get_main_admin_menus'),9999);
|
|
|
|
$this->options=new WPvivid_Snapshot_Option_Ex();
|
|
|
|
/*
|
|
if (is_multisite())
|
|
{
|
|
add_action('network_admin_menu',array( $this,'add_admin_menu'));
|
|
}
|
|
else
|
|
{
|
|
add_action('admin_menu',array( $this,'add_admin_menu'));
|
|
}
|
|
add_filter('wpvivid_snapshot_get_screen_ids', array($this,'get_screen_ids'), 9999);
|
|
*/
|
|
|
|
add_filter('wpvivid_get_admin_menus',array($this,'get_admin_menus'),22);
|
|
add_filter('wpvivid_get_screen_ids',array($this,'get_screen_ids'),12);
|
|
|
|
add_action('admin_enqueue_scripts', array($this, 'enqueue_styles'), 11);
|
|
add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts'), 11);
|
|
|
|
|
|
add_action('wp_ajax_wpvivid_create_snapshot',array( $this,'create_snapshot'));
|
|
add_action('wp_ajax_wpvivid_get_snapshot_progress',array( $this,'get_snapshot_progress'));
|
|
//
|
|
add_action('wp_ajax_wpvivid_resume_create_snapshot',array( $this,'resume_create_snapshot'));
|
|
add_action('wp_ajax_wpvivid_restore_snapshot',array( $this,'restore_snapshot'));
|
|
add_action('wp_ajax_wpvivid_get_restore_snapshot_status',array( $this,'get_restore_snapshot_status'));
|
|
add_action('wp_ajax_wpvivid_delete_snapshot',array( $this,'delete_snapshot'));
|
|
|
|
add_filter('wpvivid_check_create_snapshot',array($this,'check_create_snapshot'));
|
|
add_action('wpvivid_create_snapshot',array($this,'create_snapshot_ex'),10,1);
|
|
|
|
add_action('wp_ajax_wpvivid_set_snapshot_setting',array( $this,'set_setting'));
|
|
//
|
|
add_action('wpvivid_snapshot_add_sidebar',array( $this,'add_sidebar'));
|
|
add_action('wpvivid_snapshot_add_sidebar_free', array( $this, 'add_sidebar_free' ));
|
|
|
|
$snapshot_setting=$this->options->get_option('wpvivid_snapshot_setting');
|
|
|
|
$quick_snapshot=isset($snapshot_setting['quick_snapshot'])?$snapshot_setting['quick_snapshot']:false;
|
|
|
|
if($quick_snapshot)
|
|
{
|
|
add_action('admin_bar_menu',array( $this,'add_toolbar_items'),100);
|
|
add_action('admin_footer',array( $this,'quick_snapshot'));
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public function get_admin_menus($submenus)
|
|
{
|
|
$submenu['parent_slug']=apply_filters('wpvivid_white_label_slug', WPVIVID_PLUGIN_SLUG);
|
|
$submenu['page_title']= apply_filters('wpvivid_white_label_display', 'WPvivid Backup');
|
|
$submenu['menu_title']=__('Database Snapshots', 'wpvivid-backuprestore');
|
|
$submenu['capability']='administrator';
|
|
$submenu['menu_slug']=strtolower(sprintf('%s-snapshot-ex', apply_filters('wpvivid_white_label_slug', 'wpvivid')));
|
|
$submenu['index']=2;
|
|
$submenu['function']=array($this, 'init_page');
|
|
$submenus[$submenu['menu_slug']]=$submenu;
|
|
return $submenus;
|
|
}
|
|
|
|
public function get_screen_ids($screen_ids)
|
|
{
|
|
$screen_ids[]=apply_filters('wpvivid_white_label_screen_id', 'wpvivid-backup_page_wpvivid-snapshot-ex');
|
|
return $screen_ids;
|
|
}
|
|
|
|
public function add_toolbar_items($wp_admin_bar)
|
|
{
|
|
$wp_admin_bar->add_menu(array(
|
|
'id' => 'wpvivid_snapshot_admin_menu',
|
|
'title' => '<span class="dashicons-camera-alt ab-icon"></span>'.'Quick Snapshot',
|
|
'meta' =>array(
|
|
'class' => 'wpvivid-quick-create-snapshot',
|
|
)
|
|
));
|
|
}
|
|
|
|
public function add_admin_menu()
|
|
{
|
|
$page_title=apply_filters('wpvivid_white_label_display', 'WPvivid Snapshot');
|
|
$menu_title=apply_filters('wpvivid_white_label_display', 'WPvivid Snapshot');
|
|
|
|
$capability = 'administrator';
|
|
|
|
$menu_slug ='wpvivid-snapshot';
|
|
|
|
$function=array($this, 'init_page');
|
|
$icon_url='dashicons-camera-alt';
|
|
$position=100;
|
|
|
|
$menu['page_title']= $page_title;
|
|
$menu['menu_title']= $menu_title;
|
|
$menu['capability']='administrator';
|
|
$menu['menu_slug']=$menu_slug;
|
|
$menu['function']=array($this, 'init_page');
|
|
$menu['icon_url']=$icon_url;
|
|
$menu['position']=100;
|
|
|
|
$menu=apply_filters('wpvivid_snapshot_get_main_admin_menus', $menu);
|
|
|
|
if($menu!=false)
|
|
add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position);
|
|
}
|
|
|
|
public function get_dashboard_menu($submenus,$parent_slug)
|
|
{
|
|
$display = apply_filters('wpvivid_get_menu_capability_addon', 'menu_database_snapshot');
|
|
if($display)
|
|
{
|
|
$submenu['menu_slug'] = strtolower(sprintf('%s-snapshot', apply_filters('wpvivid_white_label_slug', 'wpvivid')));
|
|
if(isset($submenus[$submenu['menu_slug']]))
|
|
{
|
|
unset($submenus[$submenu['menu_slug']]);
|
|
}
|
|
$submenu['parent_slug'] = $parent_slug;
|
|
$submenu['page_title'] = apply_filters('wpvivid_white_label_display', 'Database Snapshots');
|
|
$submenu['menu_title'] = 'Database Snapshots';
|
|
$submenu['capability'] = 'administrator';
|
|
$submenu['index'] = 11;//10;
|
|
$submenu['function'] = array($this, 'init_page_pro');
|
|
$submenus[$submenu['menu_slug']] = $submenu;
|
|
}
|
|
|
|
return $submenus;
|
|
}
|
|
|
|
public function get_dashboard_screens($screens)
|
|
{
|
|
$screen['menu_slug']='wpvivid-snapshot';
|
|
$screen['screen_id']='wpvivid-plugin_page_wpvivid-snapshot';
|
|
$screen['is_top']=false;
|
|
$screens[]=$screen;
|
|
return $screens;
|
|
}
|
|
|
|
public function get_main_admin_menus($menu)
|
|
{
|
|
if(class_exists('WPvivid_backup_pro'))
|
|
return false;
|
|
else
|
|
return $menu;
|
|
}
|
|
|
|
/*
|
|
public function get_screen_ids($screen_ids)
|
|
{
|
|
$screen_ids=array();
|
|
$screen['menu_slug']='wpvivid-snapshot';
|
|
$screen['screen_id']='toplevel_page_wpvivid-snapshot';
|
|
$screen['is_top']=true;
|
|
$screens[]=$screen;
|
|
|
|
foreach ($screens as $screen)
|
|
{
|
|
$screen_ids[]=$screen['screen_id'];
|
|
if(is_multisite())
|
|
{
|
|
if(substr($screen['screen_id'],-8)=='-network')
|
|
continue;
|
|
$screen_ids[]=$screen['screen_id'].'-network';
|
|
}
|
|
else
|
|
{
|
|
$screen_ids[]=$screen['screen_id'];
|
|
}
|
|
}
|
|
return $screen_ids;
|
|
}
|
|
*/
|
|
|
|
public function enqueue_styles()
|
|
{
|
|
$screen_ids=array();
|
|
$screen_ids=apply_filters('wpvivid_get_screen_ids',$screen_ids);
|
|
if(in_array(get_current_screen()->id,$screen_ids))
|
|
{
|
|
wp_enqueue_style('wpvivid_snapshot_ex', WPVIVID_PLUGIN_DIR_URL . 'css/wpvivid-snapshot-style.css', array(), WPVIVID_PLUGIN_VERSION, 'all');
|
|
}
|
|
}
|
|
|
|
public function enqueue_scripts()
|
|
{
|
|
|
|
$snapshot_setting=$this->options->get_option('wpvivid_snapshot_setting');
|
|
|
|
$quick_snapshot=isset($snapshot_setting['quick_snapshot'])?$snapshot_setting['quick_snapshot']:false;
|
|
|
|
if($quick_snapshot)
|
|
{
|
|
wp_enqueue_style('wpvivid_quick_snapshot_ex', WPVIVID_PLUGIN_DIR_URL . 'css/wpvivid-quick-snapshot-style.css', array(), WPVIVID_PLUGIN_VERSION, 'all');
|
|
wp_enqueue_style ( 'wp-jquery-ui-dialog');
|
|
wp_enqueue_script( 'jquery-ui-dialog' );
|
|
wp_enqueue_script ( 'wpvivid_qucick_snapshot_ex_js' , // handle
|
|
WPVIVID_PLUGIN_DIR_URL . 'js/wpvivid-quick-snapshot.js' , // source
|
|
array('jquery-ui-dialog'),
|
|
WPVIVID_PLUGIN_VERSION, false
|
|
);
|
|
wp_localize_script('wpvivid_qucick_snapshot_ex_js', 'wpvivid_quick_snapshot_ajax_object', array('ajax_url' => admin_url('admin-ajax.php'),'ajax_nonce'=>wp_create_nonce('wpvivid_ajax')));
|
|
}
|
|
}
|
|
|
|
public function added_quick_snapshot($added)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public function quick_snapshot()
|
|
{
|
|
if(apply_filters('wpvivid_added_quick_snapshot',false))
|
|
{
|
|
return;
|
|
}
|
|
add_filter('wpvivid_added_quick_snapshot',array( $this,'added_quick_snapshot'));
|
|
|
|
$current_url = $_SERVER['REQUEST_URI'];
|
|
if (preg_match('/post.php?/', $current_url))
|
|
{
|
|
return;
|
|
}
|
|
?>
|
|
<div id="wpvivid_quick_snapshot_dialog">
|
|
<span id="wpvivid_quick_snapshot_close" class="dashicons dashicons-no" style="float:right;cursor: pointer"></span>
|
|
<div id="wpvivid_quick_snapshot_message_box" style="padding:20px 0;">
|
|
<p style="text-align:center;font-size:24px;">
|
|
<span id="wpvivid_quick_snapshot_message">Are you sure you want to create a snapshot now?</span>
|
|
<span id="wpvivid_quick_snapshot_loading"><img src="<?php echo esc_url(admin_url()).'/images/loading.gif'; ?>"></span>
|
|
</p>
|
|
<p style="text-align:center;" id="wpvivid_quick_create_snapshot_comment_box">
|
|
<span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-green" style="margin-top:0.2em;"></span>
|
|
<span><strong>Comment the snapshot</strong>(optional): </span>
|
|
<input id="wpvivid_quick_create_snapshot_comment" type="text" placeholder="e.g. mysnapshot">
|
|
</p>
|
|
</div>
|
|
<div id="wpvivid_quick_snapshot_progress" style="display: none">
|
|
<p>
|
|
<span class="wpvivid-span-progress">
|
|
<span class="wpvivid-span-processed-progress">0% completed</span>
|
|
</span>
|
|
</p>
|
|
<p><span>Action: </span><span></span><span></span></p>
|
|
</div>
|
|
<div style="padding:0 0 10px 0">
|
|
<p style="text-align:center;">
|
|
<input class="button-primary" style="width: 150px; height: 40px; font-size: 16px; margin-bottom: 10px; pointer-events: auto; opacity: 1;" id="wpvivid_quick_create_snapshot" type="submit" value="Create Now">
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
var b_quick_end_create_progress=false;
|
|
var b_quick_need_update=false;
|
|
jQuery('.wpvivid-quick-create-snapshot').click(function()
|
|
{
|
|
jQuery("#wpvivid_quick_snapshot_message_box").show();
|
|
//
|
|
jQuery("#wpvivid_quick_snapshot_loading").hide();
|
|
jQuery("#wpvivid_quick_create_snapshot_comment_box").show();
|
|
jQuery("#wpvivid_quick_snapshot_progress").hide();
|
|
//
|
|
jQuery("#wpvivid_quick_snapshot_message").html("Are you sure you want to create a snapshot now?");
|
|
jQuery("#wpvivid_quick_snapshot_dialog").dialog("widget").find(".ui-dialog-titlebar").hide();
|
|
jQuery("#wpvivid_quick_snapshot_dialog").dialog("open");
|
|
|
|
return false;
|
|
});
|
|
|
|
//wpvivid_quick_snapshot_close
|
|
jQuery('#wpvivid_quick_snapshot_close').click(function()
|
|
{
|
|
jQuery("#wpvivid_quick_snapshot_dialog").dialog('close');
|
|
});
|
|
|
|
jQuery('#wpvivid_quick_create_snapshot').click(function()
|
|
{
|
|
wpvivid_quick_create_snapshot();
|
|
});
|
|
|
|
function wpvivid_quick_simulate_create_progress()
|
|
{
|
|
var MaxProgess = 30,
|
|
currentProgess = 0,
|
|
steps = 1,
|
|
time_steps=1000;
|
|
|
|
var timer = setInterval(function ()
|
|
{
|
|
if(currentProgess>100)
|
|
{
|
|
currentProgess=100;
|
|
}
|
|
else
|
|
{
|
|
currentProgess += steps;
|
|
}
|
|
|
|
if(b_quick_end_create_progress)
|
|
{
|
|
clearInterval(timer);
|
|
return;
|
|
}
|
|
var progress_html='<p><span class="wpvivid-span-progress">' +
|
|
'<span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width: '+currentProgess+'%">' +
|
|
currentProgess+'% completed</span></span></p><p>' +
|
|
'<span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span>' +
|
|
'<span>Creating the snapshot.</span></p>';
|
|
|
|
jQuery("#wpvivid_quick_snapshot_progress").html(progress_html);
|
|
if (currentProgess >= MaxProgess)
|
|
{
|
|
clearInterval(timer);
|
|
}
|
|
}, time_steps);
|
|
}
|
|
|
|
function wpvivid_quick_create_snapshot()
|
|
{
|
|
var comment=jQuery('#wpvivid_quick_create_snapshot_comment').val();
|
|
var ajax_data= {
|
|
'action': 'wpvivid_create_snapshot',
|
|
'comment':comment,
|
|
};
|
|
var default_progress='<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width: 0%">0% completed</span></span></p><p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>Creating a snapshot.</span></p>';
|
|
jQuery('#wpvivid_quick_snapshot_progress').show();
|
|
jQuery('#wpvivid_quick_snapshot_progress').html(default_progress);
|
|
jQuery("#wpvivid_quick_snapshot_loading").show();
|
|
jQuery("#wpvivid_quick_create_snapshot_comment_box").hide();
|
|
jQuery("#wpvivid_quick_snapshot_message").html("Creating the snapshot...");
|
|
b_quick_need_update=true;
|
|
b_quick_end_create_progress=false;
|
|
wpvivid_quick_simulate_create_progress();
|
|
|
|
setTimeout(function(){
|
|
wpvivid_quick_get_snapshot_progress();
|
|
}, 3000);
|
|
|
|
jQuery('#wpvivid_quick_create_snapshot').css({'pointer-events': 'none', 'opacity': '0.4'});
|
|
wpvivid_post_request_quick(ajax_data, function(data)
|
|
{
|
|
b_quick_end_create_progress=true;
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
if (jsonarray.result === 'success')
|
|
{
|
|
jQuery('#wpvivid_quick_snapshot_progress').html(jsonarray.progress);
|
|
if(jsonarray.finished==1)
|
|
{
|
|
jQuery("#wpvivid_quick_snapshot_dialog").dialog('close');
|
|
b_quick_need_update=false;
|
|
jQuery('#wpvivid_quick_snapshot_progress').hide();
|
|
jQuery('#wpvivid_quick_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
|
|
jQuery("#wpvivid_quick_snapshot_loading").hide();
|
|
jQuery("#wpvivid_quick_create_snapshot_comment_box").show();
|
|
jQuery("#wpvivid_quick_snapshot_message").html("Are you sure you want to create a snapshot now?");
|
|
|
|
alert("Creating a snapshot completed successfully.");
|
|
}
|
|
else
|
|
{
|
|
wpvivid_quick_resume_create_snapshot();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
alert(jsonarray.error);
|
|
b_quick_need_update=false;
|
|
jQuery('#wpvivid_quick_snapshot_progress').hide();
|
|
jQuery('#wpvivid_quick_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
|
|
jQuery("#wpvivid_quick_snapshot_loading").hide();
|
|
jQuery("#wpvivid_quick_create_snapshot_comment_box").show();
|
|
jQuery("#wpvivid_quick_snapshot_message").html("Are you sure you want to create a snapshot now?");
|
|
}
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_quick_resume_create_snapshot(0);
|
|
}, 15000);
|
|
});
|
|
}
|
|
|
|
function wpvivid_quick_get_snapshot_progress()
|
|
{
|
|
var ajax_data= {
|
|
'action': 'wpvivid_get_snapshot_progress',
|
|
};
|
|
|
|
wpvivid_post_request_quick(ajax_data, function(data)
|
|
{
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
b_quick_end_create_progress=true;
|
|
jQuery('#wpvivid_quick_snapshot_progress').html(jsonarray.progress);
|
|
|
|
if(b_quick_need_update)
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_quick_get_snapshot_progress();
|
|
}, 1000);
|
|
}
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
if(b_quick_need_update)
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_quick_get_snapshot_progress();
|
|
}, 1000);
|
|
}
|
|
});
|
|
}
|
|
|
|
function wpvivid_quick_resume_create_snapshot(resume)
|
|
{
|
|
if(resume>6)
|
|
{
|
|
alert('Creating the snapshot timed out.');
|
|
b_quick_need_update=false;
|
|
jQuery("#wpvivid_quick_snapshot_message_box").show();
|
|
jQuery('#wpvivid_quick_snapshot_progress').hide();
|
|
jQuery('#wpvivid_quick_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
|
|
jQuery("#wpvivid_quick_snapshot_loading").hide();
|
|
jQuery("#wpvivid_quick_create_snapshot_comment_box").show();
|
|
jQuery("#wpvivid_quick_snapshot_message").html("Are you sure you want to create a snapshot now?");
|
|
return;
|
|
}
|
|
var ajax_data= {
|
|
'action': 'wpvivid_resume_create_snapshot'
|
|
};
|
|
|
|
wpvivid_post_request_quick(ajax_data, function(data)
|
|
{
|
|
try {
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
if (jsonarray.result === 'success')
|
|
{
|
|
jQuery('#wpvivid_quick_snapshot_progress').html(jsonarray.progress);
|
|
|
|
if(jsonarray.finished==1)
|
|
{
|
|
b_quick_need_update=false;
|
|
jQuery("#wpvivid_quick_snapshot_dialog").dialog('close');
|
|
|
|
jQuery("#wpvivid_quick_snapshot_message_box").show();
|
|
jQuery('#wpvivid_quick_snapshot_progress').hide();
|
|
jQuery('#wpvivid_quick_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
|
|
jQuery("#wpvivid_quick_snapshot_loading").hide();
|
|
jQuery("#wpvivid_quick_create_snapshot_comment_box").show();
|
|
jQuery("#wpvivid_quick_snapshot_message").html("Are you sure you want to create a snapshot now?");
|
|
alert("Creating a snapshot completed successfully.");
|
|
}
|
|
else
|
|
{
|
|
wpvivid_quick_resume_create_snapshot();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
b_quick_need_update=false;
|
|
jQuery("#wpvivid_quick_snapshot_message_box").show();
|
|
alert(jsonarray.error);
|
|
jQuery('#wpvivid_quick_snapshot_progress').hide();
|
|
jQuery('#wpvivid_quick_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
|
|
jQuery("#wpvivid_quick_snapshot_loading").hide();
|
|
jQuery("#wpvivid_quick_create_snapshot_comment_box").show();
|
|
jQuery("#wpvivid_quick_snapshot_message").html("Are you sure you want to create a snapshot now?");
|
|
}
|
|
}
|
|
catch (e)
|
|
{
|
|
resume+=1;
|
|
setTimeout(function(){
|
|
wpvivid_quick_resume_create_snapshot(resume);
|
|
}, 15000);
|
|
}
|
|
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
resume+=1;
|
|
setTimeout(function(){
|
|
wpvivid_quick_resume_create_snapshot(resume);
|
|
}, 15000);
|
|
});
|
|
}
|
|
|
|
jQuery(document).ready(function ()
|
|
{
|
|
jQuery(function($)
|
|
{
|
|
jQuery("#wpvivid_quick_snapshot_dialog").dialog({
|
|
'dialogClass' : 'noTitleStuff',
|
|
'modal' : true,
|
|
'autoOpen' : false,
|
|
'closeOnEscape' : true,
|
|
'width': '600px',
|
|
'minWidth' : "260px"
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
public function init_page()
|
|
{
|
|
$this->options->check_tables();
|
|
?>
|
|
<div class="wrap" style="max-width:1720px;">
|
|
<h1><?php echo esc_html( apply_filters('wpvivid_white_label_display', 'WPvivid').' Plugins - Snapshots'); ?></h1>
|
|
|
|
<?php
|
|
if(!class_exists('WPvivid_Tab_Page_Container'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/class-wpvivid-tab-page-container.php';
|
|
|
|
$args['is_parent_tab']=1;
|
|
$this->main_tab=new WPvivid_Tab_Page_Container();
|
|
$this->main_tab->add_tab('Snapshots','snapshots',array($this, 'output_snapshots'), $args);
|
|
$this->main_tab->add_tab('Setting','snapshots_setting',array($this, 'output_snapshots_setting'), $args);
|
|
$this->main_tab->display();
|
|
?>
|
|
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
public function init_page_pro()
|
|
{
|
|
$this->options->check_tables();
|
|
?>
|
|
<div class="wrap wpvivid-canvas">
|
|
<div class="icon32"></div>
|
|
<div id="wpvivid_backup_notice"></div>
|
|
<div id="poststuff">
|
|
<div id="post-body" class="metabox-holder columns-2">
|
|
<div id="post-body-content">
|
|
<div class="meta-box-sortables ui-sortable">
|
|
<div class="wpvivid-backup">
|
|
<?php $this->welcome_bar();?>
|
|
|
|
<?php do_action('wpvivid_v2_notice'); ?>
|
|
|
|
<div class="wpvivid-canvas wpvivid-clear-float">
|
|
<!--- backup progress --->
|
|
<?php
|
|
|
|
if(!class_exists('WPvivid_Tab_Page_Container_Ex'))
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/snapshot/class-wpvivid-tab-page-container-ex.php';
|
|
$this->main_tab=new WPvivid_Tab_Page_Container_Ex();
|
|
|
|
$args['is_parent_tab']=0;
|
|
$args['div_style']='padding-top:0;display:block;';
|
|
$args['span_class']='dashicons dashicons-camera';
|
|
$args['span_style']='color:#007cba; padding-right:0.5em;margin-top:0.2em;';
|
|
//
|
|
$tabs['merge']['title']='Snapshots';
|
|
$tabs['merge']['slug']='snapshots';
|
|
$tabs['merge']['callback']=array($this, 'output_snapshots');
|
|
$tabs['merge']['args']=$args;
|
|
|
|
$args['div_style']='padding-top:0;';
|
|
$args['span_class']='dashicons dashicons-admin-generic';
|
|
$args['span_style']='color:grey;padding-right:0.5em;margin-top:0.1em;';
|
|
$tabs['snapshot']['title']='Setting';
|
|
$tabs['snapshot']['slug']='snapshots_setting';
|
|
$tabs['snapshot']['callback']=array($this, 'output_snapshots_setting');
|
|
$tabs['snapshot']['args']=$args;
|
|
|
|
foreach ($tabs as $key=>$tab)
|
|
{
|
|
$this->main_tab->add_tab($tab['title'],$tab['slug'],$tab['callback'], $tab['args']);
|
|
}
|
|
|
|
$this->main_tab->display();
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
do_action( 'wpvivid_snapshot_add_sidebar');
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
public function welcome_bar()
|
|
{
|
|
?>
|
|
<div class="wpvivid-welcome-bar wpvivid-clear-float">
|
|
<div class="wpvivid-welcome-bar-left">
|
|
<p><span class="dashicons dashicons-camera-alt wpvivid-dashicons-large wpvivid-dashicons-green"></span><span class="wpvivid-page-title">Database Snapshots</span></p>
|
|
<p><span class="about-description">Create snapshots of the website database and restore the database from a snapshot.</span></p>
|
|
</div>
|
|
<div class="wpvivid-welcome-bar-right">
|
|
<p></p>
|
|
<div style="float:right;">
|
|
<span>Local Time:</span>
|
|
<span>
|
|
<a href="<?php echo esc_attr(apply_filters('wpvivid_get_admin_url', '').'options-general.php'); ?>">
|
|
<?php
|
|
$offset=get_option('gmt_offset');
|
|
echo esc_html(gmdate("l, F-d-Y H:i",time()+$offset*60*60));
|
|
?>
|
|
</a>
|
|
</span>
|
|
<span class="dashicons dashicons-editor-help wpvivid-dashicons-editor-help wpvivid-tooltip">
|
|
<div class="wpvivid-left">
|
|
<p>Clicking the date and time will redirect you to the WordPress General Settings page where you can change your timezone settings.</p>
|
|
<i></i> <!-- do not delete this line -->
|
|
</div>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
public function output_snapshots()
|
|
{
|
|
$snapshot=new WPvivid_Snapshot_Function_Ex();
|
|
$snapshot_data=$snapshot->get_snapshots();
|
|
|
|
?>
|
|
<div class="postbox quicksnapshot">
|
|
<div id="wpvivid_snapshot_progress" style="display: none">
|
|
<p>
|
|
<span class="wpvivid-span-progress">
|
|
<span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress">0% completed</span>
|
|
</span>
|
|
</p>
|
|
<p><span>Action: </span><span></span><span class="wpvivid-animate-flicker"></span></p>
|
|
</div>
|
|
<div>
|
|
<input class="button-primary" style="width: 200px; height: 50px; font-size: 20px; margin-bottom: 10px; pointer-events: auto; opacity: 1;" id="wpvivid_create_snapshot" type="submit" value="Create a snapshot">
|
|
</div>
|
|
<div>
|
|
<p>
|
|
<span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-green" style="margin-top:0.2em;"></span>
|
|
<span><strong>Comment the snapshot</strong>(optional): </span>
|
|
<input id="wpvivid_create_snapshot_comment" type="text" placeholder="e.g. mysnapshot">
|
|
</p>
|
|
</div>
|
|
|
|
<div id="wpvivid_snapshots_list">
|
|
<?php
|
|
$Snapshots_list = new WPvivid_Snapshots_List_Ex();
|
|
$Snapshots_list->set_list($snapshot_data);
|
|
$Snapshots_list->prepare_items();
|
|
$Snapshots_list->display();
|
|
?>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
var b_need_update=false;
|
|
var b_restore_finished=false;
|
|
var b_end_create_progress=false;
|
|
jQuery('#wpvivid_create_snapshot').click(function()
|
|
{
|
|
wpvivid_create_snapshot();
|
|
});
|
|
|
|
function wpvivid_simulate_restore_progress()
|
|
{
|
|
var MaxProgess = 95,
|
|
currentProgess = 0,
|
|
steps = 1,
|
|
time_steps=1000;
|
|
|
|
var timer = setInterval(function ()
|
|
{
|
|
if(b_restore_finished)
|
|
{
|
|
currentProgess=100;
|
|
}
|
|
else
|
|
{
|
|
currentProgess += steps;
|
|
}
|
|
|
|
|
|
var progress_html='<p><span class="wpvivid-span-progress">' +
|
|
'<span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width: '+currentProgess+'%">' +
|
|
currentProgess+'% completed</span></span></p><p>' +
|
|
'<span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span>' +
|
|
'<span>Restoring the snapshot.</span></p>';
|
|
|
|
jQuery("#wpvivid_snapshot_progress").html(progress_html);
|
|
if (currentProgess >= MaxProgess)
|
|
{
|
|
clearInterval(timer);
|
|
}
|
|
}, time_steps);
|
|
}
|
|
|
|
function wpvivid_simulate_create_progress()
|
|
{
|
|
var MaxProgess = 30,
|
|
currentProgess = 0,
|
|
steps = 1,
|
|
time_steps=1000;
|
|
|
|
var timer = setInterval(function ()
|
|
{
|
|
if(currentProgess>100)
|
|
{
|
|
currentProgess=100;
|
|
}
|
|
else
|
|
{
|
|
currentProgess += steps;
|
|
}
|
|
|
|
if(b_end_create_progress)
|
|
{
|
|
clearInterval(timer);
|
|
return;
|
|
}
|
|
var progress_html='<p><span class="wpvivid-span-progress">' +
|
|
'<span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width: '+currentProgess+'%">' +
|
|
currentProgess+'% completed</span></span></p><p>' +
|
|
'<span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span>' +
|
|
'<span>Creating the snapshot.</span></p>';
|
|
|
|
jQuery("#wpvivid_snapshot_progress").html(progress_html);
|
|
if (currentProgess >= MaxProgess)
|
|
{
|
|
clearInterval(timer);
|
|
}
|
|
}, time_steps);
|
|
}
|
|
|
|
function wpvivid_create_snapshot()
|
|
{
|
|
var comment=jQuery('#wpvivid_create_snapshot_comment').val();
|
|
var ajax_data= {
|
|
'action': 'wpvivid_create_snapshot',
|
|
'comment':comment,
|
|
};
|
|
var default_progress='<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width: 0%">0% completed</span></span></p><p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>Creating a snapshot.</span></p>';
|
|
jQuery('#wpvivid_snapshot_progress').show();
|
|
jQuery('#wpvivid_snapshot_progress').html(default_progress);
|
|
|
|
b_need_update=true;
|
|
b_end_create_progress=false;
|
|
wpvivid_simulate_create_progress();
|
|
|
|
setTimeout(function(){
|
|
wpvivid_get_snapshot_progress();
|
|
}, 3000);
|
|
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'none', 'opacity': '0.4'});
|
|
wpvivid_post_request(ajax_data, function(data)
|
|
{
|
|
b_end_create_progress=true;
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
if (jsonarray.result === 'success')
|
|
{
|
|
jQuery('#wpvivid_snapshot_progress').html(jsonarray.progress);
|
|
if(jsonarray.finished==1)
|
|
{
|
|
b_need_update=false;
|
|
alert('Creating a snapshot completed successfully.');
|
|
location.reload();
|
|
}
|
|
else
|
|
{
|
|
wpvivid_resume_create_snapshot();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
b_need_update=false;
|
|
alert(jsonarray.error);
|
|
jQuery('#wpvivid_snapshot_progress').hide();
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
}
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_resume_create_snapshot(0);
|
|
}, 15000);
|
|
});
|
|
}
|
|
|
|
function wpvivid_get_snapshot_progress()
|
|
{
|
|
var ajax_data= {
|
|
'action': 'wpvivid_get_snapshot_progress',
|
|
};
|
|
|
|
wpvivid_post_request(ajax_data, function(data)
|
|
{
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
b_end_create_progress=true;
|
|
jQuery('#wpvivid_snapshot_progress').html(jsonarray.progress);
|
|
|
|
if(b_need_update)
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_get_snapshot_progress();
|
|
}, 1000);
|
|
}
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
if(b_need_update)
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_get_snapshot_progress();
|
|
}, 1000);
|
|
}
|
|
});
|
|
}
|
|
|
|
function wpvivid_resume_create_snapshot(resume)
|
|
{
|
|
if(resume>6)
|
|
{
|
|
b_need_update=false;
|
|
alert('Creating the snapshot timed out.');
|
|
jQuery('#wpvivid_snapshot_progress').hide();
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
return;
|
|
}
|
|
var ajax_data= {
|
|
'action': 'wpvivid_resume_create_snapshot'
|
|
};
|
|
|
|
wpvivid_post_request(ajax_data, function(data)
|
|
{
|
|
try {
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
if (jsonarray.result === 'success')
|
|
{
|
|
jQuery('#wpvivid_snapshot_progress').html(jsonarray.progress);
|
|
|
|
if(jsonarray.finished==1)
|
|
{
|
|
b_need_update=false;
|
|
|
|
alert('Creating a snapshot completed successfully.');
|
|
location.reload();
|
|
}
|
|
else
|
|
{
|
|
wpvivid_resume_create_snapshot();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
b_need_update=false;
|
|
alert(jsonarray.error);
|
|
jQuery('#wpvivid_snapshot_progress').hide();
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
}
|
|
}
|
|
catch (e)
|
|
{
|
|
resume+=1;
|
|
setTimeout(function(){
|
|
wpvivid_resume_create_snapshot(resume);
|
|
}, 15000);
|
|
}
|
|
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
resume+=1;
|
|
setTimeout(function(){
|
|
wpvivid_resume_create_snapshot(resume);
|
|
}, 15000);
|
|
});
|
|
}
|
|
|
|
jQuery('#wpvivid_snapshots_list').on("click",'.wpvivid-snapshot-restore',function()
|
|
{
|
|
var Obj=jQuery(this);
|
|
var snapshot_id=Obj.closest('tr').attr('slug');
|
|
|
|
var descript = '<?php esc_html_e('Are you sure you want to restore this snapshot?', 'wpvivid'); ?>';
|
|
var ret = confirm(descript);
|
|
if (ret === true)
|
|
{
|
|
var ajax_data= {
|
|
'action': 'wpvivid_restore_snapshot',
|
|
'id':snapshot_id
|
|
};
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'none', 'opacity': '0.4'});
|
|
var default_progress='<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width: 0%">0% completed</span></span></p><p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>Restoring the snapshot.</span></p>';
|
|
jQuery('#wpvivid_snapshot_progress').show();
|
|
jQuery('#wpvivid_snapshot_progress').html(default_progress);
|
|
b_restore_finished=false;
|
|
wpvivid_simulate_restore_progress();
|
|
|
|
wpvivid_post_request(ajax_data, function(data)
|
|
{
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
if (jsonarray.result === 'success')
|
|
{
|
|
b_restore_finished=true;
|
|
jQuery('#wpvivid_snapshot_progress').html(jsonarray.progress);
|
|
alert('Restoring the snapshot completed successfully.');
|
|
location.reload(); }
|
|
else
|
|
{
|
|
b_restore_finished=true;
|
|
jQuery('#wpvivid_snapshot_progress').hide();
|
|
alert(jsonarray.error);
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
}
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_get_restore_snapshot_status();
|
|
}, 1000);
|
|
});
|
|
}
|
|
});
|
|
|
|
function wpvivid_get_restore_snapshot_status()
|
|
{
|
|
var ajax_data= {
|
|
'action': 'wpvivid_get_restore_snapshot_status',
|
|
};
|
|
|
|
wpvivid_post_request(ajax_data, function(data)
|
|
{
|
|
try
|
|
{
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
if (jsonarray.result === 'success')
|
|
{
|
|
if(jsonarray.finished==1)
|
|
{
|
|
jQuery('#wpvivid_snapshot_progress').html(jsonarray.progress);
|
|
b_restore_finished=true;
|
|
alert('Restoring the snapshot completed successfully.');
|
|
location.reload();
|
|
}
|
|
else
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_get_restore_snapshot_status();
|
|
}, 1000);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
b_restore_finished=true;
|
|
jQuery('#wpvivid_snapshot_progress').hide();
|
|
alert(jsonarray.error);
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
}
|
|
}
|
|
catch (err)
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_get_restore_snapshot_status();
|
|
}, 1000);
|
|
}
|
|
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
setTimeout(function(){
|
|
wpvivid_get_restore_snapshot_status();
|
|
}, 1000);
|
|
});
|
|
}
|
|
|
|
jQuery('#wpvivid_snapshots_list').on("click",'.wpvivid-snapshot-delete',function()
|
|
{
|
|
var Obj=jQuery(this);
|
|
var snapshot_id=Obj.closest('tr').attr('slug');
|
|
|
|
var descript = '<?php esc_html_e('Are you sure you want to delete this snapshot?', 'wpvivid'); ?>';
|
|
var ret = confirm(descript);
|
|
if (ret === true)
|
|
{
|
|
var ajax_data= {
|
|
'action': 'wpvivid_delete_snapshot',
|
|
'id':snapshot_id
|
|
};
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'none', 'opacity': '0.4'});
|
|
wpvivid_post_request(ajax_data, function(data)
|
|
{
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
if (jsonarray.result === 'success')
|
|
{
|
|
alert('The snapshot has been deleted successfully.');
|
|
jQuery('#wpvivid_snapshots_list').html(jsonarray.html);
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
}
|
|
else
|
|
{
|
|
alert(jsonarray.error);
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
}
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
jQuery('#wpvivid_create_snapshot').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
alert("Deleting the snapshot(s) failed.");
|
|
});
|
|
}
|
|
});
|
|
|
|
jQuery('#wpvivid_snapshots_list').on("click",'#wpvivid_delete_snapshots_action',function()
|
|
{
|
|
var delete_snapshots_array = new Array();
|
|
var count = 0;
|
|
|
|
jQuery('#wpvivid_snapshots_list .wpvivid-snapshot-row input').each(function (i)
|
|
{
|
|
if(jQuery(this).prop('checked'))
|
|
{
|
|
delete_snapshots_array[count] =jQuery(this).closest('tr').attr('slug');
|
|
count++;
|
|
}
|
|
});
|
|
if( count === 0 )
|
|
{
|
|
alert('<?php esc_html_e('Please select at least one item.','wpvivid'); ?>');
|
|
}
|
|
else
|
|
{
|
|
var descript = '<?php esc_html_e('Are you sure to delete the selected snapshots? These snapshots will be deleted permanently.', 'wpvivid'); ?>';
|
|
|
|
var ret = confirm(descript);
|
|
if (ret === true)
|
|
{
|
|
jQuery('#wpvivid_delete_snapshots_action').css({'pointer-events': 'none', 'opacity': '0.4'});
|
|
wpvivid_delete_snapshot_array(delete_snapshots_array,0);
|
|
}
|
|
}
|
|
});
|
|
|
|
function wpvivid_delete_snapshot_array(delete_snapshots_array,index)
|
|
{
|
|
if(index >= delete_snapshots_array.length)
|
|
{
|
|
alert('The snapshot has been deleted successfully.');
|
|
jQuery('#wpvivid_delete_snapshots_action').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
return;
|
|
}
|
|
const snapshot_id = delete_snapshots_array[index];
|
|
var ajax_data= {
|
|
'action': 'wpvivid_delete_snapshot',
|
|
'id':snapshot_id
|
|
};
|
|
wpvivid_post_request(ajax_data, function(data)
|
|
{
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
if (jsonarray.result === 'success')
|
|
{
|
|
jQuery('#wpvivid_snapshots_list').html(jsonarray.html);
|
|
index++;
|
|
wpvivid_delete_snapshot_array(delete_snapshots_array,index);
|
|
}
|
|
else
|
|
{
|
|
alert(jsonarray.error);
|
|
jQuery('#wpvivid_delete_snapshots_action').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
}
|
|
}, function(XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
alert('Deleting the snapshot(s) failed.');
|
|
jQuery('#wpvivid_delete_snapshots_action').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
});
|
|
}
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
public function output_snapshots_setting()
|
|
{
|
|
|
|
$setting=$this->options->get_option('wpvivid_snapshot_setting');
|
|
if(empty($setting))
|
|
{
|
|
$setting=array();
|
|
}
|
|
|
|
$snapshot_retention=isset($setting['snapshot_retention'])?$setting['snapshot_retention']:6;
|
|
$quick_snapshot=isset($setting['quick_snapshot'])?$setting['quick_snapshot']:false;
|
|
if($quick_snapshot)
|
|
{
|
|
$quick_snapshot='checked';
|
|
}
|
|
else
|
|
{
|
|
$quick_snapshot='';
|
|
}
|
|
?>
|
|
<div class="postbox quicksnapshot">
|
|
<table class="widefat" style="border-left:none;border-top:none;border-right:none;">
|
|
<tr>
|
|
<td class="row-title" style="min-width:200px;">
|
|
<label for="tablecell">Snapshot Retention</label>
|
|
</td>
|
|
<td>
|
|
<p>
|
|
<span>Up to </span>
|
|
<span>
|
|
<select id="wpvivid_snapshot_retention" option="setting" name="snapshot_retention">
|
|
<option value="3">3</option>
|
|
<option value="4">4</option>
|
|
<option value="5">5</option>
|
|
<option value="6" selected>6</option>
|
|
<option value="7">7</option>
|
|
<option value="8">8</option>
|
|
<option value="9">9</option>
|
|
<option value="10">10</option>
|
|
<option value="11">11</option>
|
|
<option value="12">12</option>
|
|
</select>
|
|
</span>
|
|
<span>snapshots retained</span></p>
|
|
<p>It is not recommended to create too many snapshots.</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="row-title" style="min-width:200px;">
|
|
<label for="tablecell">Quick Snapshot</label>
|
|
</td>
|
|
<td>
|
|
<p>
|
|
<label class="wpvivid-checkbox">
|
|
<span>Enable Quick Snapshot</span>
|
|
<input type="checkbox" option="setting" name="quick_snapshot" <?php echo esc_attr($quick_snapshot); ?> />
|
|
<span class="wpvivid-checkbox-checkmark"></span>
|
|
</label>
|
|
</p>
|
|
<p><code>Show a menu in top admin bar for quickly creating a snapshot.</code></p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div style="padding:1em 1em 0 0;"><input class="button-primary wpvivid-snapshot-setting-save" type="submit" value="Save Changes"></div>
|
|
</div>
|
|
<script>
|
|
jQuery('.wpvivid-snapshot-setting-save').click(function()
|
|
{
|
|
wpvivid_snapshot_setting_save();
|
|
});
|
|
|
|
function wpvivid_ajax_snapshot_data_transfer(data_type){
|
|
var json = {};
|
|
jQuery('input:checkbox[option='+data_type+']').each(function() {
|
|
var value = '0';
|
|
var key = jQuery(this).prop('name');
|
|
if(jQuery(this).prop('checked')) {
|
|
value = '1';
|
|
}
|
|
else {
|
|
value = '0';
|
|
}
|
|
json[key]=value;
|
|
});
|
|
jQuery('input:radio[option='+data_type+']').each(function() {
|
|
if(jQuery(this).prop('checked'))
|
|
{
|
|
var key = jQuery(this).prop('name');
|
|
var value = jQuery(this).prop('value');
|
|
json[key]=value;
|
|
}
|
|
});
|
|
jQuery('input:text[option='+data_type+']').each(function(){
|
|
var obj = {};
|
|
var key = jQuery(this).prop('name');
|
|
var value = jQuery(this).val();
|
|
json[key]=value;
|
|
});
|
|
jQuery('input:password[option='+data_type+']').each(function(){
|
|
var obj = {};
|
|
var key = jQuery(this).prop('name');
|
|
var value = jQuery(this).val();
|
|
json[key]=value;
|
|
});
|
|
jQuery('select[option='+data_type+']').each(function(){
|
|
var obj = {};
|
|
var key = jQuery(this).prop('name');
|
|
var value = jQuery(this).val();
|
|
json[key]=value;
|
|
});
|
|
return JSON.stringify(json);
|
|
}
|
|
|
|
function wpvivid_snapshot_setting_save()
|
|
{
|
|
var setting_data = wpvivid_ajax_snapshot_data_transfer('setting');
|
|
var json = JSON.parse(setting_data);
|
|
setting_data=JSON.stringify(json);
|
|
|
|
var ajax_data = {
|
|
'action': 'wpvivid_set_snapshot_setting',
|
|
'setting': setting_data,
|
|
};
|
|
jQuery('.wpvivid-snapshot-setting-save').css({'pointer-events': 'none', 'opacity': '0.4'});
|
|
wpvivid_post_request(ajax_data, function (data)
|
|
{
|
|
try
|
|
{
|
|
var jsonarray = jQuery.parseJSON(data);
|
|
|
|
jQuery('.wpvivid-snapshot-setting-save').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
if (jsonarray.result === 'success')
|
|
{
|
|
location.reload();
|
|
}
|
|
else
|
|
{
|
|
alert(jsonarray.error);
|
|
}
|
|
}
|
|
catch (err)
|
|
{
|
|
alert(err);
|
|
jQuery('.wpvivid-snapshot-setting-save').css({'pointer-events': 'auto', 'opacity': '1'});
|
|
}
|
|
},function (XMLHttpRequest, textStatus, errorThrown)
|
|
{
|
|
var error_msg = "request: "+ textStatus + "(" + errorThrown + "): an error occurred when changing snapshot settings. " +
|
|
"This error may be request not reaching or server not responding. Please try again later.";
|
|
alert(error_msg);
|
|
});
|
|
}
|
|
|
|
jQuery(document).ready(function ()
|
|
{
|
|
jQuery('#wpvivid_snapshot_retention').val("<?php echo esc_attr($snapshot_retention)?>").change();
|
|
});
|
|
</script>
|
|
<?php
|
|
}
|
|
|
|
public function create_snapshot()
|
|
{
|
|
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
|
|
$check=current_user_can('manage_options');
|
|
$check=apply_filters('wpvivid_ajax_check_security',$check);
|
|
if(!$check)
|
|
{
|
|
die();
|
|
}
|
|
|
|
if(isset($_POST['comment'])&&!empty($_POST['comment']))
|
|
{
|
|
$comment=sanitize_text_field($_POST['comment']);
|
|
}
|
|
else
|
|
{
|
|
$comment='';
|
|
}
|
|
|
|
set_time_limit(300);
|
|
$snapshot=new WPvivid_Snapshot_Function_Ex();
|
|
$snapshot->check_manual_snapshot();
|
|
$ret=$snapshot->create_snapshot('manual',$comment);
|
|
if($ret['result']=='success')
|
|
{
|
|
if($ret['finished']==1)
|
|
{
|
|
$ret['progress'] = '<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width:100%">100% completed</span></span></p>
|
|
<p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>Create snapshot completed.</span></p>';
|
|
}
|
|
else
|
|
{
|
|
$progress=$snapshot->get_progress();
|
|
$ret['progress'] = '<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width:'.$progress['main_percent'].'">'.$progress['main_percent'].' completed</span></span></p>
|
|
<p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>'.$progress['doing'].'</span></p>';
|
|
}
|
|
}
|
|
|
|
echo wp_json_encode($ret);
|
|
die();
|
|
}
|
|
|
|
public function get_snapshot_progress()
|
|
{
|
|
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
|
|
$check=current_user_can('manage_options');
|
|
$check=apply_filters('wpvivid_ajax_check_security',$check);
|
|
if(!$check)
|
|
{
|
|
die();
|
|
}
|
|
|
|
set_time_limit(300);
|
|
$snapshot=new WPvivid_Snapshot_Function_Ex();
|
|
|
|
$progress=$snapshot->get_progress();
|
|
$ret['progress'] = '<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width:'.$progress['main_percent'].'">'.$progress['main_percent'].' completed</span></span></p>
|
|
<p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>'.$progress['doing'].'</span></p>';
|
|
|
|
echo wp_json_encode($ret);
|
|
die();
|
|
}
|
|
|
|
public function resume_create_snapshot()
|
|
{
|
|
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
|
|
$check=current_user_can('manage_options');
|
|
$check=apply_filters('wpvivid_ajax_check_security',$check);
|
|
if(!$check)
|
|
{
|
|
die();
|
|
}
|
|
|
|
set_time_limit(300);
|
|
$snapshot=new WPvivid_Snapshot_Function_Ex();
|
|
$ret=$snapshot->resume_create_snapshot();
|
|
|
|
if($ret['result']=='success')
|
|
{
|
|
if($ret['finished']==1)
|
|
{
|
|
$ret['progress'] = '<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width:100%">100% completed</span></span></p>
|
|
<p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>Create snapshot completed.</span></p>';
|
|
}
|
|
else
|
|
{
|
|
$progress=$snapshot->get_progress();
|
|
$ret['progress'] = '<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width:'.$progress['main_percent'].'">'.$progress['main_percent'].' completed</span></span></p>
|
|
<p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>'.$progress['doing'].'</span></p>';
|
|
}
|
|
}
|
|
|
|
echo wp_json_encode($ret);
|
|
die();
|
|
}
|
|
|
|
public function restore_snapshot()
|
|
{
|
|
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
|
|
$check=current_user_can('manage_options');
|
|
$check=apply_filters('wpvivid_ajax_check_security',$check);
|
|
if(!$check)
|
|
{
|
|
die();
|
|
}
|
|
|
|
if(isset($_POST['id']))
|
|
{
|
|
$snapshot_id=sanitize_text_field($_POST['id']);
|
|
|
|
set_time_limit(300);
|
|
$snapshot=new WPvivid_Snapshot_Function_Ex();
|
|
$ret=$snapshot->restore_snapshot($snapshot_id);
|
|
if($ret['result']=='success')
|
|
{
|
|
$ret['progress'] = '<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width:100%">100% completed</span></span></p>
|
|
<p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>Restoring the snapshot completed.</span></p>';
|
|
}
|
|
echo wp_json_encode($ret);
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
public function get_restore_snapshot_status()
|
|
{
|
|
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
|
|
$check=current_user_can('manage_options');
|
|
$check=apply_filters('wpvivid_ajax_check_security',$check);
|
|
if(!$check)
|
|
{
|
|
die();
|
|
}
|
|
|
|
set_time_limit(300);
|
|
$snapshot=new WPvivid_Snapshot_Function_Ex();
|
|
$ret=$snapshot->get_restore_task_data();
|
|
|
|
if($ret['result']!='failed')
|
|
{
|
|
$finished=true;
|
|
$i_sum=count($ret['snapshot_tables']);
|
|
$i_finished=0;
|
|
foreach ($ret['snapshot_tables'] as $table)
|
|
{
|
|
if($table['finished']==0)
|
|
{
|
|
$finished=false;
|
|
}
|
|
else
|
|
{
|
|
$i_finished++;
|
|
}
|
|
}
|
|
|
|
$i_progress=intval(($i_finished/$i_sum)*100);
|
|
$progress['main_percent']=$i_progress.'%';
|
|
$progress['doing']="Restoring the snapshot.";
|
|
$ret['progress'] = '<p><span class="wpvivid-span-progress"><span class="wpvivid-span-processed-progress wpvivid-span-processed-percent-progress" style="width:'.$progress['main_percent'].'">'.$progress['main_percent'].' completed</span></span></p>
|
|
<p><span class="dashicons dashicons-welcome-write-blog wpvivid-dashicons-grey"></span><span>Action:</span><span>'.$progress['doing'].'</span></p>';
|
|
|
|
$ret['finished']=$finished;
|
|
}
|
|
|
|
echo wp_json_encode($ret);
|
|
die();
|
|
}
|
|
|
|
public function delete_snapshot()
|
|
{
|
|
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
|
|
$check=current_user_can('manage_options');
|
|
$check=apply_filters('wpvivid_ajax_check_security',$check);
|
|
if(!$check)
|
|
{
|
|
die();
|
|
}
|
|
|
|
if(isset($_POST['id']))
|
|
{
|
|
$snapshot_id=sanitize_text_field($_POST['id']);
|
|
|
|
set_time_limit(300);
|
|
$snapshot=new WPvivid_Snapshot_Function_Ex();
|
|
$ret=$snapshot->remove_snapshot($snapshot_id);
|
|
if($ret['result']=='success')
|
|
{
|
|
$snapshot_data=$snapshot->get_snapshots();
|
|
$Snapshots_list = new WPvivid_Snapshots_List_Ex();
|
|
$Snapshots_list->set_list($snapshot_data);
|
|
$Snapshots_list->prepare_items();
|
|
ob_start();
|
|
$Snapshots_list->display();
|
|
$html = ob_get_clean();
|
|
$ret['html']=$html;
|
|
}
|
|
|
|
echo wp_json_encode($ret);
|
|
}
|
|
die();
|
|
}
|
|
|
|
public function check_create_snapshot($check)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public function create_snapshot_ex($comment)
|
|
{
|
|
set_time_limit(300);
|
|
$snapshot=new WPvivid_Snapshot_Function_Ex();
|
|
$snapshot->create_snapshot('manual',$comment);
|
|
}
|
|
|
|
public function set_setting()
|
|
{
|
|
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
|
|
$check=current_user_can('manage_options');
|
|
$check=apply_filters('wpvivid_ajax_check_security',$check);
|
|
if(!$check)
|
|
{
|
|
die();
|
|
}
|
|
|
|
if(isset($_POST['setting'])&&!empty($_POST['setting']))
|
|
{
|
|
$json_setting = sanitize_text_field($_POST['setting']);
|
|
$json_setting = stripslashes($json_setting);
|
|
$setting = json_decode($json_setting, true);
|
|
if (is_null($setting))
|
|
{
|
|
$ret['result']='failed';
|
|
$ret['error']='json decode failed';
|
|
echo wp_json_encode($ret);
|
|
die();
|
|
}
|
|
|
|
$old_setting=$this->options->get_option('wpvivid_snapshot_setting');
|
|
if(empty($setting))
|
|
{
|
|
$setting=array();
|
|
}
|
|
|
|
if(isset($setting['snapshot_retention']))
|
|
{
|
|
$old_setting['snapshot_retention']=intval($setting['snapshot_retention']);
|
|
}
|
|
|
|
if(isset($setting['quick_snapshot']))
|
|
{
|
|
$old_setting['quick_snapshot']=intval($setting['quick_snapshot']);
|
|
}
|
|
|
|
$this->options->update_option('wpvivid_snapshot_setting',$old_setting);
|
|
}
|
|
$ret['result']='success';
|
|
echo wp_json_encode($ret);
|
|
die();
|
|
}
|
|
|
|
public function add_sidebar_free()
|
|
{
|
|
if(defined('WPVIVID_SNAPSHOT_VERSION'))
|
|
{
|
|
$wpvivid_snapshot_version = WPVIVID_SNAPSHOT_VERSION;
|
|
}
|
|
else
|
|
{
|
|
$wpvivid_snapshot_version = WPVIVID_PLUGIN_VERSION;
|
|
}
|
|
|
|
?>
|
|
<div class="postbox">
|
|
<h2>
|
|
<div style="float: left; margin-right: 5px;"><span style="margin: 0; padding: 0"><?php esc_html_e('Current Version: ', 'wpvivid-backuprestore'); ?><?php echo esc_html($wpvivid_snapshot_version); ?></span></div>
|
|
<div style="float: left; margin-right: 5px;"><span style="margin: 0; padding: 0">|</span></div>
|
|
<div style="float: left; margin-left: 0;">
|
|
<span style="margin: 0; padding: 0"><a href="https://wordpress.org/plugins/wpvivid-snapshot-database/#developers" target="_blank" style="text-decoration: none;"><?php esc_html_e('ChangeLog', 'wpvivid-backuprestore'); ?></a></span>
|
|
</div>
|
|
<div style="clear: both;"></div>
|
|
</h2>
|
|
</div>
|
|
<div id="wpvivid_backup_schedule_part"></div>
|
|
<div class="postbox">
|
|
<h2><span><?php esc_html_e('Troubleshooting', 'wpvivid-backuprestore'); ?></span></h2>
|
|
<div class="inside">
|
|
<table class="widefat" cellpadding="0">
|
|
<tbody>
|
|
<tr class="alternate">
|
|
<td class="row-title"><a href="https://docs.wpvivid.com/wpvivid-database-snapshots-create-database-snapshots-wordpress.html" target="_blank"><?php esc_html_e('Create Database Snapshots', 'wpvivid-backuprestore'); ?></a></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="row-title"><a href="https://docs.wpvivid.com/wpvivid-database-snapshots-restore-database-snapshots-wordpress.html" target="_blank"><?php esc_html_e('Restore Database Snapshots', 'wpvivid-backuprestore'); ?></a></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="postbox">
|
|
<h2><span><?php esc_html_e('Support', 'wpvivid-backuprestore'); ?></span></h2>
|
|
<div class="inside">
|
|
<table class="widefat" cellpadding="0">
|
|
<tbody>
|
|
<tr class="alternate"><td class="row-title"><a href="https://wordpress.org/support/plugin/wpvivid-snapshot-database" target="_blank"><?php esc_html_e('Get Support on Forum', 'wpvivid-backuprestore'); ?></a></td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
public function add_sidebar()
|
|
{
|
|
if(apply_filters('wpvivid_show_sidebar',true))
|
|
{
|
|
?>
|
|
<div id="postbox-container-1" class="postbox-container">
|
|
<div class="meta-box-sortables ui-sortable">
|
|
<div class="postbox wpvivid-sidebar">
|
|
<h2 style="margin-top:0.5em;">
|
|
<span class="dashicons dashicons-book-alt wpvivid-dashicons-orange" ></span>
|
|
<span><?php esc_attr_e(
|
|
'Documentation', 'WpAdminStyle'
|
|
); ?></span></h2>
|
|
<div class="inside" style="padding-top:0;">
|
|
<ul class="" >
|
|
<li>
|
|
<span class="dashicons dashicons-camera-alt wpvivid-dashicons-grey"></span>
|
|
<a href="https://docs.wpvivid.com/wpvivid-database-snapshots-create-database-snapshots-wordpress.html"><b><?php esc_html_e('Create Database Snapshots', 'wpvivid'); ?></b></a>
|
|
<small><span style="float: right;"><a href="#" style="text-decoration: none;"><span class="dashicons dashicons-migrate wpvivid-dashicons-grey"></span></a></span></small><br>
|
|
</li>
|
|
<li>
|
|
<span class="dashicons dashicons-camera-alt wpvivid-dashicons-grey"></span>
|
|
<a href="https://docs.wpvivid.com/wpvivid-database-snapshots-restore-database-snapshots-wordpress.html"><b><?php esc_html_e('Restore Database Snapshots', 'wpvivid'); ?></b></a>
|
|
<small><span style="float: right;"><a href="#" style="text-decoration: none;"><span class="dashicons dashicons-migrate wpvivid-dashicons-grey"></span></a></span></small><br>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<h2><span class="dashicons dashicons-businesswoman wpvivid-dashicons-green"></span>
|
|
<span><?php esc_attr_e(
|
|
'Support', 'WpAdminStyle'
|
|
); ?></span></h2>
|
|
<div class="inside">
|
|
<ul class="">
|
|
<li><span class="dashicons dashicons-admin-comments wpvivid-dashicons-green"></span>
|
|
<a href="https://wordpress.org/support/plugin/snapshot-database/"><b><?php esc_html_e('Get Support on Forum', 'wpvivid'); ?></b></a>
|
|
<br>
|
|
<?php esc_html_e('If you need any help with our plugin, start a thread on the plugin support forum and we will respond shortly.', 'wpvivid'); ?>
|
|
</li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
}
|