'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() { ?> ajax_check_security(); $url=strtok($_POST['url'],'?'); if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) { $ret['result']=WPVIVID_FAILED; $ret['error']='The key is invalid.'; echo json_encode($ret); die(); } if($url==home_url()) { $ret['result']=WPVIVID_FAILED; $ret['error']='The key generated by this site cannot be added into this site.'; echo json_encode($ret); die(); } $query=parse_url ($_POST['url'],PHP_URL_QUERY); if($query===null) { $query=strtok('?'); } parse_str($query,$query_arr); $token=$query_arr['token']; $expires=$query_arr['expires']; $domain=$query_arr['domain']; if ($expires != 0 && time() > $expires) { $ret['result'] = 'failed'; $ret['error'] = 'The key has expired.'; echo json_encode($ret); die(); } $json['test_connect']=1; $json=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 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=date("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 json_encode($ret); } die(); } public function delete_transfer_key() { global $wpvivid_plugin; $wpvivid_plugin->ajax_check_security(); $ret['result']=WPVIVID_SUCCESS; delete_option('wpvivid_saved_api_token'); $html=''; $html = apply_filters('wpvivid_put_transfer_key', $html); $ret['html']=$html; echo json_encode($ret); die(); } public function send_backup_to_site() { try { global $wpvivid_plugin; $wpvivid_plugin->ajax_check_security(); $options = WPvivid_Setting::get_option('wpvivid_saved_api_token'); if (empty($options)) { $ret['result'] = 'failed'; $ret['error'] = __('A key is required.', 'wpvivid-backuprestore'); echo 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 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 json_encode($ret); die(); } $json['test_connect']=1; $json=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 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 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 json_encode($ret); die(); } } else { $ret['result']=WPVIVID_FAILED; $ret['error']= 'upload error '.$response['response']['code'].' '.$response['body']; echo 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 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($_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 json_encode($ret); die(); } catch (Exception $e){ $ret['result'] = 'failed'; $ret['error'] = $e->getMessage(); echo json_encode($ret); die(); } } public function migrate_now() { global $wpvivid_plugin; $wpvivid_plugin->ajax_check_security(); 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 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; $wpvivid_plugin->ajax_check_security(); $schedule_options=WPvivid_Schedule::get_schedule(); if(empty($schedule_options)) { die(); } $backup_options = stripslashes($_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() { include_once WPVIVID_PLUGIN_DIR . '/vendor/autoload.php'; global $wpvivid_plugin; $wpvivid_plugin->ajax_check_security(); $expires=time()+3600; if(isset($_POST['expires'])) { if($_POST['expires']=='1 month') { $expires=time()+2592000; } else if($_POST['expires']=='1 day') { $expires=time()+86400; } else if($_POST['expires']=='2 hour') { $expires=time()+7200; } else if($_POST['expires']=='8 hour') { $expires=time()+28800; } else if($_POST['expires']=='24 hour') { $expires=time()+86400; } else if($_POST['expires']=='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 wpvivid_put_transfer_key($html){ $html='
'; $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: '.date("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) { $html = ''; $html .= '
'; return $html; } public function wpvivid_migrate_part_note($html){ $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.', 'wpvivid-backuprestore'), 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($html, $name_type){ $html .= '



'; return $html; } public function list_tasks() { global $wpvivid_plugin; $wpvivid_plugin->ajax_check_security(); $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 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(){ ?>