Files
torebki-fabiola.pl/wp-content/plugins/wpvivid-backuprestore/includes/class-wpvivid-restore-data.php
2026-03-05 13:07:40 +01:00

393 lines
13 KiB
PHP

<?php
if (!defined('WPVIVID_PLUGIN_DIR')){
die;
}
class WPvivid_restore_data
{
public $restore_data_file;
public $restore_log_file;
public $restore_log=false;
public $restore_cache=false;
public function __construct()
{
$dir=WPvivid_Setting::get_backupdir();
$this->restore_data_file= WP_CONTENT_DIR.DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.'wpvivid_restoredata';
$this->restore_log_file= WP_CONTENT_DIR.DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.'wpvivid_restore_log.txt';
}
public function has_restore()
{
if(file_exists($this->restore_data_file))
{
return true;
}
else
{
return false;
}
}
public function delete_temp_files()
{
global $wpvivid_plugin;
$backup=$this->get_backup_data();
$backup_item=new WPvivid_Backup_Item($backup);
foreach($this->restore_cache['restore_tasks'] as $index => $task)
{
if(isset($task['option'])&&isset($task['option']['has_child']))
{
$has_child=1;
}
else
{
$option=$backup_item->get_file_info($task['files'][0]);
if(isset($option['has_child']))
{
$has_child=1;
}
else
{
$has_child=0;
}
}
if($has_child)
{
foreach ($task['files'] as $file)
{
$temp_files=$backup_item->get_child_files($file);
foreach ($temp_files as $delete_file)
{
$path = $wpvivid_plugin->get_backup_path($backup_item, $delete_file['file_name']);
//$path= $backup_item->get_local_path().$delete_file['file_name'];
if(file_exists($path))
{
$this->write_log('clean file:'.$path,'notice');
@unlink($path);
}
}
}
}
}
}
public function init_restore_data($backup_id,$restore_options=array())
{
//$data = require_once plugin_dir_path( dirname( __FILE__ ) ) .'includes/class-wpvivid-restore-template.php';
$this->restore_log=new WPvivid_Log();
$this->restore_log->CreateLogFile($this->restore_log_file,'has_folder','restore');
$data['task_id'] = $backup_id;
$data['status']= WPVIVID_RESTORE_INIT;
$data['error']='';
$data['error_task']='';
$data['restore_options']=$restore_options;
//$data['restore_options']['skip_backup_old_site']=1;
//$data['restore_options']['skip_backup_old_database']=1;
//$data['restore_options']['is_migrate']=1;
$backup=WPvivid_Backuplist::get_backup_by_id($backup_id);
$data['backup_data'] = $backup;
$backup_item=new WPvivid_Backup_Item($backup);
$packages=$backup_item->get_backup_packages();
foreach ($packages as $index=>$package)
{
$data['restore_tasks'][$index]['index']=$index;
$data['restore_tasks'][$index]['files']=$package['files'];
$data['restore_tasks'][$index]['unzip_files']=array();
$data['restore_tasks'][$index]['status']=WPVIVID_RESTORE_WAIT;
$data['restore_tasks'][$index]['result']=array();
$data['restore_tasks'][$index]['option']=array();
if(isset($package['option']))
{
$data['restore_tasks'][$index]['option']=$package['option'];
}
$data['restore_tasks'][$index]['option']=array_merge($restore_options, $data['restore_tasks'][$index]['option']);
}
usort($data['restore_tasks'], function ($a, $b)
{
if($a['index']==$b['index'])
return 0;
if($a['index']>$b['index'])
return 1;
else
return -1;
});
WPvivid_tools::file_put_array($data,$this->restore_data_file);
$this->restore_cache=$data;
}
public function get_restore_option()
{
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
return $this->restore_cache['restore_options'];
}
public function get_restore_status()
{
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
if(empty($this->restore_cache))
{
return WPVIVID_RESTORE_ERROR;
}
else
{
return $this->restore_cache['status'];
}
}
public function get_restore_error()
{
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
if(empty( $this->restore_cache))
{
return array('task_name'=>'file','error'=>'Restore data file not found, it may be deleted. Please verify the file exists.');
}
else
{
return array('task_name'=> $this->restore_cache['error_task'],'error'=> $this->restore_cache['error']);
}
}
public function clean_restore_data()
{
@unlink($this->restore_data_file);
}
public function write_log($message,$type)
{
if($this->restore_log===false)
{
$this->restore_log=new WPvivid_Log();
$this->restore_log->OpenLogFile($this->restore_log_file,'has_folder');
}
clearstatcache();
if(filesize($this->restore_log_file)>4*1024*1024)
{
$this->restore_log->CloseFile();
unlink($this->restore_log_file);
$this->restore_log=null;
$this->restore_log=new WPvivid_Log();
$this->restore_log->OpenLogFile($this->restore_log_file,'has_folder');
}
$this->restore_log->WriteLog($message,$type);
}
public function delete_restore_log()
{
if(file_exists($this->restore_log_file)) {
@unlink($this->restore_log_file);
}
}
public function save_error_log_to_debug()
{
if($this->restore_log===false) {
$this->restore_log=new WPvivid_Log();
$this->restore_log->OpenLogFile($this->restore_log_file,'has_folder');
}
WPvivid_error_log::create_restore_error_log($this->restore_log->log_file);
}
public function get_log_content()
{
$file =fopen($this->restore_log_file,'r');
if(!$file)
{
return '';
}
$buffer='';
while(!feof($file))
{
$buffer .= fread($file,1024);
}
fclose($file);
return $buffer;
}
public function get_log_handle()
{
if($this->restore_log===false)
{
$this->restore_log=new WPvivid_Log();
$this->restore_log->OpenLogFile($this->restore_log_file,'has_folder');
}
return $this->restore_log;
}
public function get_backup_data()
{
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
return $this->restore_cache['backup_data'];
}
public function get_restore_data()
{
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
return $this->restore_cache['data'];
}
public function get_restore_data_id(){
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
return $this->restore_cache['task_id'];
}
public function get_next_restore_task()
{
$next_task=false;
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
foreach($this->restore_cache['restore_tasks'] as $index => $task)
{
if($task['status'] === WPVIVID_RESTORE_WAIT)
{
$next_task=$task;
$next_task['index']=$index;
$this->restore_cache['status'] = WPVIVID_RESTORE_RUNNING;
$this->restore_cache['restore_tasks'][$index]['status'] = WPVIVID_RESTORE_RUNNING;
$this->restore_cache['restore_tasks'][$index]['time']['start'] = time();
WPvivid_tools::file_put_array($this->restore_cache,$this->restore_data_file);
break;
}
else if($task['status'] === WPVIVID_RESTORE_RUNNING)
{
$next_task=WPVIVID_RESTORE_RUNNING;
break;
}
else if($task['status'] === WPVIVID_RESTORE_COMPLETED)
{
continue;
}
}
return $next_task;
}
public function update_error($error,$error_task='',$table=array())
{
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
$this->restore_cache['status'] = WPVIVID_RESTORE_ERROR;
$this->restore_cache['error'] = $error;
if($error_task!='')
{
$this->restore_cache['data'][$error_task]['time']['end'] = time();
$this->restore_cache['data'][$error_task]['status'] = WPVIVID_RESTORE_ERROR;
$this->restore_cache['data'][$error_task]['return'] = $error;
$this->restore_cache['error_task'] = $error_task;
if(!empty($table))
{
$this->restore_cache['data'][$error_task]['table']['succeed'] = empty($table['succeed'])?0:$table['succeed'];
$this->restore_cache['data'][$error_task]['table']['failed'] = empty($table['failed'])?0:$table['failed'];
$this->restore_cache['data'][$error_task]['table']['unfinished'] = empty($table['unfinished'])?0:$table['unfinished'];
}
}
WPvivid_tools::file_put_array($this->restore_cache,$this->restore_data_file);
}
public function update_status($status)
{
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
$this->restore_cache['status'] = $status;
WPvivid_tools::file_put_array($this->restore_cache,$this->restore_data_file);
}
public function update_sub_task($task_index,$result)
{
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
if($result['result']==WPVIVID_SUCCESS)
{
$files=$this->get_need_unzip_file($this->restore_cache['restore_tasks'][$task_index]);
if(empty($files))
{
$this->restore_cache['restore_tasks'][$task_index]['result']=$result;
$this->restore_cache['restore_tasks'][$task_index]['status']=$result['result'];
}
else {
$this->restore_cache['restore_tasks'][$task_index]['result']=$result;
$this->restore_cache['restore_tasks'][$task_index]['status']=WPVIVID_RESTORE_WAIT;
}
}
else
{
$this->restore_cache['restore_tasks'][$task_index]['result']=$result;
$this->restore_cache['restore_tasks'][$task_index]['status']=$result['result'];
}
$this->restore_cache['data'][$task_index]['time']['end'] = time();
WPvivid_tools::file_put_array($this->restore_cache,$this->restore_data_file);
}
public function get_need_unzip_file($restore_task)
{
$files=array();
foreach ($restore_task['files'] as $file)
{
if(in_array($file,$restore_task['unzip_files']))
{
continue;
}
else
{
$files[]=$file;
return $files;
}
}
return $files;
}
public function update_need_unzip_file($task_index,$files)
{
if($this->restore_cache===false)
{
$this->restore_cache=WPvivid_tools::file_get_array($this->restore_data_file);
}
$this->restore_cache['restore_tasks'][$task_index]['unzip_files']=array_merge($this->restore_cache['restore_tasks'][$task_index]['unzip_files'],$files);
WPvivid_tools::file_put_array($this->restore_cache,$this->restore_data_file);
}
}