148 lines
5.8 KiB
PHP
148 lines
5.8 KiB
PHP
<?php
|
|
|
|
if (!defined('WPVIVID_PLUGIN_DIR'))
|
|
{
|
|
die;
|
|
}
|
|
|
|
class WPvivid_Upload
|
|
{
|
|
public $task_id;
|
|
|
|
public function upload($task_id,$remote_option=null)
|
|
{
|
|
global $wpvivid_plugin;
|
|
$this->task_id=$task_id;
|
|
$task=new WPvivid_Backup_Task($task_id);
|
|
$files=$task->get_backup_files();
|
|
WPvivid_taskmanager::update_backup_main_task_progress($this->task_id,'upload',0,0);
|
|
|
|
if(is_null($remote_option))
|
|
{
|
|
$remote_options=WPvivid_taskmanager::get_task_options($this->task_id,'remote_options');
|
|
|
|
if(sizeof($remote_options)>1)
|
|
{
|
|
$result=array('result' => WPVIVID_FAILED , 'error' => 'not support multi remote storage');
|
|
$result= apply_filters('wpvivid_upload_files_to_multi_remote',$result,$task_id);
|
|
|
|
if($result['result']==WPVIVID_SUCCESS)
|
|
{
|
|
WPvivid_taskmanager::update_backup_main_task_progress($this->task_id,'upload',100,1);
|
|
WPvivid_taskmanager::update_backup_task_status($task_id,false,'completed');
|
|
return array('result' => WPVIVID_SUCCESS);
|
|
}
|
|
else
|
|
{
|
|
WPvivid_taskmanager::update_backup_task_status($this->task_id,false,'error',false,false,$result['error']);
|
|
return array('result' => WPVIVID_FAILED , 'error' => $result['error']);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$remote_option=array_shift($remote_options);
|
|
|
|
if(is_null($remote_option))
|
|
{
|
|
return array('result' => WPVIVID_FAILED , 'error' => 'not select remote storage');
|
|
}
|
|
|
|
if(!class_exists('WPvivid_Remote_collection'))
|
|
{
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/class-wpvivid-remote-collection.php';
|
|
$wpvivid_plugin->remote_collection=new WPvivid_Remote_collection();
|
|
}
|
|
$remote=$wpvivid_plugin->remote_collection->get_remote($remote_option);
|
|
|
|
$result=$remote->upload($this->task_id,$files,array($this,'upload_callback'));
|
|
|
|
if($result['result']==WPVIVID_SUCCESS)
|
|
{
|
|
WPvivid_taskmanager::update_backup_main_task_progress($this->task_id,'upload',100,1);
|
|
WPvivid_taskmanager::update_backup_task_status($task_id,false,'completed');
|
|
return array('result' => WPVIVID_SUCCESS);
|
|
}
|
|
else
|
|
{
|
|
$remote ->cleanup($files);
|
|
|
|
WPvivid_taskmanager::update_backup_task_status($this->task_id,false,'error',false,false,$result['error']);
|
|
return array('result' => WPVIVID_FAILED , 'error' => $result['error']);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(!class_exists('WPvivid_Remote_collection'))
|
|
{
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/class-wpvivid-remote-collection.php';
|
|
$wpvivid_plugin->remote_collection=new WPvivid_Remote_collection();
|
|
}
|
|
$remote=$wpvivid_plugin->remote_collection->get_remote($remote_option);
|
|
|
|
$result=$remote->upload($this->task_id,$files,array($this,'upload_callback'));
|
|
|
|
if($result['result']==WPVIVID_SUCCESS)
|
|
{
|
|
WPvivid_taskmanager::update_backup_main_task_progress($this->task_id,'upload',100,1);
|
|
WPvivid_taskmanager::update_backup_task_status($task_id,false,'completed');
|
|
return array('result' => WPVIVID_SUCCESS);
|
|
}
|
|
else
|
|
{
|
|
$remote ->cleanup($files);
|
|
|
|
WPvivid_taskmanager::update_backup_task_status($this->task_id,false,'error',false,false,$result['error']);
|
|
return array('result' => WPVIVID_FAILED , 'error' => $result['error']);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function upload_callback($offset,$current_name,$current_size,$last_time,$last_size)
|
|
{
|
|
$job_data=array();
|
|
$upload_data=array();
|
|
$upload_data['offset']=$offset;
|
|
$upload_data['current_name']=$current_name;
|
|
$upload_data['current_size']=$current_size;
|
|
$upload_data['last_time']=$last_time;
|
|
$upload_data['last_size']=$last_size;
|
|
$upload_data['descript']='Uploading '.$current_name;
|
|
$v =( $offset - $last_size ) / (time() - $last_time);
|
|
$v /= 1000;
|
|
$v=round($v,2);
|
|
|
|
global $wpvivid_plugin;
|
|
$wpvivid_plugin->check_cancel_backup($this->task_id);
|
|
|
|
$message='Uploading '.$current_name.' Total size: '.size_format($current_size,2).' Uploaded: '.size_format($offset,2).' speed:'.$v.'kb/s';
|
|
$wpvivid_plugin->wpvivid_log->WriteLog($message,'notice');
|
|
$progress=intval(($offset/$current_size)*100);
|
|
WPvivid_taskmanager::update_backup_main_task_progress($this->task_id,'upload',$progress,0);
|
|
WPvivid_taskmanager::update_backup_sub_task_progress($this->task_id,'upload','',WPVIVID_UPLOAD_UNDO,$message, $job_data, $upload_data);
|
|
}
|
|
|
|
public function get_backup_files($backup)
|
|
{
|
|
$backup_item=new WPvivid_Backup_Item($backup);
|
|
|
|
return $backup_item->get_files();
|
|
}
|
|
|
|
public function clean_remote_backup($remotes,$files)
|
|
{
|
|
$remote_option=array_shift($remotes);
|
|
|
|
if(!is_null($remote_option))
|
|
{
|
|
global $wpvivid_plugin;
|
|
if(!class_exists('WPvivid_Remote_collection'))
|
|
{
|
|
include_once WPVIVID_PLUGIN_DIR . '/includes/class-wpvivid-remote-collection.php';
|
|
$wpvivid_plugin->remote_collection=new WPvivid_Remote_collection();
|
|
}
|
|
$remote=$wpvivid_plugin->remote_collection->get_remote($remote_option);
|
|
$remote ->cleanup($files);
|
|
}
|
|
}
|
|
} |