$expires) {
$ret['result'] = 'failed';
$ret['error'] = 'The key has expired.';
echo wp_json_encode($ret);
die();
}
$json['test_connect']=1;
$json=wp_json_encode($json);
$crypt=new WPvivid_crypt(base64_decode($token));
$data=$crypt->encrypt_message($json);
if($data===false)
{
$ret['result'] = 'failed';
$ret['error'] = 'Data encryption failed.';
echo wp_json_encode($ret);
die();
}
$data=base64_encode($data);
$args['body']=array('wpvivid_content'=>$data,'wpvivid_action'=>'send_to_site_connect');
$args['timeout']=30;
$response=wp_remote_post($url,$args);
if ( is_wp_error( $response ) )
{
$ret['result']=WPVIVID_FAILED;
$ret['error']= $response->get_error_message();
}
else
{
if($response['response']['code']==200)
{
$res=json_decode($response['body'],1);
if($res!=null)
{
if($res['result']==WPVIVID_SUCCESS)
{
$ret['result']=WPVIVID_SUCCESS;
$options=WPvivid_Setting::get_option('wpvivid_saved_api_token');
$options[$url]['token']=$token;
$options[$url]['url']=$url;
$options[$url]['expires']=$expires;
$options[$url]['domain']=$domain;
delete_option('wpvivid_saved_api_token');
WPvivid_Setting::update_option('wpvivid_saved_api_token',$options);
$html='';
$i=0;
foreach ($options as $key=>$site)
{
$check_status='';
if($key==$url)
{
$check_status='checked';
}
if($site['expires']>time())
{
$date=gmdate("l, F d, Y H:i", $site['expires']);
}
else
{
$date='Token has expired';
}
$i++;
$html = apply_filters('wpvivid_put_transfer_key', $html);
}
$ret['html']= $html;
}
else
{
$ret['result']=WPVIVID_FAILED;
$ret['error']= $res['error'];
}
}
else
{
$ret['result']=WPVIVID_FAILED;
$ret['error']= $response['body'];
//$ret['error']= 'failed to parse returned data. Unable to retrieve the correct authorization data via HTTP request.';
}
}
else
{
$ret['result']=WPVIVID_FAILED;
$ret['error']= 'upload error '.$response['response']['code'].' '.$response['body'];
//$response['body']
}
}
echo wp_json_encode($ret);
}
die();
}
public function delete_transfer_key()
{
global $wpvivid_plugin;
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
$check=current_user_can('manage_options');
$check=apply_filters('wpvivid_ajax_check_security',$check);
if(!$check)
{
die();
}
$ret['result']=WPVIVID_SUCCESS;
delete_option('wpvivid_saved_api_token');
$html='';
$html = apply_filters('wpvivid_put_transfer_key', $html);
$ret['html']=$html;
echo wp_json_encode($ret);
die();
}
public function send_backup_to_site()
{
try {
global $wpvivid_plugin;
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
$check=current_user_can('manage_options');
$check=apply_filters('wpvivid_ajax_check_security',$check);
if(!$check)
{
die();
}
$options = WPvivid_Setting::get_option('wpvivid_saved_api_token');
if (empty($options)) {
$ret['result'] = 'failed';
$ret['error'] = __('A key is required.', 'wpvivid-backuprestore');
echo wp_json_encode($ret);
die();
}
$url = '';
foreach ($options as $key => $value) {
$url = $value['url'];
}
if ($url === '') {
$ret['result'] = 'failed';
$ret['error'] = __('The key is invalid.', 'wpvivid-backuprestore');
echo wp_json_encode($ret);
die();
}
if ($options[$url]['expires'] != 0 && $options[$url]['expires'] < time()) {
$ret['result'] = 'failed';
$ret['error'] = __('The key has expired.', 'wpvivid-backuprestore');
echo wp_json_encode($ret);
die();
}
$json['test_connect']=1;
$json=wp_json_encode($json);
$crypt=new WPvivid_crypt(base64_decode($options[$url]['token']));
$data=$crypt->encrypt_message($json);
$data=base64_encode($data);
$args['body']=array('wpvivid_content'=>$data,'wpvivid_action'=>'send_to_site_connect');
$response=wp_remote_post($url,$args);
if ( is_wp_error( $response ) )
{
$ret['result']=WPVIVID_FAILED;
$ret['error']= $response->get_error_message();
echo wp_json_encode($ret);
die();
}
else
{
if($response['response']['code']==200) {
$res=json_decode($response['body'],1);
if($res!=null) {
if($res['result']==WPVIVID_SUCCESS) {
}
else {
$ret['result']=WPVIVID_FAILED;
$ret['error']= $res['error'];
echo wp_json_encode($ret);
die();
}
}
else {
$ret['result']=WPVIVID_FAILED;
$ret['error']= 'failed to parse returned data, unable to establish connection with the target site.';
$ret['response']=$response;
echo wp_json_encode($ret);
die();
}
}
else {
$ret['result']=WPVIVID_FAILED;
$ret['error']= 'upload error '.$response['response']['code'].' '.$response['body'];
echo wp_json_encode($ret);
die();
}
}
if (WPvivid_taskmanager::is_tasks_backup_running()) {
$ret['result'] = 'failed';
$ret['error'] = __('A task is already running. Please wait until the running task is complete, and try again.', 'wpvivid-backuprestore');
echo wp_json_encode($ret);
die();
}
$remote_option['url'] = $options[$url]['url'];
$remote_option['token'] = $options[$url]['token'];
$remote_option['type'] = WPVIVID_REMOTE_SEND_TO_SITE;
$remote_options['temp'] = $remote_option;
$backup_options = stripslashes(sanitize_text_field($_POST['backup_options']));
$backup_options = json_decode($backup_options, true);
$backup['backup_files'] = $backup_options['transfer_type'];
$backup['local'] = 0;
$backup['remote'] = 1;
$backup['ismerge'] = 1;
$backup['lock'] = 0;
$backup['remote_options'] = $remote_options;
$backup_task = new WPvivid_Backup_Task();
$ret = $backup_task->new_backup_task($backup, 'Manual', 'transfer');
$task_id = $ret['task_id'];
global $wpvivid_plugin;
$wpvivid_plugin->check_backup($task_id, $backup);
echo wp_json_encode($ret);
die();
}
catch (Exception $e){
$ret['result'] = 'failed';
$ret['error'] = $e->getMessage();
echo wp_json_encode($ret);
die();
}
}
public function migrate_now()
{
global $wpvivid_plugin;
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['task_id'])||empty($_POST['task_id'])||!is_string($_POST['task_id']))
{
$ret['result']='failed';
$ret['error']=__('Error occurred while parsing the request data. Please try to run backup again.', 'wpvivid-backuprestore');
echo wp_json_encode($ret);
die();
}
$task_id=sanitize_key($_POST['task_id']);
//flush buffer
$wpvivid_plugin->flush($task_id);
$wpvivid_plugin->backup($task_id);
die();
}
function export_download_backup()
{
global $wpvivid_plugin;
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
$check=current_user_can('manage_options');
$check=apply_filters('wpvivid_ajax_check_security',$check);
if(!$check)
{
die();
}
$schedule_options=WPvivid_Schedule::get_schedule();
if(empty($schedule_options))
{
die();
}
$backup_options = stripslashes(sanitize_text_field($_POST['backup_options']));
$backup_options = json_decode($backup_options, true);
$backup['backup_files']= $backup_options['transfer_type'];
$backup['local']=1;
$backup['remote']=0;
$backup['ismerge']=1;
$backup['lock']=0;
//$backup['remote_options']='';
$backup_task=new WPvivid_Backup_Task();
$task=$backup_task->new_backup_task($backup,'Manual', 'export');
$task_id=$task['task_id'];
//add_action('wpvivid_handle_upload_succeed',array($this,'wpvivid_deal_upload_succeed'),11);
$wpvivid_plugin->check_backup($task_id,$backup['backup_files']);
$wpvivid_plugin->flush($task_id);
$wpvivid_plugin->backup($task_id);
//}
die();
}
function wpvivid_handle_backup_failed($task)
{
global $wpvivid_plugin;
if($task['action'] === 'transfer') {
$backup_error_array = WPvivid_Setting::get_option('wpvivid_transfer_error_array');
if (empty($backup_error_array)) {
$backup_error_array = array();
}
if (!array_key_exists($task['id'], $backup_error_array['bu_error'])) {
$backup_error_array['bu_error']['task_id'] = $task['id'];
$backup_error_array['bu_error']['error_msg'] = $task['status']['error'];
WPvivid_Setting::update_option('wpvivid_transfer_error_array', $backup_error_array);
}
$backup=new WPvivid_Backup($task['id']);
$backup->clean_backup();
$wpvivid_plugin->wpvivid_log->WriteLog('Upload failed. Delete task '.$task['id'], 'notice');
WPvivid_Backuplist::delete_backup($task['id']);
}
}
public function wpvivid_deal_upload_succeed($task)
{
global $wpvivid_plugin;
if($task['action'] === 'transfer')
{
$backup_success_count = WPvivid_Setting::get_option('wpvivid_transfer_success_count');
if (empty($backup_success_count))
{
$backup_success_count = 0;
}
$backup_success_count++;
WPvivid_Setting::update_option('wpvivid_transfer_success_count', $backup_success_count);
$wpvivid_plugin->wpvivid_log->WriteLog('Upload finished. Delete task '.$task['id'], 'notice');
WPvivid_Backuplist::delete_backup($task['id']);
}
}
public function generate_url()
{
global $wpvivid_plugin;
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
$check=current_user_can('manage_options');
$check=apply_filters('wpvivid_ajax_check_security',$check);
if(!$check)
{
die();
}
include_once WPVIVID_PLUGIN_DIR . '/vendor/autoload.php';
$expires=time()+3600;
if(isset($_POST['expires']))
{
$expires_display=sanitize_text_field($_POST['expires']);
if($expires_display=='1 month')
{
$expires=time()+2592000;
}
else if($expires_display=='1 day')
{
$expires=time()+86400;
}
else if($expires_display=='2 hour')
{
$expires=time()+7200;
}
else if($expires_display=='8 hour')
{
$expires=time()+28800;
}
else if($expires_display=='24 hour')
{
$expires=time()+86400;
}
else if($expires_display=='Never')
{
$expires=0;
}
}
$key_size = 2048;
$rsa = new Crypt_RSA();
$keys = $rsa->createKey($key_size);
$options['public_key']=base64_encode($keys['publickey']);
$options['private_key']=base64_encode($keys['privatekey']);
$options['expires']=$expires;
$options['domain']=home_url();
WPvivid_Setting::update_option('wpvivid_api_token',$options);
$url= $options['domain'];
$url=$url.'?domain='.$options['domain'].'&token='.$options['public_key'].'&expires='.$expires;
echo $url;
die();
}
public function generate_url_ex()
{
global $wpvivid_plugin;
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
$check=current_user_can('manage_options');
$check=apply_filters('wpvivid_ajax_check_security',$check);
if(!$check)
{
die();
}
include_once WPVIVID_PLUGIN_DIR . '/vendor/autoload.php';
$expires=time()+3600;
if(isset($_POST['expires']))
{
$expires_display=sanitize_text_field($_POST['expires']);
if($expires_display=='1 month')
{
$expires=time()+2592000;
}
else if($expires_display=='1 day')
{
$expires=time()+86400;
}
else if($expires_display=='2 hour')
{
$expires=time()+7200;
}
else if($expires_display=='8 hour')
{
$expires=time()+28800;
}
else if($expires_display=='24 hour')
{
$expires=time()+86400;
}
else if($expires_display=='Never')
{
$expires=0;
}
}
$key_size = 2048;
$rsa = new Crypt_RSA();
$keys = $rsa->createKey($key_size);
$options['public_key']=base64_encode($keys['publickey']);
$options['private_key']=base64_encode($keys['privatekey']);
$options['expires']=$expires;
$options['domain']=home_url();
WPvivid_Setting::update_option('wpvivid_api_token',$options);
$url= $options['domain'];
$url=$url.'?domain='.$options['domain'].'&token='.$options['public_key'].'&expires='.$expires;
$ret['result']='success';
$ret['url']=$url;
echo wp_json_encode($ret);
die();
}
public function wpvivid_put_transfer_key_output()
{
echo '';
$options=WPvivid_Setting::get_option('wpvivid_saved_api_token');
if(empty($options))
{
echo '
</textarea>
';
}
else{
foreach ($options as $key => $value)
{
$token = $value['token'];
$source_dir=home_url();
$target_dir=$value['domain'];
$expires=$value['expires'];
if ($expires != 0 && time() > $expires) {
$key_status='The key has expired. Please delete it first and generate a new one.';
}
else{
$time_diff = $expires - time();
$key_status = 'The key will expire in: '.gmdate("H:i:s",$time_diff).'. Once the key expires, you need to generate a new key.';
}
}
echo '
Key:
'.esc_html($key_status).'
The connection is ok. Now you can transfer the site '.esc_html($source_dir).' to the site '.esc_html($target_dir).'
';
}
?>
';
$options=WPvivid_Setting::get_option('wpvivid_saved_api_token');
if(empty($options)){
$html .= '
</textarea>
';
}
else{
foreach ($options as $key => $value)
{
$token = $value['token'];
$source_dir=home_url();
$target_dir=$value['domain'];
$expires=$value['expires'];
if ($expires != 0 && time() > $expires) {
$key_status='The key has expired. Please delete it first and generate a new one.';
}
else{
$time_diff = $expires - time();
$key_status = 'The key will expire in: '.gmdate("H:i:s",$time_diff).'. Once the key expires, you need to generate a new key.';
}
}
$html .= '
Key:
'.$key_status.'
The connection is ok. Now you can transfer the site '.$source_dir.' to the site '.$target_dir.'
';
}
$html.='
';
return $html;
}
public function wpvivid_migrate_descript($html){
$html .= '
'.__('The feature can help you transfer a Wordpress site to a new domain(site). It would be a convenient way to migrate your WP site from dev environment to live server or from old server to the new.', 'wpvivid-backuprestore').'
';
return $html;
}
public function wpvivid_migrate_part_type($html){
$migrate_type = '';
$type_name = 'transfer_type';
$html = '
'.__( 'Choose the content you want to transfer', 'wpvivid-backuprestore').'
input type="radio"
'.apply_filters('wpvivid_add_migrate_type', $migrate_type, $type_name).'
';
return $html;
}
public function wpvivid_migrate_part_exec($html)
{
?>
'.__('Note: ', 'wpvivid-backuprestore').'
'.__('1. In order to successfully complete the migration, you\'d better deactivate 301 redirect plugin , firewall and security plugin , and caching plugin (if they exist) before transferring website.', 'wpvivid-backuprestore').'
'.__('2. Please migrate website with the manual way when using Local by Flywheel environment.', 'wpvivid-backuprestore').'
';
return $html;
}
public function wpvivid_migrate_part_tip($html){
$backupdir=WPvivid_Setting::get_backupdir();
$html .= ''.__('Tips: Some web hosts may restrict the connection between the two sites, so you may get a 403 error or unstable connection issue when performing auto migration. In that case, it is recommended to manually transfer the site.', 'wpvivid-backuprestore').'
'.__('How to migrate Wordpress site manually to a new domain(site) with WPvivid backup plugin?', 'wpvivid-backuprestore').'
'.__('1. Download a backup in backups list to your computer.', 'wpvivid-backuprestore').'
'.__('2. Upload the backup to destination site. There are two ways available to use:', 'wpvivid-backuprestore').'
'.__('2.1 Upload the backup to the upload section of WPvivid backup plugin in destination site.', 'wpvivid-backuprestore').'
'.sprintf('2.2 Upload the backup with FTP client to backup directory %s in destination site, then click Scan uploaded backup or received backup button.', WP_CONTENT_DIR.DIRECTORY_SEPARATOR.$backupdir).'
'.__('3. Once done, the backup appears in backups list. Then, restore the backup.', 'wpvivid-backuprestore').'
';
return $html;
}
public function wpvivid_add_migrate_type_output($name_type)
{
echo '
'.esc_html__( 'Database + Files (WordPress Files)', 'wpvivid-backuprestore' ).'
'.esc_html__( 'WordPress Files (Exclude Database)', 'wpvivid-backuprestore' ).'
'.esc_html__( 'Only Database', 'wpvivid-backuprestore' ).'
'.esc_html__('Choose what to migrate', 'wpvivid-backuprestore').'
'.esc_html__('Pro feature: learn more', 'wpvivid-backuprestore').'
';
}
public function wpvivid_add_migrate_type($html, $name_type){
$html .= '
'.__( 'Database + Files (WordPress Files)', 'wpvivid-backuprestore' ).'
'.__( 'WordPress Files (Exclude Database)', 'wpvivid-backuprestore' ).'
'.__( 'Only Database', 'wpvivid-backuprestore' ).'
'.__('Choose what to migrate', 'wpvivid-backuprestore').'
'.__('Pro feature: learn more', 'wpvivid-backuprestore').'
';
return $html;
}
public function list_tasks()
{
global $wpvivid_plugin;
check_ajax_referer( 'wpvivid_ajax', 'nonce' );
$check=current_user_can('manage_options');
$check=apply_filters('wpvivid_ajax_check_security',$check);
if(!$check)
{
die();
}
$tasks=WPvivid_Setting::get_tasks();
$ret=array();
$list_tasks=array();
foreach ($tasks as $task)
{
if($task['action']=='transfer')
{
$backup=new WPvivid_Backup_Task($task['id']);
$list_tasks[$task['id']]=$backup->get_backup_task_info($task['id']);
if($list_tasks[$task['id']]['task_info']['need_next_schedule']===true){
$timestamp = wp_next_scheduled(WPVIVID_TASK_MONITOR_EVENT,array($task['id']));
if($timestamp===false)
{
$wpvivid_plugin->add_monitor_event($task['id'],20);
}
}
if($list_tasks[$task['id']]['task_info']['need_update_last_task']===true){
$task_msg = WPvivid_taskmanager::get_task($task['id']);
$wpvivid_plugin->update_last_backup_task($task_msg);
}
//
//
' . __('Database Size:', 'wpvivid-backuprestore') . ' ' . $list_tasks[$task['id']]['task_info']['db_size'] . '
//
' . __('File Size:', 'wpvivid-backuprestore') . ' ' . $list_tasks[$task['id']]['task_info']['file_size'] . '
//
$list_tasks[$task['id']]['progress_html'] = '
' . __('Total Size:', 'wpvivid-backuprestore') . ' ' . $list_tasks[$task['id']]['task_info']['total'] . '
' . __('Uploaded:', 'wpvivid-backuprestore') . ' ' . $list_tasks[$task['id']]['task_info']['upload'] . '
' . __('Speed:', 'wpvivid-backuprestore') . ' ' . $list_tasks[$task['id']]['task_info']['speed'] . '
' . __('Network Connection:', 'wpvivid-backuprestore') . ' ' . $list_tasks[$task['id']]['task_info']['network_connection'] . '
' . $list_tasks[$task['id']]['task_info']['descript'] . '
';
}
}
WPvivid_taskmanager::delete_marked_task();
$backup_success_count=WPvivid_Setting::get_option('wpvivid_transfer_success_count');
if(!empty($backup_success_count)){
$notice_msg = __('Transfer succeeded. Please scan the backup list on the destination site to display the backup, then restore the backup.', 'wpvivid-backuprestore');
$success_notice_html=''.$notice_msg.'
Dismiss this notice.
';
WPvivid_Setting::delete_option('wpvivid_transfer_success_count');
}
else {
$success_notice_html = false;
}
$ret['transfer_succeed_notice'] = $success_notice_html;
$backup_error_array=WPvivid_Setting::get_option('wpvivid_transfer_error_array');
if(!empty($backup_error_array)){
$error_notice_html = array();
foreach ($backup_error_array as $key => $value){
$notice_msg = 'Transfer failed, '.$value['error_msg'];
$error_notice_html['bu_error']['task_id']=$value['task_id'];
$error_notice_html['bu_error']['error_msg']='';
}
WPvivid_Setting::delete_option('wpvivid_transfer_error_array');
}
else{
$error_notice_html = false;
}
$ret['transfer_error_notice'] = $error_notice_html;
$ret['transfer']['result']='success';
$ret['transfer']['data']=$list_tasks;
if(!empty($task_ids))
{
foreach ($task_ids as $id)
{
WPvivid_Setting::delete_task($id);
}
}
echo wp_json_encode($ret);
die();
}
function wpvivid_rescan_backup_list(){
?>
'2', 'tab_func' => array($this, 'wpvivid_add_tab_upload'), 'page_func' => array($this, 'wpvivid_add_page_upload'));
return $backuplist_array;
}
function wpvivid_add_tab_upload(){
?>