'3', 'tab_func' => array($this, 'wpvivid_add_tab_migrate'), 'page_func' => array($this, 'wpvivid_add_page_migrate')); $page_array['key'] = array('index' => '8', 'tab_func' => array($this, 'wpvivid_add_tab_key'), 'page_func' => array($this, 'wpvivid_add_page_key')); return $page_array; } public function wpvivid_add_tab_migrate() { ?>

'.esc_html__( 'Choose the content you want to transfer', 'wpvivid-backuprestore').'

input type="radio" '; do_action('wpvivid_add_migrate_type_output', $type_name); echo '
'; ?>

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.

2. Please migrate website with the manual way when using Local by Flywheel environment.

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

'.esc_html__('How to migrate Wordpress site manually to a new domain(site) with WPvivid backup plugin?', 'wpvivid-backuprestore').'

'.esc_html__('1. Download a backup in backups list to your computer.', 'wpvivid-backuprestore').'

'.esc_html__('2. Upload the backup to destination site. There are two ways available to use:', 'wpvivid-backuprestore').'

'.esc_html__('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.', esc_html(WP_CONTENT_DIR.DIRECTORY_SEPARATOR.$backupdir)).'

'.esc_html__('3. Once done, the backup appears in backups list. Then, restore the backup.', 'wpvivid-backuprestore').'

'; ?>
$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 '
'.esc_html__('Please paste the key below.', 'wpvivid-backuprestore').''.esc_html__('How to get a site key?', 'wpvivid-backuprestore').'
'; } 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 .= '
'.__('Please paste the key below.', 'wpvivid-backuprestore').''.__('How to get a site key?', 'wpvivid-backuprestore').'
'; } 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 '



'; } public function wpvivid_add_migrate_type($html, $name_type){ $html .= '



'; 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.'

'; 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']='

'.$notice_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(){ ?>